Skip to content

chore: Medium and low findings from the 2026-10-18 architecture review #283

Closed

Description

@bitbiter-dev

From the 2026-10-18 architecture review (#275) of arch-review/2026-10-16..917f973. These are the medium and low findings, grouped. Both are small; one PR is fine.

Medium

  1. Capture-date rules are copied in two builders, and Update the row when a file's content changes at the same path #250 needs a third copy. NewContentWriter.BuildAsset and PairedMovResolver.Resolve each:

    • fall back to the file's last-write time when there is no EXIF date (LocalDateTime.FromDateTime(fileSystem.FileInfo.New(path).LastWriteTime));
    • derive Month, Day and Year from DateCaptured by hand.

    IX_MediaAsset_Flashback and On This Day depend on those three integers matching DateCaptured, and the only thing keeping them in step is the copying. Update the row when a file's content changes at the same path #250 must set them again when it updates a row in place. Put the derivation in one place, for example a MediaAsset method that sets DateCaptured together with Month, Day and Year, plus one fallback-date helper in the Worker. Both builders use it, and Update the row when a file's content changes at the same path #250 then calls it.

Low

  1. Proxy rows reach the context two ways. NewContentWriter attaches the primary's proxies through the MediaAsset.ProxyFiles navigation, and PairedMovProxyWriter adds the MOV's through IMediaAssetRepository.AddProxyFile. Both filter context.ProxyFiles by owner id. Pick one way, so Update the row when a file's content changes at the same path #250 has one pattern to follow when it replaces a row's proxies.

Acceptance

  • Each item done.
  • Month, Day and Year are assigned in exactly one place in production code.
  • scripts/mutation-changed.sh at 100%.

First caller

NewContentWriter and PairedMovResolver, which are the two existing builders, and then #250's in-place update.

Design

Design: not needed because both items consolidate existing code behind a member of an existing type, with no new abstraction, contract or schema change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agentv1.0Required for the v1.0 releaseworker

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions