comparison · c_48fcbcde8f88 (tommy-mor) vs c_19f4b8f10b98 (tommy-mor)
Side A meaningfully deduplicates substantial test infrastructure (mock OAuth server, HTTP helpers, pass/fail harness, env builders) across three test files into shared modules, reducing maintenance burden with no behavior loss. Side B is a small, cosmetic UI tweak (removing a toggle button and simplifying placeholder text) with minimal lasting architectural value.
A consolidates duplicated test harness, HTTP/OAuth mocks, cargo build, and server-env helpers into common.bb/oauth.bb and rewires auth/grants/integration to use them, a lasting DRY improvement across the suite. B only trims a public new-thread compose toggle and tweaks labels/placeholders in forum.rs—cosmetic UI churn with little structural impact.
Side A consolidates duplicated test infrastructure into shared helpers (`test.common` and `test.oauth`), introducing reusable functions like `run-cargo-build-release!`, `slug-server-env`, `complete-registration!`, and configurable mock OAuth behavior while updating multiple test suites to use them. This reduces duplication, centralizes maintenance, and also standardizes HTTP timeouts and multi-user OAuth testing; Side B is primarily a UI cleanup that removes the form toggle and tweaks placeholders/button text without adding comparable lasting functionality.
comparison · c_19f4b8f10b98 (tommy-mor) vs c_25ece8f92dc8 (tommy-mor)
Side B fixes a real multi-user concurrency bug (shared sentinel delegate blocking subsequent human voters) with a coherent type-level fix (agent becomes Option<String>), updates all call sites, and adds a substantial regression test proving the fix. Side A is purely cosmetic UI markup cleanup (removing labels/toggle buttons and changing placeholder text) with no functional impact.
B fixes a real multi-user bug by removing shared browser sentinel agents (WEB_BROWSER_AGENT/INVITE_BROWSER_AGENT), making PendingSession.agent optional, and stopping UI votes/posts from binding a delegate—backed by integration tests for two humans voting successfully. A only trims forum compose markup (toggle, labels, JSON error targets) and rewords placeholders, a cosmetic UI churn with little lasting design impact.
Side B fixes a substantive authentication/delegate design bug by changing browser sessions from a shared sentinel agent to `None`, updating `PendingSession` and polling types to use `Option<String>`, and removing the browser delegate from UI posts so multiple human users can vote without conflicting `AgentBound` state. It also adds integration tests covering the multi-user voting scenario and browser login behavior, whereas Side A mainly removes UI toggle/labels and changes placeholder text and button wording with little lasting functional impact.
comparison · c_19f4b8f10b98 (tommy-mor) vs c_cf0a514b261a (tommy-mor)
B removes genuinely dead/redundant code with a clear rationale and updates the corresponding test to match the new (correct) behavior, improving code clarity and correctness confidence. A is a UI simplification that removes labels/toggle behavior and changes placeholder text, which is a stylistic tweak with less lasting substantive value and risks losing the collapsible-form UX without clear justification.
B removes proven dead code from the core reducer and updates tests to match the real invariant (zeros rejected upstream; zero-weight edges skipped), which is a lasting clarity/correctness win. A only trims UI chrome and tweaks placeholders/copy on the new-thread form—cosmetic churn with little durable design impact.
Side B removes a redundant guard in the reducer based on documented upstream validation, preserving item and pair registration while relying on existing zero-weight edge handling, and updates tests to verify the intended behavior. Side A mainly simplifies the forum form UI by removing labels/toggle behavior and changing placeholder text/button wording, which is largely cosmetic and potentially reduces usability rather than adding durable functionality.
comparison · c_7ec67b9cef2c (tommy-mor) vs c_19f4b8f10b98 (tommy-mor)
Side A adds a new RouteContext abstraction (server/src/html/routing.rs) that is wired into the module tree and provides real, reusable code for scoped href building, plus a detailed refactor plan to guide future work. Side B's 'cleaner' diff simplifies a form but also strips out error_target/form_id fields from the RPC payloads and removes the toggle/label UI, which risks regressing the check_ingest error-display behavior without clear compensating benefit.
A lands a real architectural step (RouteContext wrapper + exports) and a concrete migration plan for ItemId vs hrefs, which outlasts one UI tweak. B only trims the public new-thread form (toggle, labels, check payload fields) with no structural or correctness gain.
Side A introduces a new `RouteContext` abstraction (`server/src/html/routing.rs`) and re-exports it, creating a centralized API for building scoped HTML routes (`item_href`, `thread_url`, room/public handling) that supports future refactoring away from ad hoc URL construction. Although much of the patch is planning documentation, the code change establishes a reusable architectural boundary, whereas Side B mainly alters the forum compose UI (removing the toggle, labels, and changing placeholders/button text) without adding comparable long-term infrastructure.
comparison · c_a337088f57f0 (tommy-mor) vs c_19f4b8f10b98 (tommy-mor)
Side A delivers a substantive dev-tooling improvement: persistent fixture data, cargo-watch integration, port-preference logic, and summary rebasing, which meaningfully improves developer iteration workflow. Side B is a small, cosmetic UI simplification (removing a toggle button, tweaking placeholder text) that is fine but far less impactful and somewhat reduces functionality (hides the collapsible toggle) without clear justification.
A materially improves lasting dev workflow: cargo-watch live reload, persistent fixture-data with reuse/rebase, preferred port 8080, longer health wait, and supporting helpers/gitignore—versus B’s small form tidy that mainly drops the toggle/labels and trims RPC metadata/placeholders with little durable design impact.
Side A substantially improves the developer workflow by replacing the one-shot release build with a persistent cargo-watch setup, adding reusable fixture-data with summary rebasing, preferred-port selection, and reuse of seeded data, making local iteration faster and more durable. Side B is primarily a UI cleanup that removes the toggle and labels from the public thread form and changes placeholder/button text, with little evidence of a lasting functional improvement.
comparison · c_7b940fef005f (tommy-mor) vs c_19f4b8f10b98 (tommy-mor)
Side A removes dead/unused parameters and unnecessary computation (post lookup, index resolution, card markup) from vote_compare_post_success_js, simplifying the function signature and its call site—an actual code simplification with reduced surface area. Side B only strips UI labels, toggle button, and error/form-id attributes from a form, which is cosmetic and arguably removes useful UX (error targeting, toggle collapse) without clear functional benefit.
A removes real dead work from vote_compare_post_success_js (ingest lookup, post index, card markup, and unused params), shrinking the call site and avoiding needless state reads. B mostly trims UI chrome and copy on the new-thread form (toggle, labels, RPC fields)—useful polish, but thinner lasting design impact.
Side A refactors `vote_compare_post_success_js` by removing unused parameters and the logic that rebuilt the post preview, leaving the function focused on updating the vote edge history and simplifying its call site. Side B mostly changes the new-thread form presentation (removing the toggle, labels, and altering placeholders/button text) and drops metadata fields from the JSON payloads, which is primarily UI churn with less clear lasting architectural value.