Explain metadata matching coverage without presenting it as archive health or predicted import success #6

Closed
opened 2026-10-24 13:26:07 +00:00 by jchapman · 5 comments
Owner

The analysis screen labels a filename-matching percentage as “Health Check” and shows a red “Orphans” count. This makes an intact export look damaged and does not explain the next step.

The current Bridge matcher has limited filename rules, rejects ambiguous metadata candidates and repeated media paths, and counts all JSON entries. Its results are not the importer’s matching results or a count of unique photos.

Acceptance criteria:

  • Separate ZIP integrity from preliminary metadata coverage. Replace “Orphans” and “JSONs” with clear language and explanations.
  • Distinguish no candidate, ambiguous candidates and repeated paths where measurable; do not claim a missing match proves missing metadata or corruption.
  • Explain that all ZIPs go to Immich-Go, which performs its own matching. Consider making importer-derived matching authoritative instead of maintaining divergent logic.
  • Explain unmatched-file import choices and that timeline/location summaries cover the analyzed subset.
  • Review recognized media extensions so supported formats are not silently omitted.
  • Keep any affected-file view owner-only; exclude private paths from shareable support reports.
The analysis screen labels a filename-matching percentage as “Health Check” and shows a red “Orphans” count. This makes an intact export look damaged and does not explain the next step. The current Bridge matcher has limited filename rules, rejects ambiguous metadata candidates and repeated media paths, and counts all JSON entries. Its results are not the importer’s matching results or a count of unique photos. Acceptance criteria: - Separate ZIP integrity from preliminary metadata coverage. Replace “Orphans” and “JSONs” with clear language and explanations. - Distinguish no candidate, ambiguous candidates and repeated paths where measurable; do not claim a missing match proves missing metadata or corruption. - Explain that all ZIPs go to Immich-Go, which performs its own matching. Consider making importer-derived matching authoritative instead of maintaining divergent logic. - Explain unmatched-file import choices and that timeline/location summaries cover the analyzed subset. - Review recognized media extensions so supported formats are not silently omitted. - Keep any affected-file view owner-only; exclude private paths from shareable support reports.
Author
Owner

Starting #6 after reading #14, this issue, and the related importer diagnostics handoffs. I will separate ZIP integrity from preliminary filename-based metadata coverage, expose aggregate counts for no candidate / ambiguous candidates / repeated media paths, explain JSON entry counts and subset-only timeline/location summaries, and review recognized media formats against the pinned importer. All verified ZIPs will still go to Immich-Go for its own authoritative preview/matching. Existing analysis details stay owner-only and shareable support reports remain aggregate-only. Work will use an isolated branch and disposable validation; no active upload, task or pilot service will be restarted.

Starting #6 after reading #14, this issue, and the related importer diagnostics handoffs. I will separate ZIP integrity from preliminary filename-based metadata coverage, expose aggregate counts for no candidate / ambiguous candidates / repeated media paths, explain JSON entry counts and subset-only timeline/location summaries, and review recognized media formats against the pinned importer. All verified ZIPs will still go to Immich-Go for its own authoritative preview/matching. Existing analysis details stay owner-only and shareable support reports remain aggregate-only. Work will use an isolated branch and disposable validation; no active upload, task or pilot service will be restarted.
Author
Owner

Implementation findings: the old matcher could reject ambiguous full-name candidates and then silently choose an extensionless fallback. New preliminary coverage conservatively counts all candidates from both rules, with repeated media entries classified separately and taking precedence. Counts reconcile to ZIP entries, not unique photos. Uppercase JSON suffix handling is fixed. Recognition now covers the pinned v0.32.0 image/video baseline (including WebP/TIFF/HEIF/RAW/WebM), and other file entries are counted explicitly.

Decision on matching authority: retain the inexpensive preliminary summary, label its limits, and treat Immich-Go preview results/private diagnostics as authoritative for importer outcomes. Every verified ZIP still reaches Immich-Go intact; no preliminary match filters its inputs. Older reports explicitly lack the new reason breakdown instead of fabricating it. Dates with no usable metadata no longer display year 1.

