RawCull changes, listed by publication date. Each entry begins with a short summary, followed by the detailed changelog.
Recent Changes
Version 3.2.8: RAW 9 preview handling, AF-point sharpness sorting, and focus evidence in AI review.
Version 3.2.6: Objects analysis with numbered subjects, crops, and local descriptions.
Version 3.2.4: the AI Analysis workspace and Qwen Vision assessments.
Reading the History
Release notes record behavior and release status at the date shown. Older versions may have different requirements, controls, and model support. Source-development notes are not confirmation of App Store availability.
RawCull 3.2.9 is in development and has not yet been released.
Catalog-wide JPEG extraction, Burst Groups preparation status, and catalog and cache reliability improvements.
Changes: v3.2.8 β v3.2.9 (in development)
This changelog continues from the 3.2.8 release notes and covers source changes since the v3.2.8 tag through October 6, 2026. It is a development snapshot; features and build numbers may change before release.
In development - not yet released. RawCull 3.2.9 adds a complete-catalog option for JPEG extraction and shows preparation coverage in Burst Groups. It also strengthens catalog cancellation, asynchronous sorting, background folder access, and thumbnail-cache accounting. This page does not announce App Store, TestFlight, or downloadable release availability.
RawCull requires macOS 27 (Golden Gate) and an Apple Silicon Mac. Building from source requires Xcode 27.
Commit range:v3.2.8..da251c4 Baseline tag:v3.2.8 at 2b04aa6 (2026-09-30), RawCull 3.2.8 Build 398 Latest commit:da251c4 (Align release documentation and metadata tests with 3.2.9, 2026-10-06) Current source version: RawCull 3.2.9 (Build 403) Release status: In development; not yet released
JPEG Extraction
Add an Images selector to the JPEG extraction sheet, with Selected images and Complete catalog options.
Default to selected images when a selection exists; otherwise use the complete active catalog.
Use the chosen scope for extraction and the sheet’s source summary.
Retain source-folder access while background JPEG extraction and embedded-preview cache warming finish.
Burst Groups Preparation Status
Add a Review data panel to the Burst Groups home view.
Show coverage counts and preparation state for sharpness, the CLIP index, Vision similarity data, optional subject evidence, and burst grouping.
Distinguish ready, partial, preparing, needed, unavailable, and empty-catalog states.
Mark the inactive similarity backend as Not used.
Hide the idle semantic-search coverage message when all catalog photographs have compatible CLIP artifacts; keep incomplete-coverage guidance visible.
Catalog Cancellation and Sorting
Make Abort cancel pending catalog transitions as well as active catalog loading.
Reject cancelled or superseded transitions after persistence finishes, preventing a delayed transition from starting a catalog load or restoring an outdated selection.
Publish asynchronous sort results only when the request, catalog, selected source, sort order, and search text still match.
Invalidate pending sorts when catalog loading is cancelled and keep sorting activity tied to the current request.
Background Folder Access
Retain catalog access for the lifetime of background file operations, including catalog loading, thumbnail creation, JPEG extraction, full-size previews, sharpness scoring, similarity indexing, and AI analysis.
Keep existing work’s folder access alive when the selected catalog changes, then release it when that work finishes.
Strengthen shared catalog-access bookkeeping for overlapping operations.
Thumbnail Cache Reliability
Synchronize thumbnail storage changes with cached-image count and memory-cost accounting.
Handle replacement and eviction callbacks using entry identities so an older entry’s eviction cannot remove a newer entry’s accounting.
Give each tracked cache ownership of its eviction delegate and detach the delegate during teardown.
Clear storage and accounting together when resetting the cache.
Release Tooling and Dependencies
Add Scripts/release.sh and Makefile commands for internal TestFlight and App Store Connect uploads, with dry-run support and optional explicit build numbers.
Preserve archives and export diagnostics under build/releases/. These upload commands do not submit for App Review or publish the app.
Advance app and model-downloader metadata to version 3.2.9, Build 403, and align release-metadata tests and documentation.
Update PhotoAIKit to revision 648ea75a1c6bf511e03e879100dc149e4cccd022 and Apple Core AI models to revision 52c84ba874b2c57adcede08a671ce96ed1b3f433.
Update Swift Hugging Face from 0.11.0 to 0.12.0.
Regression Coverage
Add tests for aborted and superseded catalog transitions and stale asynchronous sort results.
Add tests for retained catalog access across overlapping operations and Qwen analysis cancellation.
Add concurrent cache-accounting tests and complete-catalog JPEG extraction selection coverage.
These entries describe checked-in test coverage, not test results from preparing this changelog. No application tests, release uploads, or Hugo build were run while preparing this page.
Version 3.2.8
By Thomas Evensen |
RAW 9 preview handling, AF-point sharpness sorting, and measured focus-location evidence in AI review.
Historical record dated 2026-10-02. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v3.2.6 β v3.2.8
This changelog continues from the 3.2.6 release notes and covers subsequent development through the latest source commit on September 30, 2026. It includes the intervening development leading to version 3.2.8 and does not establish App Store availability.
RawCull 3.2.8 improves developed RAW previews with RAW 9 decoder requests, makes Grid View sharpness sorting use detail measured at the camera autofocus point, and adds focus maps and autofocus markers to Objects and SAM 3 + CLIP Deep Review. It also refines context-sensitive keyboard shortcut help and expands the Release integration tools for real-photo sharpness evaluation.
RawCull requires macOS 27 (Golden Gate) and an Apple Silicon Mac. Building from source requires Xcode 27.
Commit range:89cb666..1c12bb0 Baseline: the 3.2.6 source snapshot documented in the previous release notes, Build 392 Latest commit:1c12bb0 (update, 2026-09-30) Current source version: RawCull 3.2.8 (Build 398) Scope: 17 commits after the documented 3.2.6 snapshot
π Major Enhancements
Request RAW 9 decoding for developed RAW previews and sharpness analysis.
Show RAW 9 in the image-source selector when the installed decoder supports it for the selected photograph.
Sort Grid View photographs by measured detail at the recorded autofocus point.
Display focus maps and camera autofocus markers alongside AI subject outlines.
Add measured focus-location evidence to individual Objects results.
Show keyboard shortcut help for the active review workspace.
Add a separate real-photo Release sharpness test plan and detailed Markdown reports.
πΌοΈ RAW 9 Preview Handling
Request RAW 9 when developing full-size RAW JPEGs and generating sharpened previews for Zoom and comparison views.
Request RAW 9 in the production photo-analysis adapter.
Check the selected file’s supported decoder versions asynchronously, recognizing both RAW 9 and RAW 9 DNG support.
Label the developed source RAW 9 when supported, with corresponding help text and accessibility labels. Retain the RAW label and system-decoder guidance when RAW 9 is unavailable.
Update developed-RAW disk-cache keys so previews generated by the previous decoder are not reused. Embedded JPEG cache keys remain compatible.
Decoder availability is determined per photograph by the installed system; this change does not promise RAW 9 support for every camera or file.
π― AF-Point Sharpness Sorting
Change catalog/Grid View sharpness ordering to use the small AF-center measurement rather than the combined photograph score.
Require a valid recorded autofocus location and a finite, usable AF-center score before treating a photograph as measured.
Sort measured photographs strongest-first and place unknown measurements last, preserving the incoming order for ties and unknown values.
Rename the controls to Score AF Sharpness and AF-point sharpness, and show the number of photographs with AF measurements.
Save and restore AF-point scores separately from existing combined sharpness scores.
Keep legacy saved combined scores from enabling AF-point sorting when no usable AF measurements exist.
The smaller measurement region helps avoid ranking a photograph by nearby sharp background detail instead of the intended focus location. A score remains review evidence rather than a guarantee that the subject or eye is sharp.
π§ Focus Evidence in AI Review
Add the generated focus map and camera autofocus point to the Objects overview alongside numbered regions and subject outlines.
Add per-object Measured focus locations showing whether the camera AF point lies inside the object, the object’s share of highlighted focus-map edges, and highlighted edges near the AF point when available.
Report missing focus information as unavailable.
Add focus maps and camera autofocus markers to SAM 3 + CLIP Deep Review previews alongside the subject mask.
Load preview and focus information asynchronously, with cancellation checks when the selected photograph changes.
These spatial measurements support inspection alongside Qwen’s assessment. Focus-map overlap alone does not confirm sharpness, and AI assessments remain advisory.
β¨οΈ Context-Sensitive Shortcut Help
Refine the About window to show shortcuts for the active workspace together with shared app commands.
Match Zoom navigation help to the active vertical or horizontal navigation axis.
Expand guidance for focus masks, autofocus points, subject outlines, source switching, ratings, and burst actions.
Clarify that P means previous in Burst Review, where 0 keeps a photograph neutral.
π§ͺ Release Sharpness Evaluation and Tests
Add make releasesharpnesstest and the separate ReleaseSharpness plan to the existing hostless Release integration target.
Analyze real ARW photographs in 11 scenarios covering all five presets, missing AF information, quality levels, image resolution, and embedded-preview versus RAW-demosaic input.
Run sharpness evaluation without requiring Qwen or SAM 3 models, using a separate explicit opt-in flag.
Write incremental Markdown reports containing configuration, algorithm identity, metadata, scores, available focus diagnostics, timings, failures, ordering comparisons, and a visual-inspection worksheet.
Preserve failed and unprocessed comparisons, and return failure for invalid or incomplete scoring runs.
Rename the Objects integration suite to ReleaseAIObjectsTest and retain separate plans and opt-in controls for Objects and sharpness runs.
Add regression coverage for AF-point ordering, invalid and missing measurements, saved-score handling, and object focus-location mapping.
The harness checks execution and numeric validity. Photographic ranking accuracy still requires visual review and expert-ranked comparison photographs. No application tests or real-photo benchmarks were run while preparing this changelog.
π οΈ Dependencies and Documentation
Advance app and downloader-extension metadata to version 3.2.8, Build 398.
Update RawParserKit from 1.3.0 to 1.3.1 and Swift Collections from 1.7.0 to 1.7.1.
Expand the Release integration documentation with sharpness scenarios and report interpretation.
Consolidate asset guidance into Docs/assets.md and add a future-release roadmap. Roadmap proposals are not implemented features or commitments for 3.2.8.
Version 3.2.6
By Thomas Evensen |
Objects analysis with numbered subjects and crops, plus improved AI review and file-copy handling.
Historical record dated 2026-09-28. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v3.2.4 β v3.2.6
This changelog covers development since the released RawCull 3.2.4 through the latest source commit on September 28, 2026. It includes the intervening 3.2.5 work and the current 3.2.6 implementation; it does not establish App Store availability for 3.2.6.
RawCull 3.2.6 adds an Objects mode to AI Analysis, combining SAM 3 instance segmentation with Qwen vision-language assessment of numbered subjects. This update also improves AI selection and rerun behavior, moves image-review state into focused sessions, keeps every frame visible in burst grids, strengthens copy-folder access handling, and adds a separate Release-mode integration test runner for real RAW photographs. AI inference continues to run locally on the Mac.
RawCull requires macOS 27 (Golden Gate), an Apple Silicon Mac, and Xcode 27 when building from source.
Commit range:v3.2.4..89cb666 Baseline tag:v3.2.4 at 6612d1a (2026-09-21), RawCull 3.2.4 Build 383 Latest commit:89cb666 (release test, 2026-09-28) Current version: RawCull 3.2.6 (Build 392) Scope: 64 commits after the 3.2.4 tag
The tagged baseline is used for this comparison. The earlier 3.2.4 blog post describes a pre-tag snapshot and lists Build 380; the released tag itself declares Build 383.
π Major Features
Added Objects beside SAM 3 + CLIP and Qwen Vision in the AI Analysis workspace.
Added automatic discovery of visible object categories and a manual Specific Concepts mode.
Added separate SAM 3 object instances, numbered object crops, mask outlines, and Qwen assessments for each retained subject.
Added retryable object-assessment failures with reuse of compatible cached segmentation masks.
Fixed AI result views overriding a photograph selected in Grid View.
Allowed SAM 3 + CLIP Deep Review to run again when the analysis target changes.
Extracted focused comparison, Loupe, Zoom, Burst, and histogram presentation models.
Removed burst-grid Clean View and collapse controls so every frame remains visible.
Added an opt-in, hostless Release integration test target and Markdown analysis reports.
π§ Objects: SAM 3 and Qwen Analysis
Added analysis of the selected or rated photographs already available to the AI Analysis workspace.
Added Automatic mode, where Qwen proposes concrete, visible object categories before SAM 3 locates their instances.
Added Specific Concepts mode with comma-separated categories such as bird, person, car.
Limited discovery and manual input to six concepts, normalized duplicate concepts, and rejected invalid or empty manual entries.
Preserved completed results and skipped successful photographs when continuing analysis.
Kept invalid structured assessments retryable and preserved the original response for inspection.
Reused cached segmentation for assessment retries when source metadata, concept mode, Qwen model name, and mask-cache entries remain compatible; otherwise performed segmentation again.
Added guidance for missing SAM 3, missing Qwen, both missing, no results, no matching objects, and no selected result.
Added accessibility labels for analysis modes, input sources, object concepts, results, mask scores, and selected-object crops.
π§ Qwen Response Reliability and Model Lifecycle
Added a general vision-request interface with an instruction, image, and response-token limit, shared by Qwen Vision and Objects.
Serialized Qwen generations across features sharing the same inference runtime.
Added cancellable waiting for queued generation requests.
Cancelled active inference when the model is cleared or revalidated, and rejected results from superseded model generations.
Validated token limits and rejected empty model responses.
Used 384 response tokens for concept discovery and 1,024 for object assessment; retained the existing 512-token whole-photo assessment limit.
Added JSON-envelope extraction followed by strict discovery and assessment validation.
Added specific errors for incomplete JSON, missing or mistyped fields, invalid values, excessive list lengths, and duplicate, unknown, or missing object IDs.
Required the structured assessment to cover exactly the object IDs sent on the board, with finite confidence values between zero and one.
Accepted observed response variations including numeric board IDs, an omitted optional image summary, and singular text values in list fields, while retaining ID and value validation.
Added optional private diagnostic capture of raw discovery and assessment responses with model, token-limit, and response-length metadata.
Added separate in-memory and optional disk stores for object masks, alongside the existing subject-mask stores.
Connected Objects availability to the application-owned SAM 3 service and shared Qwen runtime.
Cancelled Objects work when its model services change and disabled it while managed model locations are being refreshed.
π― AI Workspace, Selection, and Deep Review
Grouped image-source controls beside the analysis-tool choices and expanded the mode picker for the third tool.
Allowed switching tools or image sources during analysis, cancelling the affected in-flight work.
Preserved an existing Grid selection when returning to stored Qwen or Deep Review results; chose a result automatically only when no photograph was selected.
Tracked completed Deep Review photographs separately for each target preset.
Allowed photographs analyzed under one target to be analyzed under another, such as Full Subject or Head / Face.
Removed unused Deep Review summary presentation and controller forwarding code.
π Comparison, Loupe, Zoom, and Burst Review
Moved comparison selection, display scope, image state, source flags, viewport state, loading, reloads, and focus-mask work into ComparisonSessionModel.
Added a comparison presentation snapshot for visible files, rows, selection, recommendation, focus status, and analysis status.
Extracted shared image-review policies for source selection, rating display/actions, keyboard actions, zoom limits, and request identity.
Added LoupeSessionModel, ZoomSessionModel, and BurstWorkspaceSessionModel to own workspace-specific review state and lifecycle.
Routed review actions through focused rating, navigation, focus-analysis, and subject-outline dependencies.
Added request tracking and cancellation checks to prevent stale image or focus results from replacing current review state.
Hardened comparison completion handling so older reloads and bulk loads superseded by newer work are rejected.
Preserved the existing review controls and source choices during the session extraction.
Moved histogram bins and asynchronous presentation into HistogramPresentationModel.
Renamed the Loupe image view to LoupeMainImageView and standardized several model and view property names.
ποΈ Burst Grid and Catalog Sorting
Removed Clean View, the top-three-frame limit, and burst expand/collapse controls.
Kept every burst frame available in ranked order, appending frames absent from the ranking.
Kept review/defer actions without hiding frames after a review-state change.
Replaced the nested lazy horizontal stack with an eager stack so burst rows retain a stable height inside the outer lazy list.
Replaced generic catalog sort comparators with a typed descriptor for filename, modification date, and size, in either direction.
Used natural filename comparison and explicitly preserved input order for equal sort values.
Retained case-insensitive filename filtering after sorting.
π Copy-Folder Access and Reliability
Added CopyBookmarkStore as the shared owner of destination bookmark creation, resolution, refresh, and access acquisition.
Preserved the existing destBookmark preference key so saved destinations remain usable.
Added scoped-access objects that release successful folder-access acquisitions once, including during cleanup or deinitialization.
Kept source and destination access active for the copy operation and released both during cleanup.
Refreshed stale destination bookmarks while access was active; a refresh failure did not discard an otherwise usable grant.
Preserved the previous saved destination if selecting or saving a replacement failed.
Added explicit missing, invalid, denied-access, and save-failure handling with folder-reselection guidance.
Updated the folder picker and copy executor to use the same bookmark store.
Standardized copy, source/destination, and output-presentation naming.
Added regression coverage for comparison cancellation, out-of-order reloads, superseded bulk results, and selected image sources.
Added copy-bookmark tests for saved-destination compatibility, refresh behavior, denied access, failed replacement, and balanced access release.
Added natural-sort, stable-tie, and revised burst-frame-order coverage.
Raised the expected smoke enumeration from 222 to 227 tests and retained two performance tests.
Updated release-metadata expectations for version 3.2.6 and matching app/downloader build numbers.
Added RawCullReleaseTests, its shared scheme, and the ReleaseObjects test plan, separate from ordinary app, smoke, and performance tests.
Added make releastest to run the production Objects, Qwen, and RAW-loader sources in a hostless Release target on arm64 macOS 27.
Added configurable catalog and model paths, with a default nonrecursive scan of ARW files in Downloads.
Added a unique Markdown report written before model initialization, after each photograph, and at completion, containing identities, concepts, masks, assessments, timings, raw fallback responses, and failures.
Continued processing remaining photographs after a per-photo failure and returned failure for incomplete analysis.
Added isolated release-runner contract tests and required explicit environment opt-in for real-model inference.
π Recorded Validation and Current Limits
The checked-in Objects workplan records a September 24 Xcode run with 466 tests passed and one skipped out of 467. This is recorded historical evidence, not a test run performed while preparing this changelog.
The documented eight-photo packaged-model probe produced 16 structured results from 16 analyses across Automatic and manual bird modes, with the expected board-ID sets.
The workplan also records completed in-app Automatic batches for eight puffin photographs and eight mixed-subject photographs.
Visual grounding remains under validation: recorded examples include swapped crop descriptions, repeated descriptions, and an incorrect additional-bird claim despite valid structured output and high reported confidence.
Objects assessments remain advisory. Structured decoding, successful model downloads, and Qwen confidence do not establish factual accuracy.
Successful photographs are skipped on subsequent analysis. Use Clear Results before comparing discovery modes or changing criteria for a photograph already marked Complete.
Advanced the tagged RawCull 3.2.4 Build 383 baseline through 3.2.5 and into RawCull 3.2.6 Build 392.
Updated PhotoAIKit to revision 77cc1d84a5d98a485caa15be102c8a55eb3d7698, including the additive SAM 3 instance API alongside existing union-mask support.
Updated Apple Core AI models to revision 475c585fdb0fe82a83c8f777f259e9414bd44c98.
Updated resolved Swift ASN.1 to 1.7.3, Swift Collections to 1.7.0, and Swift Hugging Face to 0.11.0.
Extended AI import-boundary verification for the object-analysis workflow.
Updated the README for the current AI workflows, model requirements, and application structure.
Expanded the SAM 3 β Qwen workplan with implementation checkpoints, response-reliability findings, real-model results, known issues, and remaining release evidence.
Added a detailed Apple-hosted model-pack runbook covering packaging, provenance, uploads, processing, and exact-build TestFlight download checks.
Revised Apple assets documentation to distinguish the released 3.2.4 distribution baseline from ongoing 3.2.6 Objects validation.
Documented the separate Release integration runner and its report format.
π¦ Development Progression
September 21: began post-3.2.4 correctness hardening and catalog/review refinements.
September 22: extracted comparison and shared review policies, adopted focused Loupe/Zoom/Burst sessions, and refined burst presentation.
September 23: completed the 3.2.5 work, strengthened copy bookmarks, fixed AI result selection and target reruns, and advanced to Build 388.
September 24: implemented the 3.2.6 Objects pipeline, UI, caching, response validation, and real-model validation refinements.
September 26: updated release and model-pack guidance with Objects test evidence and known visual-grounding issues.
September 28: added the Release Objects integration test target and report runner; current source is Build 392 at 89cb666.
Version 3.2.4
By Thomas Evensen |
A dedicated AI Analysis workspace with local Qwen Vision assessments of selected photographs.
Historical record dated 2026-09-20. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v3.2.1 β v3.2.4
Version 3.2.4 is submitted for update on Apple App Store.
RawCull 3.2.4 adds a dedicated AI Analysis workspace for selected or rated photographs. It combines the existing SAM 3 and DataComp CLIP review workflow with a new local Qwen3-VL vision-language assessment tool. All inference remains on the Mac, and the production model catalog now supports Apple-hosted Managed Background Assets for DataComp CLIP, SAM 3, and Qwen3-VL-2B-Instruct.
RawCull 3.2.4 requires macOS 27 (Golden Gate), an Apple Silicon Mac, and Xcode 27 when building from source.
Added a dedicated AI Analysis workspace for photographs selected in Grid View or rated two stars and higher.
Added a choice between SAM 3 + CLIP Deep Review and local Qwen photo assessment.
Added Qwen3-VL-2B-Instruct to RawCull’s verified model catalog and Managed Background Assets workflow.
Added Apple-hosted model delivery for DataComp CLIP, SAM 3, and Qwen3-VL-2B-Instruct.
Added local, criteria-driven vision-language assessment with structured scores, strengths, problems, confidence, and subject details.
Improved SAM 3 prompt selection by using cached CLIP artifacts to infer coarse subject labels.
β¨ AI Analysis Workspace
Added an AI Analysis toolbar action that becomes available when a catalog has selected or rated images to review.
Added separate input choices for the current Grid selection and photographs rated two stars or higher.
Preserved the selected photographs when moving between Grid View and AI Analysis.
Added a horizontal thumbnail strip so the complete analysis set remains visible while reviewing results.
Added empty-state guidance when the chosen input source has no photographs.
Moved Deep Review out of burst-group headers and into the focused AI Analysis workflow.
Allowed SAM 3 + CLIP analysis to operate on an arbitrary selected or rated set, not only an existing burst group.
Applied the SAM 3 + CLIP recommendation back to RawCull’s current selection and returned directly to Grid View when the review closes.
π§ Qwen Photo Assessment
Added local Qwen3-VL vision-language inference through PhotoAIKit’s Core AI Qwen backend.
Added editable assessment criteria, with a default review covering composition, exposure, subject visibility, expression, and obstructions.
Added sequential batch analysis with per-image progress, cancellation, partial-failure handling, and protection against stale results.
Added structured results for subject, composition, exposure, visibility, eye state, strengths, problems, overall score, and confidence.
Added a sortable results table and a detail panel for each analyzed photograph.
Preserved useful free-form model responses when Qwen does not return the structured schema.
Added clear unavailable, validating, missing, invalid, and ready states for the active Qwen model.
Rejected text-only Qwen models because RawCull requires a compatible vision-language bundle.
Kept Qwen assessments advisory so photographers can verify the model’s conclusions before making culling decisions.
π¦ AI Models and Downloads
Added the verified Qwen3-VL-2B-Instruct Core AI model pack to the model-download catalog.
Added Qwen provenance, Apache 2.0 licensing, Apple Core AI conversion notices, archive size, installed size, and SHA-256 verification.
Added Qwen to the Managed Background Assets manifest beside DataComp CLIP and SAM 3.
Added automatic use of the downloaded managed Qwen model with an optional custom Core AI model-folder override.
Added security-scoped bookmark persistence for custom Qwen model folders.
Added model revalidation, source switching, clearing, and recovery when a saved custom model can no longer be accessed.
Updated DataComp CLIP and SAM 3 provenance records for the new model release.
Updated the production download service to use Apple’s hosted asset-pack manifest.
Added App Store Background Assets metadata, shared app-group configuration, and packaging support for all three model packs.
Updated model release documentation with the v4 asset-pack workflow and verified archive information.
π― SAM 3 and CLIP Review
Added CLIP-based coarse subject classification for person, bird, deer, animal, car, and landscape prompts.
Reused compatible cached CLIP embeddings when selecting a SAM 3 subject prompt, without decoding source images again.
Retained saliency-derived subject labels as a fallback when CLIP evidence is unavailable.
Added support for Deep Review contexts created from selected photographs that do not belong to a saved burst group.
Improved subject-mask outlines so disconnected subjects each receive a visible contour.
Kept Deep Review cancellation, recommendation, focus-mask, and subject-detail behavior within the focused controller.
πΌοΈ Grid, Selection, and Sorting
Kept multi-image Grid selections intact when moving between RawCull workspaces.
Added a focused-image fallback when no multi-selection exists.
Preserved catalog order when passing selected photographs into AI Analysis.
Updated sharpness sorting so enabling it selects the sharpest visible photograph and resets the grid position consistently.
Preserved the current selection when sharpness sorting is disabled.
Simplified Grid and Similarity views after moving Deep Review presentation into AI Analysis.
π§ͺ Testing and Quality
Added tests for AI Analysis input selection, catalog ordering, focused-image fallback, and selection persistence across view changes.
Added Qwen tests for compatible model validation, text-only model rejection, structured response decoding, free-form fallback, invalid scores, and empty responses.
Added model-catalog tests for the Qwen asset pack, provenance revision, sizes, checksums, and release readiness.
Added tests for managed Qwen installation, custom-model selection, model-source switching, and saved-folder recovery.
Added tests for CLIP-assisted Deep Review subject labels and arbitrary selected-image review contexts.
Added coverage for disconnected SAM 3 mask contours and sharpness-sort selection behavior.
Expanded release-metadata verification for version 3.2.4, Build 376, Apple-hosted Background Assets, app-group settings, and the three production asset packs.
Updated the smoke-test manifest for the new release.
π οΈ Build and Documentation
Advanced RawCull from version 3.2.1 Build 360 to version 3.2.4 Build 376.
Added the CoreAIQwenBackend product and updated PhotoAIKit to revision c5c76590c3d79ad508d24d893cd7d8d6aa873355.
Added the App Store-specific Background Assets information property list and export configuration.
Updated archive and verification tasks for Apple-hosted model assets.
Updated the README with Qwen, AI Analysis, local-inference, model-setup, architecture, and TestFlight information.
Documented the DataComp CLIP, SAM 3, and Qwen3-VL roles and how their evidence differs.
π¦ Version Progression
Started from RawCull 3.2.1, Build 360.
Refined Grid View selection and sharpness-sorting behavior.
Added the Qwen3-VL inference layer, model validation, settings, and batch-analysis presentation.
Added the combined AI Analysis workspace for SAM 3 + CLIP and Qwen.
Added the Qwen model pack and migrated production model delivery to Apple-hosted Managed Background Assets.
Completed release metadata and packaging for RawCull 3.2.4, Build 376.
Updated this changelog through commit a6e1d1c on 2026-09-18.
Version 3.2.1
By Thomas Evensen |
Local CLIP and SAM 3 workflows, managed model downloads, and review-interface improvements.
Historical record dated 2026-09-10. Requirements and release status below refer to this version. For usage instructions, see the documentation.
RawCull’s AI implementation is organized behind focused feature boundaries for similarity, semantic search, burst analysis, Deep Review, model management, persistence, and presentation. DataComp CLIP powers similarity and semantic search, while SAM 3 powers Deep Review. The 3.2.1 release also adds managed downloads for the verified CLIP and SAM 3 model packs.
RawCull 3.2.1 requires the latest macOS 27 (Golden Gate), an Apple Silicon Mac, and Xcode 27 when building from source.
Commit range:3b1c41d..3caf6ba Latest commit:3caf6ba (Upgrade PhotoAIKit and CoreAI (#11), 2026-09-10) Current version: RawCull 3.2.1 (Build 360)
π Major Features
Released the RawCull 3 local AI workflow.
Added natural-language semantic photo search using DataComp CLIP.
Added DataComp CLIP-powered visual similarity analysis and burst grouping.
Added SAM 3 Deep Review with subject isolation, detail scoring, and burst-winner recommendations.
Added managed downloads for verified DataComp CLIP and SAM 3 model packs.
Added persistent storage for AI embeddings, masks, scores, signatures, and burst-review decisions.
Modularized the complete AI application layer while preserving the RawCull 3.1.1 workflow, ranking policies, cache formats, preferences, and migration behavior.
Added one application-owned RawCullIntelligenceRuntime that creates and retains stable AI feature objects for the app session.
Replaced settings callbacks with revisioned, typed AI configuration snapshots that reject stale updates and avoid unnecessary restarts.
Split model discovery, downloads, license acceptance, progress, cancellation, retry, removal, and installed-model locations into a focused model-management component.
Added dedicated semantic-search and similarity feature surfaces so views no longer inspect providers, embeddings, repositories, or backend descriptors directly.
Moved burst computation into a dedicated coordinator with typed pipeline values, cache restoration, compatibility migration, grouping, ranking, lifecycle handling, and review-state preservation.
Added a focused Deep Review controller for availability, request construction, operation lifecycle, cancellation, and burst-specific winner application.
Reorganized the AI source files under RawCull/Intelligence into Composition, Contracts, Similarity, SemanticSearch, BurstAnalysis, DeepReview, ModelManagement, Persistence, and Presentation areas.
Kept the intelligence boundary application-local after evaluating a separate Swift package; the current code still depends intentionally on app-owned catalog snapshots, paths, resources, policy callbacks, and Background Assets wiring.
Removed temporary view-model constructors, runtime model exposure, and semantic-search, similarity, and Deep Review forwarding APIs after callers migrated to the focused features.
Added exact import-boundary enforcement for all concrete AI backends and PhotoAIKit products. SwiftUI views and general model code no longer import restricted AI modules.
Kept persistence modularization Phase 9 deferred to avoid mixing storage API changes with the completed structural refactor. Existing on-disk formats remain unchanged.
π§ AI Models and Downloads
Added dedicated AI model settings and model-management views.
Added model bundle discovery, validation, and resource management.
Added support for DataComp CLIP and SAM 3 models.
Added model-location controls and validation feedback.
Added model-download and Managed Background Assets infrastructure.
Added license-acceptance handling for externally distributed models.
Added model provenance, license notices, manifests, and installation documentation.
Published the V3 managed model release containing DataComp CLIP and SAM 3 asset packs.
Added archive size and SHA-256 verification for the published CLIP and SAM 3 downloads.
Added provenance validation that rejects incomplete, mismatched, blocked, or malformed production model records.
Added EfficientSAM license and provenance records for future use; EfficientSAM is not included in the production download manifest.
Improved model-download validation, retry behavior, error handling, and test coverage.
Fixed modular-runtime and model-download integration after the Intelligence file reorganization.
Documented the version coordination required across RawCull, the downloader extension, Background Assets manifests, and model bundles.
Updated PhotoAIKit to v2.4.0 and the matching apple/coreai-models revision.
Updated the resolved xgrammar dependency to its released 0.2.2 version.
Retained the V3 compiled DataComp CLIP and SAM 3 assets. A V4 model release is not required unless a future CoreAI export changes the verified model artifacts or model contract.
π Grid and Similarity View
Added clearer sharpness-scoring controls with scoring, re-scoring, sorting, and cancellation actions.
Added contextual scoring targets for selected images, filtered images, or the complete catalog.
Added combined Index & Find Similar behavior when DataComp CLIP index entries are missing.
Improved similarity backend status and progress presentation.
Reserved consistent space for semantic-search activity messages to prevent layout shifts.
Improved selection coordination and keyboard navigation.
Refined grid controls, button styling, and rating interactions.
Routed similarity state and actions through the focused similarity feature instead of the central application view model.
Added RawCull-owned semantic-search backend presentation values for UI and accessibility without exposing PhotoAIKit types.
Added Deep Review availability indicators and overlay controls to thumbnail presentation.
π Loupe View
Added a redesigned metadata panel for the selected image.
Added expandable and collapsible metadata sections.
Added keyboard control for showing or hiding metadata.
Added filename, folder, camera, exposure, rating, and culling information.
Improved source-image switching and one-to-one zoom rendering.
Fixed one-to-one zoom so it displays actual image pixels.
Improved thumbnail and image navigation while using Loupe View.
Added keyboard actions for the zoom overlay.
Added optional focus-mask and subject-outline presentation to the zoom workflow.
Preserved native preview detail for focus-mask analysis instead of using sharpened thumbnail output.
ποΈ Burst View and Deep Review
Redesigned the burst-culling workspace around a photo-first review experience.
Redesigned the Burst Groups home screen with a guided Next up card, review queues, recent groups, and completion progress.
Added staged catalog-preparation status for semantic indexing, sharpness scoring, and burst-group discovery.
Added clearer progress and estimated-time feedback while preparing a catalog.
Added separate queues for bursts that need review, completed bursts, and all burst groups.
Added maintenance actions for scoring parameters, catalog re-indexing, and similarity indexing.
Added clearer burst numbering and frame-position indicators.
Added navigation back to the burst list.
Added reviewed and unreviewed burst controls.
Added keyboard-action guidance for navigation, zoom, source selection, focus, rating, picks, and rejection.
Added burst-aware metadata to the zoomed image view.
Added culling status, rating, sharpness, focus, review, and recommendation information.
Improved comparison-grid navigation and selected-frame handling.
Added SAM 3 subject-mask outlines for Deep Review and focus workflows.
Added mask-outline controls and availability feedback.
Fixed focus-mask source selection for burst JPEG previews.
Preserved manual winners and review decisions when compatible burst groups are restored or recomputed.
Isolated burst analysis from catalog navigation and rating actions while retaining the existing user workflow.
ποΈ Sidebar, Navigation, and File Operations
Refined the main catalog sidebar and file presentation.
Added clearer empty, filtered, and missing-file states.
Made the empty-state catalog icon an accessible button that opens the catalog folder picker.
Improved scan progress by reporting the discovered-file count directly.
Added accurate completed/total progress for thumbnail creation and JPEG export.
Added image-sorting progress and status indicators.
Moved additional navigation actions into application menu commands.
Improved toolbar organization and reduced duplicate controls.
Refined rating controls, filters, and rating-pin behavior.
Corrected rated-photo counts so only files with an explicit rating are counted.
Improved copy-file startup, completion reporting, source and destination presentation, and recovery after interrupted work.
Improved JPEG extraction selection handling and per-file failure reporting.
Important: This release is the final version for macOS 26. The next version, 3.2.0, will introduce AI features exclusively available on macOS 27 upon its release. Version 3.0.0 will remain available on GitHub for an extended period following the release of macOS 27. The Apple App Store version will only support macOS 27 once version 3.2.0 is released.
Version 3.0.0 on the Apple App Store is built and uploaded to App Store Connect for release on the App Store by utilizing Xcode Cloud. I have installed macOS 27 developer beta on both my Macs and cannot build and upload a release version directly from Xcode 27 beta. The version 3.0.0 on GitHub is built by Xcode 27 beta, and if you have some doubts about it, please install this version from the Apple App Store.
Version 3.0.0 is based on the latest version 3.2.0 with all AI features removed. There have been several updates since the last release, version 2.3.5.
---
## π macOS Tahoe
Updated RawCull for macOS Tahoe 26.
Retained Apple Silicon as the supported architecture.
Updated project settings, dependencies, metadata, entitlements, and release configuration.
Updated the application version to 3.0.0.
ποΈ Vision similarity
Rebuilt image similarity around Apple Vision feature prints supplied by PhotoAnalysisKit.
Vision is the sole similarity backend.
Added a dedicated Vision similarity service and simplified runtime composition.
Added bounded parallel indexing, progress reporting, cancellation, and partial-failure handling.
Added finite-distance validation to prevent invalid similarity results.
Added cache-first loading so previously indexed photographs can be reused.
Added generation tracking so cancelled or superseded operations cannot publish stale results.
RawCull 3.0.0 contains no CLIP, semantic search, SAM, Deep Review, downloadable models, model licences, or external model runtime.
πΈ Burst analysis and review
Reorganized burst processing around a dedicated BurstAnalysisCoordinator.
Added clearer lifecycle handling for catalog preparation, indexing, grouping, ranking, and cancellation.
Added an explicit catalog-preparation screen before burst analysis.
Added more reliable reuse of compatible saved burst analysis.
Added a choice between using an existing index and performing a full re-index.
Improved review-queue counts and filtering.
Preserved manual winner selection, ratings, rejection, undo, and review state.
Prevented older analysis generations from overwriting newer results.
Improved progress presentation during sharpness scoring, similarity indexing, and grouping.
π Loupe and metadata
Corrected Actual Pixels to display one source-image pixel per display point.
Improved Actual Pixels centring around autofocus points.
Added safe clamping for focus points near image edges.
Added protection against invalid image and viewport geometry.
Added F to show or hide the focus map.
Added A to show or hide camera autofocus points.
Added E to show or hide image metadata.
Retained J for embedded JPEG and R for developed RAW previews.
Added a collapsible metadata panel containing file, camera, exposure, rating, focus, sharpness, and histogram information.
Added Show in Finder and Open RAW File actions to the metadata panel.
Replaced the older file inspector with the integrated metadata presentation.
πΌοΈ Histograms and previews
Made histogram loading cancellation-safe.
Added latest-result-wins behavior when navigating quickly between photographs.
Removed the crash path for failed image conversion.
Histograms now clear safely when an image cannot be loaded.
Improved comparison-image loading and cancellation.
Added richer metadata and histogram information to burst comparison views.
Improved source selection between thumbnails, embedded JPEGs, and developed RAW previews.
β Rating and selection
Rating filters now activate only when the selected catalog contains explicit ratings.
Improved multi-selection behavior in thumbnail and culling grids.
Improved Command-click, Shift-click, and keyboard selection handling.
Preserved selection correctly while navigating grids and comparison views.
Improved rating application across multiple selected photographs.
Improved rating, keeper, and rejection presentation.
Prevented selection state from becoming detached from updated catalog records.
π Catalogs and saved files
Improved the main catalog sidebar and its empty states.
Saved catalogs no longer cause an incorrect βNo Files Foundβ message.
Converted saved catalog and file rows to native button interactions.
Improved selection persistence in the Saved Files window.
Added clearer VoiceOver descriptions for saved catalogs and records.
Improved handling of damaged saved-state files.
Added an option to archive damaged persistence data and reset safely.
Improved atomic writing of settings and saved data.
β¨οΈ Menus and shortcuts
Added File βΊ Add Catalogβ¦ with βO.
Added menu commands for copying tagged files and showing saved files.
Added Actions βΊ Extract JPGs with βJ.
Added Actions βΊ Abort task with βK.
Simplified the main toolbar by moving secondary actions into menus and contextual panels.
Added a redesigned, context-sensitive About window.
The About window now documents shortcuts for browsing, rating, previews, burst groups, burst review, and manual comparison.
β‘ Cache and performance
Added source-aware thumbnail cache identities.
Thumbnail keys now include source metadata, requested size, purpose, and orientation policy.
Replacing a photograph at the same path no longer reuses its stale thumbnail.
Improved separation between thumbnail, full-size preview, similarity, and burst-analysis caches.
Added bounded thumbnail preloading during catalog scans.
Reduced duplicate thumbnail decoding and scan/grid contention.
Improved memory- and disk-cache consistency.
Added reusable per-file Vision artifact storage.
Added a new Vision-specific cache schema and compatibility signature.
Old or incompatible similarity caches are treated as regenerable cache misses.
Version 2.3.5 on the Apple App Store is built and uploaded to App Store Connect for release on the App Store by utilizing Xcode Cloud. I have installed macOS 27 developer beta on both my Macs and cannot build and upload a release version directly from Xcode 27 beta. The version 2.3.5 on GitHub is built by Xcode 27 beta, and if you have some doubts about it, please install this version from the Apple App Store.
---
RawCull 2.3.5 is a maintenance and stabilization update for macOS 26. It improves Actual Pixels inspection, histogram reliability, thumbnail-cache correctness, catalog-loading behavior, persistence testing, accessibility, and release validation.
This release introduces no new AI requirements.
β¨ Highlights
Corrected Actual Pixels inspection to provide genuine 1:1 image inspection.
Removed a possible histogram conversion crash.
Prevented older histogram calculations from replacing newer results.
Added source-aware and size-aware thumbnail-cache identities.
Prevented thumbnail grids from competing with catalog preloading.
Expanded similarity-artifact persistence and cancellation coverage.
Improved accessibility throughout saved files and culling controls.
Strengthened smoke, Thread Sanitizer, stress, and Release build gates.
π Actual Pixels Inspection
Defined Actual Pixels as one source-image pixel per display point before backing-scale conversion.
Removed the previous additional 60% scaling factor.
Changed the fit-relative scale calculation to 1.0 / fitScale.
Added validation for:
Non-positive image and viewport dimensions.
Non-finite dimensions and scale values.
Non-finite autofocus coordinates.
Missing autofocus metadata.
Invalid geometry now produces a finite, centered fallback instead of an invalid transform.
Added focused coverage for:
Landscape and portrait images.
Fit-upscaled images.
Mismatched aspect ratios.
All four clamped viewport edges.
Missing and invalid focus coordinates.
Invalid image and viewport dimensions.
Preserved the existing Z keyboard shortcut and Actual Pixels terminology.
π Histogram Reliability
Replaced separate histogram-loading paths with one task lifecycle tied to the selected image.
Histogram bins are cleared immediately when:
The selected image changes.
The selected image becomes unavailable.
Image conversion fails.
Removed the reachable fatalError from histogram image conversion.
Conversion failures are now logged as recoverable display errors.
Histogram calculation runs through structured concurrent work.
Added generation checking so an older calculation cannot replace results for a newer image.
Added cancellation checks before publishing histogram data.
Improved FileInspectorView image handling:
Image state is now private.
Stale images are cleared when file identity changes.
Cancelled thumbnail requests cannot publish late results.
Added deterministic tests for:
Nil-image clearing.
Conversion failure.
Successful histogram generation.
Slow-old-image versus fast-new-image supersession.
Later records are not committed after cancellation.
Verified that clearing analysis artifacts does not modify:
Ratings.
Settings.
Independent user-data files.
Verified progress and phase state reset after:
Successful indexing.
Partial generation failure.
Persistence failure.
Cancellation.
Superseded indexing.
Added an actor-isolated test hook for deterministic partial-commit cancellation.
The hook is disabled in production and does not change production commit ordering.
Added explicit proof that thumbnail purpose, size, and schema changes do not alter similarity-artifact identity.
Existing coverage continues to verify:
Artifact round trips.
Corrupt-record isolation.
Incompatible-record rejection.
Pruning and clearing.
Changed and added sources.
Legacy migration.
Partial generation failure.
Structured cancellation.
Latest-generation-wins behavior.
βΏ Accessibility and Interaction
Converted saved catalog and file-record rows from gesture-only containers to native plain buttons.
Preserved:
Row-wide click targets.
Hover rendering.
Selection behavior.
Split-view navigation.
Added explicit accessibility names, values, selected traits, and actions to:
Normal thumbnails.
Rated thumbnails.
Comparison thumbnails.
Rating and reject controls.
Image-source controls.
Focus-mask controls.
Focus-point controls.
Burst-review controls.
Added selected accessibility traits to reviewed and deferred burst controls.
Added named actions for selecting and opening images.
Added accessible file and rating descriptions.
Hid decorative selection marks, rating strips, glyphs, and dividers when they duplicated spoken information.
Preserved intentional single-click and double-click behavior in:
Normal image tiles.
Rated image tiles.
Comparison panes.
File details.
Zoom overlays.
π§ͺ Test and Release Gates
Made Smoke.xctestplan the sole smoke-test selector.
Smoke membership is now controlled by Swift Testingβs .smoke tag.
Removed the duplicate Makefile smoke-suite allow-list.
New smoke tests only need the .smoke tag; the Makefile no longer needs to be edited.
Proved that a deliberately failing smoke-tagged test makes the smoke command fail.
Removed all temporary failure-proof code after validation.
Kept smoke tests parallel for fast feedback.
Serialized the complete Thread Sanitizer plan because it deliberately exercises process-wide cache, settings, and singleton state.
Replaced a scheduler-speed-dependent persistence test with deterministic actor synchronization.
Clarified that the performance command is an extreme-concurrency stress gate rather than a timing benchmark.
Updated the README and test architecture documentation to describe:
Smoke-test selection.
Full Thread Sanitizer coverage.
Dedicated stress testing.
Test isolation expectations.
β Automated Validation Results
The final automated validation completed successfully:
Smoke tests:
93 unique tests.
101 concrete parameterized cases.
Full Thread Sanitizer suite:
270 unique tests.
295 concrete parameterized cases.
No Thread Sanitizer diagnostics.
Extreme-concurrency stress gate:
1 selected test passed.
Exact-Package.resolved Release build:
arm64 build passed.
No new RawCull compiler or concurrency warnings.
The only observed build warning was the existing App Intents metadata notice caused by the absence of an AppIntents.framework dependency.
π§° Version and Build Metadata
Verified in both Debug and Release configurations:
Marketing version: 2.3.5
Proposed build number: 335
Minimum system version: macOS 26.2
Supported architecture: Apple Silicon arm64
Bundle identifier: no.blogspot.RawCull
Built application inspection confirmed:
CFBundleShortVersionString: 2.3.5
CFBundleVersion: 335
LSMinimumSystemVersion: 26.2
Executable format: arm64 Mach-O
The About window reads version and build information directly from the application bundle.
π¦ Package Documentation
Updated the README package table to match Package.resolved:
RawParserKit 1.2.8
RawCullCore 1.1.2
All seven directly documented package names and versions now agree with the resolved package file.
π§ RawCull 3.0.0 Handoff
Added a separate AI-preserving stabilization plan for RawCull 3.0.0.
The plan was based on read-only inspection of the current main and version-3.0.0 implementation.
Every 2.3.5 requirement is classified for 3.0.0 as:
Apply unchanged in behavior.
Adapt to the AI architecture.
Already resolved and requiring verification.
Superseded by a 3.0.0 implementation.
Not applicable to macOS 27.
The plan protects:
PhotoAIKit.
Core AI model resources.
CLIP similarity.
Semantic search.
Vision fallback.
SAM 3 Deep Review.
Typed similarity artifacts.
Model downloads and licence acceptance.
AI settings and diagnostics.
The 3.0.0 plan explicitly prohibits:
Merging the 2.3.5 branch into the AI code line.
Cherry-picking the maintenance implementation.
Mechanically transplanting 2.3.5 code.
Replacing AI implementations with older Vision-only implementations.
No 3.0.0 production code, tests, dependencies, project settings, model resources, or branch pointers were changed.
β οΈ Known Limitation
During selected-catalog preload, thumbnail grids are temporarily gated instead of coalescing scan and UI extraction tasks through a shared request registry.
The grid resumes automatically when preload completes, is cancelled, or is superseded.
π₯οΈ Compatibility
Requires macOS 26.2 or later.
Requires an Apple Silicon Mac.
Adds no new AI or model-download requirement.
Continues to use the macOS 26/Vision-based application architecture.
π¦Release Status
The implementation and automated gates are complete, but distribution remains pending the final manual release matrix.
Before publishing, the release still requires:
Physical-display Actual Pixels verification.
VoiceOver and keyboard-only verification.
Real RAW replacement testing.
Real-catalog scan-contention measurements.
Upgrade and restart testing using copied RawCull 2.3.3 data.
Testing on minimum-supported macOS 26.2.
Testing on the latest available macOS 26 update.
Clean-account installation and launch testing.
Confirmation that App Store Connect build 231 is unused.
Developer ID signing and hardened-runtime verification.
Notarization and stapling.
Gatekeeper assessment.
DMG generation and SHA-256 publication.
App Store upload.
Creation of the final 2.3.5 tag at the exact tested commit.
π Implementation Commits
5da6ff4 β Record RawCull 2.3.5 stabilization baseline
53c3057 β Fix actual-pixel viewport behavior and tests
7ba0a32 β Make histogram loading cancellation safe
5e802e6 β Make release test gates authoritative
2f9b033 β Make thumbnail cache identity source aware
4874fa1 β Gate thumbnail grids during catalog preload
dea2b9b β Close similarity persistence regression gaps
πΌοΈ Fixed orientation handling for embedded JPEG previews, sidecar JPEGs, cached previews, comparison view, and zoom previews.
π― Improved sharpness scoring and burst analysis so they can run on selected files or active star-rating filters instead of always processing the full catalog.
β¨ New β Image source toggle in zoom / loupe view
Switch between the embedded JPEG preview and a full-size JPEG created from the RAW file while inspecting an image:
New ImageSourceToggleView with keyboard shortcut support
ZoomPreviewHandler significantly expanded to manage source switching
ZoomOverlayView updated with key-action routing
FullSizeJPGDiskCache extended to support the toggle flow
New DiskCacheAndScanAdmissionTests covering the cache admission logic
β¨ New β Burst Review Queue
A structured review-queue workflow for burst groups:
New BurstReviewQueueFilter (.all, .needsReview, .deferred, .reviewed) β filter the culling grid to a specific review state
New BurstReviewQueuePolicy β stateless logic that derives each group’s effective state (high-confidence, no cautions β auto-reviewed; low confidence or open cautions β needs review)
New BurstReviewQueueCounts value type exposed on RawCullViewModel
Review-state action buttons in BurstGroupHeaderView: Reviewed, Needs Review, Defer β rendered contextually per current state
State badge overlay on burst group headers (purple = Needs Review, blue = Reviewed, gray = Deferred)
Filter buttons added to SimilarityGridSelectionView toolbar β live counts shown inline; filter resets to .all on Exit Groups
Auto-sharpness scoring toggle removed from toolbar; scoring now triggered automatically via runWithAutoScoring before burst analysis runs
Review states persisted to the burst analysis disk cache on every state change
ποΈ Refactored β CullingGridView decomposed
The monolithic CullingGridView split into focused, independently testable objects:
CullingGridSelectionCoordinator β selection state & keyboard navigation
CullingGridRenderCache β per-cell image caching (keyed by CullingGridRenderCacheKey)
Cell data flow cleaned up: isSelected, ratingValue, ratingDisplay, ratingColor now passed directly to ImageItemView, removing ViewModel look-ups inside the cell
ποΈ Refactored β ComparisonGridView decomposed and redesigned
ComparisonGridDisplayState β display/layout state extracted from the view
ComparisonGridImageCoordinator β per-pane image loading coordination extracted from the view
Background changed to near-black (Color.black.opacity(0.97)) for a cinema-style comparison experience
BurstComparisonEvidenceView promoted to a floating overlay (ZStack + .zIndex(2)) so it no longer pushes image panes down
Image panes fill the full viewport height instead of being constrained to a fixed 3:2 ratio
Scroll indicators hidden; viewport transform resets automatically when the comparison group or active burst group changes
π¦ New β RawParserKit SPM package (rsyncOSX/RawParserKit v1.1.0)
All raw-file parsing logic extracted from RawCull into a standalone, reusable Swift package:
π Comparison view is now a horizontal filmstrip
The burst comparison layout was completely redesigned.
Candidates are now presented in a side-by-side horizontal scroll, one full-width pane per candidate, instead of a vertical grid stack.
Navigation is left/right only β up/down arrow keys are removed. The view snaps one candidate at a time using SwiftUI scrollTargetBehavior(.viewAligned).
Selecting a file in the filmstrip updates the main selection and vice-versa, keeping both views in sync automatically.
The burst header bar is more compact: decision text and action buttons share a single line with tooltips replacing verbose inline descriptions.
π Loupe view can now toggle the extracted JPG
The loupe (single-image zoom) view gains a built-in extracted-JPG mode so you can compare the embedded thumbnail against the full-size sidecar or extracted JPEG without opening a separate window.
Press J (or j) to toggle between the embedded thumbnail and the extracted JPG. Zoom (+/-) continues to work in both modes.
A LoupeImageKeyAction enum centralises key resolution (+, -, j/J), replacing the inline switch on key characters and making key handling unit-testable.
When the extracted JPG is active, a ProgressView is shown while loading and a “No extracted JPG” placeholder appears if no sidecar or embedded preview is available. The task is cancelled and cleaned up when the image changes or the view disappears.
ZoomPreviewHandler.loadExtractedJPGPreview is extracted as a reusable static method (sidecar JPG β RAM cache β raw extraction pipeline), shared between the loupe toggle and the existing zoom-window open path.
The focus overlay and focus mask both track currentImageSize / currentDisplayedImage, so they remain correctly anchored whether the thumbnail or the extracted JPG is displayed.
The image-source toggle in ImageOverlayControlsView is now wired to showExtractedJPG, replacing the previously constant .constant(false) binding.
π· Rating badge now visible on every thumbnail view
CurrentRatingBadgeView is now shown as an overlay on ImageItemView, RatedImageItemView, and the loupe MainThumbnailImageView.
A new density parameter (.regular / .compact) shrinks the badge’s font, icon, and padding for use inside small thumbnails where screen space is limited.
In ImageItemView the rating badge and the burst-recommendation badge are stacked vertically in the top-left corner.
RatedImageItemView extracts its rating lookup into a shared ratingValue computed property, eliminating duplicated savedFiles traversal.
π― Scoring signatures now version-stamp every result
Sharpness scores are now stamped with a SharpnessScoringSignature that captures the exact algorithm version, ISO scaling policy, aperture hint policy, and all scoring parameters used to produce the score.
Saved file records (savedfiles.json) store the scoring signature, file size, and modification date alongside the score, so RawCull can detect when a cached score is stale.
A SharpnessScoringSignature carries explicit algorithm version, ISO policy version, and aperture hint policy version fields, making it straightforward to invalidate old scores when the pipeline changes.
The burst cache schema advances to version 2 to match the new signature layout.
BurstSharpnessSignature is now a typealias for SharpnessScoringSignature (no migration needed for existing burst caches).
The inspector panel shown when reviewing burst candidates now surfaces much more of the internal scoring data.
New fields: Source, Blur Gate sigma, Subject Label, Subject Confidence, Focus Flag, Mask Region, and Mask Threshold in the Scoring section.
New evidence fields: Scoring Local Detail, AF Center Detail, AF Neighborhood Detail, Scoring AF Patch, Scoring Subject Patch, Saliency Candidates, Saliency Selection reason, Evidence Threshold, Evidence Coverage, and Visibility Relaxed.
Vision saliency results are no longer collapsed into a single union rectangle.
Each detected object is now a SaliencyCandidate with its own rect and confidence.
A dedicated selectSaliencyCandidate function picks the winning region by weighing AF-point overlap, distance to AF point, local detail score, and area β preferring the subject the camera actually focused on.
The selection reason and candidate count are recorded in the breakdown and shown in the inspector.
πΌ Focus mask gains visibility relaxation
The focus mask overlay now actively checks whether the selected threshold would produce a nearly invisible mask.
When coverage falls below a configurable minimum, the threshold is automatically relaxed until the overlay is visible, and relaxedForVisibility = true is recorded in the breakdown.
Overlay styles are renamed from subjectHeat/globalDetail to subjectEdges/globalEdges to better reflect what they show.
β‘ Cancellation guards throughout the scoring pipeline
All heavy per-frame work checks Task.isCancelled at every major stage, so switching images quickly no longer queues up stale work.
A shared runCancellableWorker helper on FocusMaskEngine wraps detached tasks with a proper withTaskCancellationHandler so cancellation propagates immediately.
Calibration, saliency, Laplacian sampling, mask generation, and scoring all return early when cancelled.
π Calibration now samples pixel energies, not scores
The auto-calibration pass that sets the visual edge threshold was redesigned.
Instead of scoring every file end-to-end, calibration now decodes a small 512-px thumbnail, runs only the Laplacian, and collects raw pixel energy samples.
This makes calibration faster and ensures the core sharpness score no longer depends on catalog contents β only the visual threshold changes per catalog.
π Compact overlay controls in comparison panes
All image overlay control capsules (focus mask, focus points, ratings, image source) now accept a density parameter.
.compact density shrinks button sizes, padding, and font sizes for use inside the comparison pane where screen space is limited.
Focus peaking (FocusPeakingControlsView and the G keyboard shortcut) has been removed from the zoom overlay.
π§ͺ New tests
resolution scaling uses longest side regardless of orientation
scoring size normalization clamps legacy and oversized values
π― Sharpness scoring now has intent presets and precision modes
Sharpness scoring is now much more configurable and better tuned for different kinds of photography.
Added photo-type presets: Auto, Birds/Wildlife, Portrait, Landscape, and Action.
Added quality modes: Fast, Balanced, and High Precision. Balanced and High Precision decode larger previews and blend more fine detail for better small-subject ranking.
Added a scoring source picker: Embedded Preview for normal culling speed, or RAW Demosaic for slow, final-precision checks.
These scoring choices are now persisted in settings and restored when a catalog is reopened.
π Focus mask evolved into focus evidence
The focus mask is now much closer to an explanation overlay for the sharpness score, instead of a generic edge mask.
Focus evidence now chooses between AF center, AF neighborhood, saliency/subject region, or global detail, depending on which region best supports the score.
Sharp images can now relax the visual threshold when needed, so the overlay stays visible when RawCull says the image is sharp.
Aperture-aware blur gating and revised high-ISO handling make wildlife, portrait, and deep-DoF scenes behave more consistently.
The system now records richer diagnostics such as winning region, rendered region, overlay style, patch rankings, AF distance, spatial alignment, and confidence reason.
π Better burst ranking and comparison evidence
Burst ranking is now more nuanced when multiple images in a burst are very close.
Burst ranking now blends absolute sharpness with burst-relative sharpness when there is a meaningful spread inside the group.
Very small sharpness spreads no longer create artificial separation between near-identical frames.
High-confidence Keep Best decisions still require strong absolute sharpness evidence.
Comparison view now surfaces subject-sharpness rank and subject/global deltas against the burst winner.
Candidate Inspector now shows burst-relative sharpness alongside subject, global, and AF-detail breakdowns.
π οΈ Stability and persistence improvements
Burst analysis cache now invalidates when scoring intent, quality, source, thumbnail size, or related scoring parameters change.
Settings loading/saving was tightened so persisted scoring settings are not overwritten during initial load.
Shared memory cache diagnostics and counters were improved and covered by new tests.
Version metadata advanced to 1.9.4 / build 94.
π§ͺ Tests
SharpnessScoringTests expanded heavily around RAW demosaic selection, focus-evidence region choice, visibility relaxation, patch ranking heuristics, focus-failure classification, aperture hints, ISO ramps, and concurrent scoring.
BurstAnalysisTests added coverage for burst-relative sharpness and comparison summaries.
New concurrency tests cover cache counters and settings persistence.
v1.9.0 β v1.9.1
π·οΈ Burst grid label legend
A legend panel now appears above the grouped burst grid so the burst badges are explained in-place.
The legend currently documents: Best frame found, Compare first, Needs manual review, Manual, Applied, Suggested best, and Check frame.
The legend is only shown while burst groups are visible in Similarity Grid, so it does not clutter the normal grid.
β Batch selection and rating by visible badge
The standard culling grid can now batch-select visible thumbnails by their current badge labels.
Badge buttons show the visible count for each currently present burst/subject badge.
Clicking a badge button selects all matching thumbnails; holding β Command adds or removes them from the current selection.
A compact rating picker plus Apply button lets you rate the whole selection in one action.
These controls are hidden while burst groups are displayed.
π Burst mode now survives view changes
Burst analysis and burst mode are no longer discarded when moving between the main view modes.
Burst state is preserved when switching between Loupe, Grid, and Similarity Grid.
Burst-group rendering is now gated by showsBurstGroups, so grouped bursts are only shown where they belong: Similarity Grid.
This prevents grouped-burst UI from leaking into unrelated views while still preserving the active burst-analysis state.
π§Ή Cleanup
Marketing version updated to 1.9.1.
Burst display logic was centralized through showsBurstGroups.
Stale internal markdown documents were removed from documents/.
π§ͺ Tests
BurstAnalysisTests now verify the legend label set and ensure grouped-burst visibility survives view switching correctly.
v1.8.5 β v1.9.0
β Manual burst winner override
You can now override the algorithmβs automatic burst winner and pick the keeper yourself.
Set Manual Winner appears in burst comparison.
Manual winners are clearly labeled in both comparison and grid views.
Manual overrides are persisted in savedfiles.json, survive reloads, and are reattached when bursts regroup.
Keep Best respects the manual winner when one is active.
π§ Safer burst culling decisions
Burst culling is now more conservative about when automatic actions are allowed.
Keep Best and Keep Top 2 are only available when the burst is safe for one-click culling and sharpness scores are present.
Medium-confidence bursts now push you toward comparing finalists first.
Low-confidence bursts ask for manual review instead of presenting an unsafe automatic choice.
Burst keyboard shortcuts now respect the same safety rules.
π Better burst comparison workflow
Burst comparison gained a much richer inspection flow.
Added a Candidate Inspector side panel with ranking evidence, EXIF summary, candidate reasons/cautions, and rank tables.
Comparison view can focus on finalists, return to the active burst group, and clearly shows when a manual winner is active.
Comparison navigation and image-loading behavior were refined to make burst review smoother.
π§Ύ Clearer burst presentation in the grid
Burst headers and recommendation copy were rewritten to be easier to understand at a glance.
Burst headers now use clearer decision text such as Best frame found, Compare before deleting, Needs manual review, and Manual winner: frame X.
Human-readable explanations replace raw internal reasoning.
Thumbnail badges more clearly distinguish suggested frames, manual winners, and applied actions.
π Burst reanalysis
A new Reanalyze Bursts action lets you throw away stale cached analysis and recompute from scratch for the current catalog.
The action deletes the saved burst-analysis cache for the catalog before rerunning analysis.
It is disabled while grouping or analysis is already in progress.
π Focus mask on demand
Focus mask generation is now done only when you actually ask for it.
Focus masks are generated when the overlay is toggled on, instead of being precomputed for every image.
In-flight mask work is cancelled if you toggle the overlay off.
Mask state resets cleanly when switching images.
π Zoom and inspection improvements
Zoom now preserves scale while navigating between images and recenters the pan offset.
RAW diagnostics presentation is now driven through RawCullViewModel.presentRawDiagnostics().
The main window now starts in detail-only mode.
π Fixes & internal improvements
Version metadata advanced through 1.8.6, 1.8.7, 1.8.8, 1.8.9, and 1.9.0, with build 90 at v1.9.0.
BurstAnalysisCache gained explicit deletion support for reanalysis.
Burst review states were expanded to track manual overrides and applied actions.
Logger identifiers were corrected in RequestThumbnail.
Burst presentation helpers were cleaned up for Swift 6.
π§ͺ Tests
BurstAnalysisTests expanded for grouping, confidence handling, manual winners, reanalysis, and safe one-click culling.
New ComparisonCandidateInspectorTests cover ranking evidence and EXIF presentation.
CullingModelTests cover manual-winner persistence and pruning.
ComparisonGridNavigationTests, SharpnessScoringTests, and ZoomOverlayKeyActionTests gained regression coverage.
Version 1.8.5
By Thomas Evensen |
Burst recommendations, richer comparison evidence, RAW diagnostics, and improved preview extraction.
Historical record dated 2026-05-20. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v1.8.1 β 1.8.5
β¨ Smarter Burst Culling
RawCull now includes an intelligent burst analysis workflow to help identify the best frames in fast sequences.
Groups visually similar burst shots automatically.
Recommends the best frame using sharpness, subject/saliency, AF evidence, and metadata stability.
Shows confidence levels: High, Medium, or Low.
Adds burst evidence and caution notes so you can understand why a frame was recommended.
Adds quick actions to Keep Best, Keep Top 2, Compare, or Undo.
π Improved Burst Comparison
The comparison view now supports burst-specific review.
Compare top burst candidates directly.
See analysis evidence while reviewing.
Use keyboard shortcuts for faster decisions.
Escape returns from burst comparison back to the active burst group.
Added keyboard controls for zoom, ratings, thumbnail source, focus mask, and focus points.
π RAW Diagnostics
A new RAW diagnostics view helps troubleshoot camera-file parsing issues.
Opens diagnostics for the selected RAW file with Command-I.
Added A7R VI-style Sony embedded JPEG extraction tests.
Added zoom overlay and comparison grid keyboard shortcut tests.
Added thumbnail cancellation coverage.
Removed older duplicated or obsolete verification/test documents.
Version 1.8.1
By Thomas Evensen |
Fixes for zoom-preview stalls, folder-access cleanup, and file-copy concurrency.
Historical record dated 2026-05-16. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v1.8.0 β 1.8.1
A stability and resource-hygiene release. Focus is on eliminating main-thread hangs in the zoom preview, tightening security-scoped resource lifecycles, and fixing
actor-isolation gaps in the rsync copy path.
π Security-Scoped Resource Lifecycle
Catalog access is now scoped to the active catalog, not every catalog ever opened in the sidebar. Long sessions no longer accumulate stale security-scoped accesses.
Added explicit startSecurityScopedAccess(for:), stopSecurityScopedAccess(for:), and stopActiveSecurityScopedAccess() on RawCullViewModel.
Catalog cancellation and app shutdown both route through the same cleanup path; deinit is now a last-resort fallback rather than the primary stop point.
ZoomPreviewHandler sidecar JPG decode moved off the MainActor into a Task.detached(priority: .userInitiated).
Opening the zoom overlay on a large Sony JPEG no longer blocks the UI while ImageIO opens and decodes the file.
Cancellation is now checked between every async step, so dismissing the overlay early stops in-flight work cleanly.
loadCGImage(from:) and the disk-cache accessor are marked nonisolated to make the off-main path explicit.
π οΈ Rsync Copy Path (ExecuteCopyFiles)
Security-scoped URLs for source and destination are now paired with a single, idempotent cleanup() call covering: rsync success, launch failure, user close/cancel, sheet dismissal, and deinit.
Progress streaming callback hops to @MainActor before touching progressContinuation, removing a latent actor-isolation race that strict concurrency would flag.
Progress continuations and streaming handler state are finished/cleared exactly once.
π§΅ Catalog Loading & Cancellation
startCatalogLoad(for:) short-circuits cleanly when the active catalog already has live security-scoped access β no redundant cancel/restart cycles.
cancelCatalogLoad() now also clears currentselectedSource and stops active security-scoped access, preventing a new load from racing previous cleanup.
π§ͺ Tests
New RawCullViewModelSecurityScopeTests covering start/stop pairing, re-selection no-op behavior, and cancellation cleanup.
ThumbnailProvider* tests updated for the refreshed memory and cancellation surface.
π§Ή Cleanup
Removed legacy documents/ver176.md; added documents/ver181.md capturing the v1.8.0 review findings actually shipped in this release.
Minor follow-ups in RawCullViewModel+Catalog, SharpnessScoringModel, and project settings.
Version 1.8.0
By Thomas Evensen |
Side-by-side comparison, expanded zoom and rating controls, and more responsive thumbnail loading.
Historical record dated 2026-05-14. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v1.7.4 β 1.8.0
RawCull has received improvements to image comparison, zoom review, rating workflow, thumbnail responsiveness, cache reliability, sharpness/similarity behavior, and release/test tooling.
Version 1.8.0 is submitted for update on Apple App Store.
π v1.8.0
πΌοΈ New Comparison View
Added a dedicated comparison view for reviewing selected images side by side.
Supports comparing up to four selected thumbnails.
Added keyboard navigation inside the comparison view.
Added zoom and pan controls for closer inspection.
Added focus mask and focus point overlays while comparing images.
Added support for switching between thumbnail preview and extracted JPEG source.
Added previous/next image navigation in zoom view.
Added visible rating badge for the current image.
Added keyboard shortcuts for zooming and switching image source.
Added tests for zoom overlay navigation and behavior.
β‘ Faster and More Responsive Thumbnail Handling
Improved cancellation of thumbnail and JPEG extraction work.
Switching or cancelling catalogs should now feel more responsive because old ImageIO work is cancelled earlier.
Sony and Nikon thumbnail/JPEG extraction now check for cancellation before expensive decode work.
Improved thumbnail loader slot accounting so cancelled requests do not consume concurrency capacity.
Added regression tests for thumbnail loader cancellation and concurrency behavior.
π― Sharpness and Similarity Reliability
Similarity and burst actions now wait for in-progress sharpness scoring when needed.
Prevents similarity/burst workflows from running before required sharpness scores are ready.
Added test coverage for concurrent sharpness scoring behavior.
π§ Cache and Memory Improvements
Improved cache replacement accounting for memory and grid thumbnail caches.
Improved test isolation around shared cache state.
Added memory diagnostics checklist for validating large-catalog behavior.
Improved cache-related concurrency tests.
β Rating Workflow Improvements
Added reusable rating controls and rating badge UI.
Rating actions are now available in more review contexts, including comparison and zoom workflows.
Ratings support reject, keeper, and 2-5 star values.
π οΈ Build and Test Tooling
Added shared Xcode scheme.
Added dedicated test plans:
Smoke
Full test suite
Performance
Updated Makefile test commands.
Improved documentation for test architecture and release validation.
Pinned Swift Package dependencies to exact versions for more predictable builds.
π· Camera and Image Extraction Notes
Continued improvements to Sony ARW thumbnail extraction.
Added cancellation-aware extraction paths for Sony and Nikon raw/JPEG preview handling.
Nikon support remains experimental.
π Latest Commit After v1.8.0
π Documentation
Updated README release information and project description.
Version 1.7.4
By Thomas Evensen |
Full-size JPG caching, more consistent grid behavior, and clearer progress reporting.
Historical record dated 2026-05-10. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v1.7.0 β 1.7.4
Version 1.7.4 is submitted for update on the Apple App Store. It focuses on faster zoom previews, better cache management, and more reliable culling-data saving.
β¨ New
Full-size JPG disk cache. The zoom view now caches the full-resolution embedded JPEG to disk (~/Library/Caches/no.blogspot.RawCull/FullsizeJPGs/), so re-opening a previously zoomed photo is instant instead of re-extracting from the ARW.
“Cache JPGs” button in the catalog sidebar lets you pre-warm the full-size JPG cache for an entire catalog in one go (uses a new ScanAndExtractJPGs actor with progress + ETA).
JPG cache controls in Settings β Cache. A new section shows the on-disk size of the full-size JPG cache and adds a Prune action (with confirmation).
π Changed
Unified culling grid. The standard grid and the Similarity/Burst grid now share one CullingGridView. Selection, scroll-to-selection, rating filter, the “N selected” status, and the three progress overlays now behave identically in both views.
Redesigned Scan Stats sheet β clearer layout for the per-catalog statistics.
Smoother progress ETA. The “Estimated time to completion” label is now “Estimated time left”, and the countdown no longer jitters upward when a slow file briefly inflates the average.
Cleaner toolbar mode switching. Loupe / Grid / Similarity / Rated buttons go through a single selectMainViewMode(...) helper for consistent state reset.
Saved-files persistence moved out of the main view model into a dedicated CullingModel, with debounced JSON writes (350 ms) to avoid hammering disk on rapid rating changes.
π¦ Under the hood
New concurrency tests for SharedMemoryCache and FocusMaskModel; revisions to thumbnail-cache eviction (CacheDelegate, CachedThumbnail) for safer cross-actor access.
Catalog load/cancel path reworked β switching catalogs now reliably cancels in-flight scan, thumbnail, JPG-extract, and sharpness/similarity work.
Faster zoom previews, cache controls, and more reliable saving of culling decisions.
Historical record dated 2026-05-06. Requirements and release status below refer to this version. For usage instructions, see the documentation.
Changes: v1.6.9 β 1.7.0
Version 1.7.0 is submitted for update on Apple App Store. RawCull 1.7.0 focuses on faster zoom previews, better cache management, and more reliable culling-data saving.
β¨ Highlights
Faster zoom preview loading with a new full-size JPG disk cache.
Better cache controls in Settings, including cache size visibility and manual JPG cache pruning.
More reliable culling persistence when rating, batch-rating, and saving sharpness results.
Improved diagnostics for understanding memory pressure and cache evictions.
β¨ Whatβs new
Full-size JPG disk cache for zoom previews
RawCull now caches extracted full-size JPEG previews on disk. Reopening zoomed images is faster, and the app avoids repeating the same extraction work for files you have already inspected.
JPG cache controls in Settings
The Cache settings screen now shows the size of the full-size JPG cache and adds a dedicated Prune JPG Cache action, making it easier to reclaim disk space when needed.
π Improvements
More accurate cache estimates
Cache estimates in Settings are now based on live cache usage when available, giving a more realistic idea of how many images fit in memory and in the grid cache.
More consistent culling grid behavior
The standard grid and similarity grid now share the same core grid implementation. This improves consistency across:
multi-selection
keyboard-driven rating
burst-group display
progress overlays
scroll-to-selection behavior
More reliable rating and scoring saves
Rating updates, batch rating changes, threshold-based culling, and persisted sharpness/saliency results now go through a centralized culling model with coalesced saves. This reduces the risk of stale or out-of-order writes during fast culling sessions.
Safer persistence pipeline
Saved-file models are now concurrency-safe, and JSON writes are serialized through a shared writer to improve stability.
β‘ Diagnostics and Cache Monitoring
Richer memory diagnostics
Memory diagnostics now break out evictions by cache type, making it easier to see whether pressure is coming from the main memory cache or the grid cache.
Better cache visibility
RawCull now exposes more current cache usage details in Settings, including memory cache and grid cache counts and sizes.
π¦ Under the Hood
Internal cache-management cleanup to support the new zoom-preview cache.
Concurrency and isolation fixes in supporting code paths.
Documentation and internal review notes updated during the 1.7.0 cycle.