You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Architecture review due (10 PRs since arch-review/2026-10-16) #275
10 PRs have merged since arch-review/2026-10-16, the last architecture review.
What to build
The architecture review of arch-review/2026-10-16..master, following "Architecture review" in docs/agents/design-process.md: findings re-verified against master, filed as issues, placed next in the milestone orders, and the reviewed commit tagged.
First caller
The maintainer, who decides on the findings, and the next issues picked from the milestone orders.
Design
Design: not needed because the review procedure is already defined in docs/agents/design-process.md.
Reviewed arch-review/2026-10-16..917f973 (10 PRs, #249–#274). Every finding was re-checked against master at 917f973. Tagged arch-review/2026-10-18 on 917f973 and pushed.
Two media read paths in the API (IMediaAssetReadRepository for proxy serving, IAssetViewReader for lists): both are documented, both return views and not entities, and api-reads-media-through-views passes with no exceptions.
ClassificationMiddleware can save twice for one known item (pairing, then reconcile): it happens only on late pairing, both saves are idempotent, and a failure retries on the next crawl.
Activity
bitbiter-dev commentedon Oct 18, 2026
Reviewed
arch-review/2026-10-16..917f973(10 PRs, #249–#274). Every finding was re-checked against master at917f973. Taggedarch-review/2026-10-18on917f973and pushed.Filed
fix(worker): One storage config with a missing root stops the whole Worker #282 (high): one storage config with a missing or unreadable root faults the crawl
BackgroundService. Under the defaultStopHostthe whole Worker stops, then crash-loops underrestart: unless-stopped, and in all-user mode it blocks every other user's crawl. This is a stop-gap until the work queue (feat(worker): Crawl as a work item per storage config, with scope routing #281) replaces the loop. Decided with the maintainer: fix it now rather than fold it into feat(worker): Crawl as a work item per storage config, with scope routing #281.chore: Medium and low findings from the 2026-10-18 architecture review #283 (medium and low, grouped):
Month/Day/Yearrule and the last-write fallback are copied inNewContentWriterandPairedMovResolver, and Update the row when a file's content changes at the same path #250 would add a third copy;chore: Medium and low findings from the 2026-10-18 architecture review #283 blocks Update the row when a file's content changes at the same path #250.
Scope note on Update the row when a file's content changes at the same path #250:
IngestionContext.AssetIdis both the attempt id and the proxies' owning row id, soContentChangedneeds the two separated. PR refactor(worker): Classify each crawled file once, then one handler per outcome (#254) #274's plan for Update the row when a file's content changes at the same path #250 ("one outcome plus a writer") misses this. The note also recommends updating proxy rows in place rather than delete-and-insert underOnePerAssetAndType. Decided with the maintainer: amend Update the row when a file's content changes at the same path #250 rather than file a separate issue, because a standalone refactor would have no first caller.Dropped, with reasons
IOutcomeWriterhas one implementation, and it is dispatched bySingle(...): its second implementation is Update the row when a file's content changes at the same path #250'sContentChangedWriter, planned in refactor(worker): Classify each crawled file once, then one handler per outcome #254 and refactor(worker): Classify each crawled file once, then one handler per outcome (#254) #274.KnownFileReconcilerfor the rest): this follows refactor(worker): Classify each crawled file once, then one handler per outcome #254's split between outcomes that run the pipeline and outcomes that stop the item.RecurringWork(chore: Medium and low findings from the 2026-10-16 architecture review #255) will soon have no callers: feat: Work queue core — leased work items, with token cleanup and retention as periodic kinds #278 and feat(worker): Crawl as a work item per storage config, with scope routing #281 replace both timers. No action needed now.IMediaAssetReadRepositoryfor proxy serving,IAssetViewReaderfor lists): both are documented, both return views and not entities, andapi-reads-media-through-viewspasses with no exceptions.ClassificationMiddlewarecan save twice for one known item (pairing, then reconcile): it happens only on late pairing, both saves are idempotent, and a failure retries on the next crawl.AssetInteractionDto.Hiddenis alwaysfalse: this is correct by construction, since hidden assets are filtered out of every list (NotHiddenFor). Implement user interaction endpoints: star, like, hide #46 owns the field.Milestone orders for Epic 4 and Epic 5 now put #282 and #283 ahead of #250.