Backend tests/vet, UI lint/build, documentation contracts and owner/other-user/administrator analysis isolation have passed locally. Browser validation is finishing. The new report fits the established 390px page width; a separate existing application-header overflow of 3px at 320px was identified and is not being folded into this report change. No pilot service or active upload/task has been restarted.

Implementation findings: the old matcher could reject ambiguous full-name candidates and then silently choose an extensionless fallback. New preliminary coverage conservatively counts all candidates from both rules, with repeated media entries classified separately and taking precedence. Counts reconcile to ZIP entries, not unique photos. Uppercase JSON suffix handling is fixed. Recognition now covers the pinned v0.32.0 image/video baseline (including WebP/TIFF/HEIF/RAW/WebM), and other file entries are counted explicitly. Decision on matching authority: retain the inexpensive preliminary summary, label its limits, and treat Immich-Go preview results/private diagnostics as authoritative for importer outcomes. Every verified ZIP still reaches Immich-Go intact; no preliminary match filters its inputs. Older reports explicitly lack the new reason breakdown instead of fabricating it. Dates with no usable metadata no longer display year 1. Backend tests/vet, UI lint/build, documentation contracts and owner/other-user/administrator analysis isolation have passed locally. Browser validation is finishing. The new report fits the established 390px page width; a separate existing application-header overflow of 3px at 320px was identified and is not being folded into this report change. No pilot service or active upload/task has been restarted.
Author
Owner

Implemented, locally verified and pushed: 9980373bf6d7025f23560f47ede1c9ff74dce1e1 on codex/issue-6-metadata-coverage.
PR #18 is ready for review: #18 . It is stacked on PR #15 (codex/issues-10-11-diagnostics) to keep the diff specific to #6. Working tree is clean.

Changes:

  • Replace Health Check / Orphans / JSONs with separate ZIP integrity, preliminary coverage, JSON entry explanations and a concrete preview next step. Candidate counts do not validate JSON contents, measure unique photos or predict import success.
  • Add mutually exclusive no-candidate, ambiguous-candidate and repeated-media-entry counts, plus distinct repeated-path and other-file-entry counts. Ambiguity across full-name and extensionless rules is never silently resolved by fallback. Handle uppercase JSON suffixes.
  • Recognize all 57 image/video extensions in the pinned v0.32.0 baseline, including formerly omitted WebP, TIFF, HEIF, RAW and WebM. The connected server and importer still determine actual support.
  • Explain that every verified ZIP reaches Immich-Go intact; its preview/private diagnostics determine importer outcomes. Explain the default-off unmatched-media option and the required new preview after changing it.
  • Identify timeline/location as readable analyzed-subset summaries, show empty dates/coordinates truthfully, and support old saved reports without inventing a missing reason breakdown. Document the decision to retain only a limited preliminary summary rather than reproduce importer matching.
  • Preserve analysis ownership, including no administrator override. No new affected-file view or analysis paths were added to shareable reports.

Checks actually passed on local AMD64 Docker Desktop:

  • Full backend tests/vet, including pinned-importer fixtures, the new cross-ZIP coverage cases, ambiguity/fallback collisions, repeated paths, malformed/unpaired metadata, intact zero-coverage ZIPs and previously omitted formats. Existing corrupt-ZIP/CRC tests remain separate.
  • UI lint/build and disposable browser/upload-recovery suite. Browser coverage includes actual queued analysis, synthetic ambiguous/repeated/empty/legacy reports, 320/390px report layout, owner/other-user/administrator isolation, unmatched defaults and shareable-report privacy. Disposable services/volumes were cleaned up.
  • Exact equality with the pinned importer's 57-format image/video baseline; nine CI policy tests; source/documentation paths and workflow contracts; staged diff check and source-only secret scan (no leaks).
  • Source gosec/govulncheck and all app/runner/processor image advisory policies, with existing reviewed baselines unchanged. Source scan: 32 production files, 29 reviewed findings, no suppressions. Final UI image was rescanned after its last edit.

