comparison · c_55d1158891d1 (tommy-mor) vs c_01304e7d0f46 (tommy-mor)
Side A restores a real feature (persistent view counts) with new state (ViewStore), middleware wiring, canonical URL normalization, and a concrete integration test verifying counts and canonicalization—substantive new functionality. Side B is a clean but purely internal refactor unifying duplicate new-thread form markup/ids across public/room scopes, valuable for maintainability but lower-impact than adding a working feature with tests.
A restores a full product capability: ViewStore on AppState, GET middleware with path filters, query canonicalization, view counts wired through garden/forum/search/try layouts, and real integration assertions—lasting infrastructure and UX. B is a worthwhile but narrower maintainability win that unifies public/room new-thread DOM ids and HtmlUiAction variants without adding new user-facing behavior.
Side A restores a substantive feature by introducing a persistent ViewStore into AppState, adding middleware to count GET page views with canonicalized URLs, wiring view counts into page layouts, and replacing a stub test with integration tests that verify counting and query-order canonicalization. Side B is primarily a UI refactor that unifies public and room new-thread forms, selectors, and actions under shared IDs, improving maintainability but with less direct long-term functional impact than reintroducing durable view counting.
comparison · c_01304e7d0f46 (tommy-mor) vs c_8337e9dd0f87 (tommy-mor)
Side B is a small, targeted concurrency fix that prevents readers from stalling behind pending writers on a hot page render path, a real correctness/performance bug with clear rationale. Side A is a larger refactor unifying DOM ids/actions across public/room forms, which improves clarity but is mostly renaming/restructuring churn with no bugfix, and carries more risk of regressions across multiple files and tests.
B fixes a real concurrency hazard by precomputing room_members_section_markup and dropping the Tokio RwLock read guard before layout/HTML stringify, avoiding reader stall behind writers during ingest. A is a worthwhile DOM/action unify of public vs room new-thread forms, but mostly structural dedup and selector renames without the same correctness impact.
Side B fixes a concrete concurrency issue by precomputing `room_members_section_markup`, dropping the `tokio::sync::RwLock` read guard before expensive page layout/stringification, and avoiding reader stalls when a writer is waiting. Side A is primarily a broad refactor that unifies public and room new-thread UI IDs, actions, and markup; while it reduces duplication and standardizes behavior, it is mostly structural and also changes UI behavior rather than addressing a clear correctness or performance problem.