Limitations/state: implemented, tested and published as a review branch/PR; not merged, release-image-published or deployed. Native ARM64/full release CI and a real-library pilot remain unverified. The extra 320px test found an existing application-header overflow of 3px; the analysis report fits at 320px and 390px, and the existing whole-page 390px check passes. No pilot service or active upload/task was interrupted.

Next handoff: review PR #18; merge/retarget the stacked branch after #15 is integrated, then use the repository release checks and coordinate an idle app/runner/processor update. Run a new owner analysis/preview to check the report against the pilot export. Keep this issue open through that verification; do not treat preliminary coverage as a reason to discard or re-export intact ZIPs.

Implemented, locally verified and pushed: `9980373bf6d7025f23560f47ede1c9ff74dce1e1` on `codex/issue-6-metadata-coverage`. PR #18 is ready for review: https://git.sharedroot.net/jchapman/Immich-Bridge/pulls/18 . It is stacked on PR #15 (`codex/issues-10-11-diagnostics`) to keep the diff specific to #6. Working tree is clean. Changes: - Replace Health Check / Orphans / JSONs with separate ZIP integrity, preliminary coverage, JSON entry explanations and a concrete preview next step. Candidate counts do not validate JSON contents, measure unique photos or predict import success. - Add mutually exclusive no-candidate, ambiguous-candidate and repeated-media-entry counts, plus distinct repeated-path and other-file-entry counts. Ambiguity across full-name and extensionless rules is never silently resolved by fallback. Handle uppercase JSON suffixes. - Recognize all 57 image/video extensions in the pinned v0.32.0 baseline, including formerly omitted WebP, TIFF, HEIF, RAW and WebM. The connected server and importer still determine actual support. - Explain that every verified ZIP reaches Immich-Go intact; its preview/private diagnostics determine importer outcomes. Explain the default-off unmatched-media option and the required new preview after changing it. - Identify timeline/location as readable analyzed-subset summaries, show empty dates/coordinates truthfully, and support old saved reports without inventing a missing reason breakdown. Document the decision to retain only a limited preliminary summary rather than reproduce importer matching. - Preserve analysis ownership, including no administrator override. No new affected-file view or analysis paths were added to shareable reports. Checks actually passed on local AMD64 Docker Desktop: - Full backend tests/vet, including pinned-importer fixtures, the new cross-ZIP coverage cases, ambiguity/fallback collisions, repeated paths, malformed/unpaired metadata, intact zero-coverage ZIPs and previously omitted formats. Existing corrupt-ZIP/CRC tests remain separate. - UI lint/build and disposable browser/upload-recovery suite. Browser coverage includes actual queued analysis, synthetic ambiguous/repeated/empty/legacy reports, 320/390px report layout, owner/other-user/administrator isolation, unmatched defaults and shareable-report privacy. Disposable services/volumes were cleaned up. - Exact equality with the pinned importer's 57-format image/video baseline; nine CI policy tests; source/documentation paths and workflow contracts; staged diff check and source-only secret scan (no leaks). - Source gosec/govulncheck and all app/runner/processor image advisory policies, with existing reviewed baselines unchanged. Source scan: 32 production files, 29 reviewed findings, no suppressions. Final UI image was rescanned after its last edit. Limitations/state: implemented, tested and published as a review branch/PR; not merged, release-image-published or deployed. Native ARM64/full release CI and a real-library pilot remain unverified. The extra 320px test found an existing application-header overflow of 3px; the analysis report fits at 320px and 390px, and the existing whole-page 390px check passes. No pilot service or active upload/task was interrupted. Next handoff: review PR #18; merge/retarget the stacked branch after #15 is integrated, then use the repository release checks and coordinate an idle app/runner/processor update. Run a new owner analysis/preview to check the report against the pilot export. Keep this issue open through that verification; do not treat preliminary coverage as a reason to discard or re-export intact ZIPs.
Author
Owner

Integration handoff: PR #18 is merged into main in 4de3f35. The final combined source passed local backend/vet/race, UI/browser, container/isolation/HTTPS, source/image policy and secret checks. Detailed merge/conflict evidence and limitations: #14 (comment). Native Forgejo AMD64/ARM64 release validation remains queued; no release images or deployment are claimed. This issue remains open for its pilot checkpoint. Run a new owner analysis/preview and verify the preliminary report against the pilot export. Integrity and importer outcomes remain separate. No active upload/task or pilot service was interrupted.

Integration handoff: PR #18 is merged into main in `4de3f35`. The final combined source passed local backend/vet/race, UI/browser, container/isolation/HTTPS, source/image policy and secret checks. Detailed merge/conflict evidence and limitations: https://git.sharedroot.net/jchapman/Immich-Bridge/issues/14#issuecomment-175. Native Forgejo AMD64/ARM64 release validation remains queued; no release images or deployment are claimed. This issue remains open for its pilot checkpoint. Run a new owner analysis/preview and verify the preliminary report against the pilot export. Integrity and importer outcomes remain separate. No active upload/task or pilot service was interrupted.
Author
Owner

Final development handoff: PR #18 is merged into main in 4de3f35, preserving feature commit(s) 9980373.

ZIP integrity is distinct from preliminary metadata coverage and actual importer matching. Reports explain absent/ambiguous candidates, repeated paths/entries, other entries, format recognition, legacy limitations and subset-only summaries. Immich-Go preview remains authoritative. Conflict resolution 3cc5c33 preserves cancellation and the new entry counts.

Validation: Cross-ZIP, ambiguity/fallback, repeated-path, format/other-entry and zero-coverage integrity fixtures passed, along with integrated report/browser/privacy checks. The combined application also passed backend/vet/race, UI lint/build, container/HTTPS, source/image policies and secret checks; integration evidence.

Documentation is updated on main through PR #21, merge 5ed7191: feature guide, merged scope/evidence, and remaining pilot checks. All nine documentation/policy tests and link/anchor/workflow checks passed.

Closing at the owner's explicit request after merge, local validation and documentation review. This supersedes the earlier request to keep this development issue open through deployment. Native Forgejo AMD64/ARM64 release gates, coordinated idle installation and applicable real-provider/owner pilot checks remain in the release checklist and coordination issue #14. No deployment, native ARM64 pass, real-library capacity result or gate waiver is claimed. PR #19 and scanning remain on hold.

Final development handoff: [PR #18](https://git.sharedroot.net/jchapman/Immich-Bridge/pulls/18) is merged into main in `4de3f35`, preserving feature commit(s) `9980373`. ZIP integrity is distinct from preliminary metadata coverage and actual importer matching. Reports explain absent/ambiguous candidates, repeated paths/entries, other entries, format recognition, legacy limitations and subset-only summaries. Immich-Go preview remains authoritative. Conflict resolution 3cc5c33 preserves cancellation and the new entry counts. Validation: Cross-ZIP, ambiguity/fallback, repeated-path, format/other-entry and zero-coverage integrity fixtures passed, along with integrated report/browser/privacy checks. The combined application also passed backend/vet/race, UI lint/build, container/HTTPS, source/image policies and secret checks; [integration evidence](https://git.sharedroot.net/jchapman/Immich-Bridge/issues/14#issuecomment-175). Documentation is updated on main through [PR #21](https://git.sharedroot.net/jchapman/Immich-Bridge/pulls/21), merge `5ed7191`: [feature guide](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/main/docs/analysis.md), [merged scope/evidence](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/main/docs/integration-status.md), and [remaining pilot checks](https://git.sharedroot.net/jchapman/Immich-Bridge/src/branch/main/docs/deployment.md#merged-pilot-feature-checks). All nine documentation/policy tests and link/anchor/workflow checks passed. Closing at the owner's explicit request after merge, local validation and documentation review. This supersedes the earlier request to keep this development issue open through deployment. Native Forgejo AMD64/ARM64 release gates, coordinated idle installation and applicable real-provider/owner pilot checks remain in the release checklist and coordination issue #14. No deployment, native ARM64 pass, real-library capacity result or gate waiver is claimed. PR #19 and scanning remain on hold.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jchapman/Immich-Bridge#6
No description provided.