comparison · c_7ca21f5e83a8 (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B adds real feature functionality (Reddit post rendering with thumbnails, full-size images, link extraction), a new module, updated data model fields, CSS, and a unit test with fixture—lasting production code. Side A only adds a single browser test file for an existing feature, which has value but is narrower in scope and doesn't change any production behavior.
B adds lasting product value: EntityData image/link fields, Reddit parse helpers, a dedicated render/reddit module wired into rank lists and entity panels, CSS, and a fixture-backed unit test. A only adds a browser e2e test for pool-scoped voting—useful coverage, but no production behavior or design change.
Side B implements a lasting feature by introducing Reddit-specific rendering, extending `EntityData` with `image_url` and `link_url`, extracting those fields during Reddit parsing, integrating custom HTML into entity and ranking views, adding CSS, and covering the parser with a regression test and fixture. Side A adds an end-to-end browser test for pool-scoped voting, which improves verification but does not change the application's behavior or architecture.
comparison · c_410d9361a866 (tommy-mor) vs c_939729b4d9a6 (tommy-mor)
Side A is a self-contained, well-tested feature: it adds a dedicated render/reddit module with image/link extraction, thumbnail rendering in lists, and a fixture-backed unit test, all wired cleanly through existing code paths. Side B's diff pulls in large Cargo.lock/dependency churn (rand, urlencoding, zerocopy) and references new modules (pair.rs, html/vote.rs) that aren't shown in the patch at all, making the change appear incomplete and harder to verify as a coherent, lasting contribution.
B adds the core pairwise vote/compare loop (vote route and CTA, post-vote `next` navigation, ratio slider JS, and `$form:i32` typed template holes with tests), which is central lasting product behavior versus A’s Reddit-only presentation layer. A still delivers real value—EntityData `image_url`/`link_url`, parse helpers, a clean `render::reddit` split, fixtures/tests, and list/detail thumbnails—but that is domain polish on top of browsing, not the sorter’s primary interaction path; B’s Cargo.lock churn does not change the ordering.
Side A adds a substantial Reddit-specific rendering layer: it extends `EntityData` with `image_url`/`link_url`, extracts those fields during Reddit parsing, introduces reusable `render::reddit` components for entity pages and ranking rows, integrates them into existing HTML, and adds parsing tests plus a fixture. Side B mainly prepares infrastructure for a voting flow (typed form holes, redirect support, route wiring, CSS/JS, dependencies), but the core voting implementation is absent from the patch, making its lasting functional value much smaller than A's completed feature.
comparison · c_16438843de8f (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B implements coherent, tested functionality (Reddit post image/thumbnail rendering with a new render module, unit test with fixture, and CSS) that integrates into existing rendering code paths. Side A adds disconnected scaffolding files (Dockerfile, fly.toml, deps.edn, event_log.rs, views.rs) placed oddly at repo root with no wiring into the actual codebase, suggesting speculative/incomplete seed work of unclear lasting value.
B ships a coherent product feature: Reddit image/link extraction, a dedicated render module wired into entity and rank lists, CSS, and a fixture-backed test. A mostly adds bootstrap/ops surface (Dockerfile, fly.toml, deps.edn) plus standalone event_log/views modules without the same integration, tests, or domain depth.
Side B adds a cohesive feature with lasting architectural value: it extends `EntityData` with `image_url` and `link_url`, introduces a dedicated `render::reddit` module, updates HTML rendering to display Reddit-specific cards and thumbnails, and adds a regression test covering preview/image extraction. Side A adds useful infrastructure (Dockerfile, Fly config) and new persistence helpers (`EventLog`, `ViewStore`), but much of it is deployment scaffolding or isolated utilities without showing equivalent integration into the application's behavior.
comparison · c_28dfd8015c8a (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B implements a substantive feature (Reddit post rendering with image/link extraction, new render module, CSS, and a unit test with fixture) that adds real, tested functionality. Side A is a small, useful test-config simplification, but it's a minor config tweak compared to B's meaningful feature work despite B's terse commit message.
B adds lasting product value: EntityData gains image_url/link_url, Reddit parsing extracts them, and a new render/reddit module plus CSS delivers thumbnail rows and post detail cards, with a fixture-backed unit test. A only collapses hand-enumerated kaocha suites into one ns-pattern in tests.edn—helpful hygiene, but no user-facing behavior or durable domain logic.
Side B adds lasting functionality by introducing Reddit-specific rendering, extending EntityData with image/link metadata, extracting preview and outbound URLs during Reddit parsing, wiring new UI components into ranking and entity views, and adding a regression test with a fixture. Side A simplifies Kaocha configuration by replacing manually enumerated test namespaces with automatic discovery, which improves maintainability but is a much smaller infrastructure change.
comparison · c_bc8c17a00ed7 (tommy-mor) vs c_410d9361a866 (tommy-mor)
B adds substantial new functionality (image/link extraction, dedicated render module, thumbnail rendering in lists, and full-size images in post detail) with a new module, CSS, and fixture-backed tests, providing broader lasting value despite the terse commit message. A is a small, focused, well-tested bugfix (skipping pinned posts) that is correct and clean but narrower in scope and impact than B's feature work.
B adds lasting product surface: EntityData image/link fields, Reddit image/URL parsing, a new render module with post cards/thumb rows, and HTML/CSS integration plus a fixture test. A is a correct, tested filter to skip stickied/pinned listing children, but it is a narrow import tweak versus B’s end-to-end Reddit presentation path.
Side B adds substantial new functionality across the data model and UI: it extends `EntityData` with `image_url` and `link_url`, extracts those fields from Reddit payloads, introduces reusable Reddit-specific rendering for post cards and thumbnail rows, wires it into existing HTML, and includes fixture-backed tests. Side A is a targeted correctness fix that skips stickied/pinned subreddit posts during import with a focused helper and regression test, but its scope and impact are much narrower than the end-to-end feature added in Side B.
comparison · c_1c1c8e7a2de8 (tommy-mor) vs c_410d9361a866 (tommy-mor)
B adds a self-contained, tested feature (Reddit post thumbnails/full-image rendering with a new render module and fixture-based unit test) that improves real user-facing functionality without breaking existing APIs. A also adds a real feature (room create CLI) but simultaneously removes room visibility support (public/private distinction) from the data model and wire protocol, which is a functional regression/simplification with unclear justification, despite reasonable cleanup of rooms as a HashSet.
A lands a lasting core design: simplifies rooms to a HashSet of private ids, drops ThreadVisibility from events/reducer/RPC, and adds the real CLI `room create` path with docs and tests. B only extends Reddit entity parsing/UI (thumbs, image_url/link_url, render helpers, CSS)—useful polish for one import source, but not architectural.
Side A adds a new end-to-end `room create` CLI command wired through the RPC, including authentication handling, output, documentation, and tests, while also simplifying the data model by removing the unused room visibility field and replacing the room registry with a simpler `HashSet`. Side B improves Reddit presentation with thumbnails, full-image rendering, outbound links, CSS, and parsing/tests, but those are primarily UI enhancements rather than foundational project functionality.
comparison · c_4a5c84c0a37b (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B adds substantive new functionality (Reddit post rendering module with image/link extraction, thumbnail and full-image display, new tests and CSS) despite an unhelpful commit message, while Side A is a smaller, useful fix (display_path in hrefs) plus a test rewrite that mainly increases test coverage without new production logic. B's feature work has broader lasting impact on the rendering pipeline than A's incremental URL-encoding and test change.
B adds lasting product capability: extends EntityData with image_url/link_url, proper Reddit parsing helpers, a dedicated render module for post cards and ranked child rows, CSS, and a fixture-backed parse test. A is a valuable but narrower fix (display_path in vote hrefs) plus a stronger pool e2e assertion; it hardens existing behavior rather than expanding the core surface.
Side B adds a substantial new capability: Reddit-specific rendering for entity pages and ranking lists, extends the entity data model with image/link metadata, parses additional Reddit fields, adds styling, and includes a regression test fixture for preview extraction. Side A fixes vote URLs to use display paths and greatly expands browser test coverage by exercising all 45 vote pairs and asserting the final ranking, which improves correctness and verification but is narrower in scope than the new end-user functionality introduced in Side B.
comparison · c_8dc1a8119370 (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side A replaces a broken, overengineered keystroke-parser graph with a much simpler paste-and-go URL parser, which is a solid simplification but also deletes tests/docs and reduces functionality (no live suggestions) without adding new capability. Side B adds real user-facing feature work (Reddit post thumbnails/images/link rendering, new render module, fixture-backed test, CSS) that meaningfully improves the product surface with test coverage, making it more substantively valuable despite the terse commit message.
A replaces an unreliable ~1.8k-line keystroke graph, ParserAction surface, race-prone JS, and Playwright race test with a small paste-and-go URL parser and redirect—lasting design simplification that cuts real failure modes. B adds valuable Reddit thumb/image/link rendering and entity fields, but it is narrower additive UI polish rather than fixing a broken core path.
Side B adds lasting functionality by extending the data model with `image_url` and `link_url`, extracting those fields from Reddit payloads, introducing reusable Reddit-specific rendering, and integrating thumbnails/full-image views into ranking lists and entity pages with supporting tests. Side A mainly removes a large autocomplete/transition-graph system in favor of a much simpler paste-and-go URL parser and redirect flow, which simplifies the codebase but also eliminates substantial interactive behavior rather than expanding core capabilities.
comparison · c_552f408ae0da (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side A adds a complete, well-scoped feature (RoomList RPC + CLI subcommand) with explicit type definitions and a thorough integration test suite proving multi-user isolation, plus wiring into the test runner and bb.edn tasks. Side B ('nice') is a reasonable feature (Reddit post image/link rendering) with one unit test, but has a vague commit message and less rigorous testing/isolation guarantees compared to A's dedicated multi-scenario integration test.
A adds a core RPC/CLI capability (RoomList) with types, auth-gated server logic, and integration tests that lock in per-user grant isolation—lasting product and security surface. B improves Reddit-specific display (image/link fields, render helpers, CSS) with a focused unit fixture, which is real UX value but narrower presentation polish than a multi-user room discovery API.
Side A adds a new end-to-end capability: a RoomList RPC, CLI subcommand, shared request/response types, server authorization logic that filters rooms by the authenticated principal's grants, and comprehensive integration tests verifying per-user isolation. Side B improves Reddit rendering with richer HTML, image/link extraction, CSS, and a parsing test, but it is primarily a UI enhancement, whereas Side A introduces a broadly useful API feature with security-sensitive behavior validated by integration tests.
comparison · c_cd965c070df3 (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B introduces a real, tested feature (Reddit post thumbnails/full-image/link rendering via a new render::reddit module, CSS, and a fixture-backed unit test) that adds lasting UI/domain value, whereas Side A is a narrower bugfix wiring child imports correctly and adjusting integration tests. Side A's fix is legitimate and useful, but Side B's change is more substantial, well-structured (separate module, EntityData extension, tested parsing logic), and delivers durable functionality rather than just a targeted correction.
A fixes core import correctness: children attach via apply_entity_under_parent without ensure_path pulling intermediate Reddit comment-path segments, and ranking shows real titles via child_label, with integration coverage for children SSE. B adds lasting Reddit UI (thumbs, image_url/link_url, render module) but is presentation polish on top of that wiring, not a structural bugfix.
Side A fixes a core correctness issue by changing Reddit children imports to attach entities directly under the requested parent without `ensure_path` creating incorrect `/comments/...` hierarchy, and updates the ranking panel to show imported child titles by looking them up in the global tree. It also propagates the new API through UI rendering and adds integration tests covering SSE updates and child fetching, whereas Side B is primarily a feature enhancement adding richer Reddit-specific rendering (thumbnails, images, links, CSS) and parsing fields without addressing a fundamental data-model bug.
comparison · c_410d9361a866 (tommy-mor) vs c_c42f908efc44 (tommy-mor)
B performs a genuine type-safety refactor, replacing loosely-typed String item paths with CanonicalItemUrl throughout the RPC/validation layer and adding Deref impls to reduce boilerplate, which reduces bug surface and clarifies invariants across the codebase. A adds a real user-facing feature (reddit post rendering with images/links) with decent test coverage, but it's more localized and additive rather than improving the correctness/maintainability of existing core logic; B's changes, while less flashy, touch more fundamental plumbing that lowers future defect risk.
A adds lasting product capability: EntityData image_url/link_url, Reddit URL/image parsing with a fixture test, a dedicated render/reddit module (detail cards and list thumbs), and CSS—real domain behavior. B is worthwhile type hygiene (Deref on href newtypes, resolve_item → CanonicalItemUrl, less String wrapping) but mostly mechanical plumbing across API paths without new behavior or bugfixes.
Side A adds substantial end-user functionality by introducing Reddit-specific rendering (thumbnails in ranking lists, full post cards), extending EntityData with image/link metadata, implementing Reddit parsing helpers for those fields, and adding a regression test with a fixture. Side B is primarily a type-safety refactor that changes many APIs from String to CanonicalItemUrl and adds Deref implementations, improving code clarity but with little visible behavioral change compared with A's new capabilities.
comparison · c_0c466eea1ed4 (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B ships real user-facing functionality (Reddit post thumbnails/images/link rendering with new fields, tests, and CSS) that improves the actual product experience, despite a vague commit message. Side A adds a dev-only offline tool with decent structure and tests, but it's auxiliary tooling with no direct product impact, making B's change more consequential despite A's cleaner presentation.
A adds a full offline compile/scan path (server offline module, dedicated binary, tests, and docs) that reuses core DSL validation and reducer replay—durable developer infrastructure for the project’s central artifactFormats. B only extends Reddit entity parsing/rendering (image_url/link_url, thumbnails, CSS) as a narrow UI specialization, so it is real product polish but less foundational and less reusable than A.
Side A introduces a new workspace tool (`sorterc`) plus reusable `server::offline` APIs to compile `.sorter` files, replay `events.jsonl`, detect malformed ingests, and validate reducer state offline, with CLI integration, documentation, and tests. Side B improves Reddit presentation by adding richer entity rendering, thumbnails, image/link extraction, and supporting tests/CSS, but it is primarily a UI enhancement whereas Side A adds broader development and validation infrastructure that is likely to benefit ongoing maintenance and correctness.
comparison · c_410d9361a866 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
B wires up substantial, necessary functionality: cookie-based session auth for browser login/logout, private room routing/permissions, and a reusable ThreadNav abstraction spanning public/room threads, which is a meaningful architectural extension to the app's core navigation and auth model. A is a cleaner, well-tested, but narrower feature (Reddit post image/link rendering) with a nice new render module and unit test. B's inclusion of the irrelevant, AI-transcript-like plan2.md is pure noise and a blemish, but the actual code changes in B still cover more load-bearing surface area than A's isolated enhancement.
B restores lasting core product surface: browser session cookies, web login/logout, POST /post ingest, and scoped private-room pages/routes with ACL-aware thread nav and compose forms—real multi-tenant forum wiring. A only adds Reddit-specific EntityData fields plus thumbnail/detail cards and CSS, a narrower presentation enhancement despite cleaner tests.
Side B wires up substantial core web functionality: browser session cookies, login/logout, authenticated web posting, room-aware routing and permissions, and refactors thread rendering to support both public and private scopes. Side A adds valuable Reddit-specific rendering (thumbnail rows, full post cards, richer parsed metadata, and tests), but it is a domain-specific presentation enhancement compared with B's broader infrastructure and UI integration.
comparison · c_48edc893c5b0 (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side A introduces a well-structured, reusable mechanism (form_template + ui_action) that unifies browser-only actions behind a single endpoint, refactors web_post handlers into shared run_* helpers cleanly, and includes solid unit tests for the templating logic. Side B adds a useful but narrower feature (Reddit-specific rendering) with reasonable tests, but is more domain-specific and less architecturally generalizable than A's infrastructure work.
A adds lasting architecture: a reusable form-template/`__rpc__` hole system, typed `HtmlUiAction`, a unified `POST /ui` handler, and shared runner extraction in `web_post`, plus progressive expand-for-new-thread UI. B is solid but narrower product polish (Reddit thumb/image/link fields, `render/reddit` cards, CSS, one fixture test) that builds on an existing importer rather than a general UI command path.
Side A introduces a new browser UI command architecture with a unified POST /ui endpoint, typed HtmlUiAction parsing from JSON templates with form-hole substitution, reusable web-post handlers, and supporting tests, creating reusable infrastructure beyond a single feature. Side B adds valuable Reddit-specific rendering (thumbnails, full images, link extraction, new metadata fields, and tests), but its impact is narrower and primarily enhances one content type rather than establishing a broader interaction framework.
comparison · c_410d9361a866 (tommy-mor) vs c_509fc5155034 (tommy-mor)
Side B lays down the actual foundational architecture (ItemId path canonicalization/breadcrumbs, GlobalTree replacing the flat GroupMap, journal worker, parser rewrite) that Side A's commit builds directly on top of (rank_list/tree signature, entity_panel, reddit render module). Side A is a nice incremental feature (reddit post thumbnails/images) but is smaller in scope and depends on B's tree/ItemId infrastructure to even function; B's changes are more foundational and broadly enabling despite being messier/larger.
B replaces flat per-scope GroupMap/settlement with a hierarchical GlobalTree, canonical ItemId paths (parent/breadcrumbs/from_url), journal replay including NodeEnsured, and UI wired to ?item= nodes—core lasting architecture. A only extends that surface with Reddit-specific markup (thumb/image/link fields, render/reddit cards, CSS) and a fixture test, valuable polish but dependent and narrower.
Side B introduces a substantial architectural shift from string-based subreddit scopes to a hierarchical `GlobalTree` keyed by canonical `ItemId`s, updating state management, event replay, URL parsing, voting, breadcrumbs, and persistence to support per-node rankings and navigation. Side A adds valuable Reddit-specific rendering (thumbnails, entity cards, image/link extraction, and tests), but it is primarily a presentation and metadata enhancement layered on top of the existing model, whereas B establishes broader lasting infrastructure used across the application.
comparison · c_410d9361a866 (tommy-mor) vs c_06fce70179bc (tommy-mor)
Side B fixes a real functional gap: the old FetchEntity handler queued an async fetch and immediately morphed with (likely stale) data, giving no feedback when the fetch actually completed; the SSE-based fetch module now streams fetching→complete/error and morphs the actual result, which is a genuine architectural improvement with oneshot-based job result tracking. Side A is a well-tested but purely additive feature (reddit post thumbnails/images) that adds value but is lower-impact than fixing the fetch completion flow, though B does regress by removing a few existing reddit.rs unit tests without replacement.
B turns fire-and-forget entity import into a proper SSE completion path (oneshot results on the Reddit worker, fetch module, client stream handling, integration test update), which is lasting infrastructure for how imports work. A is real product value—EntityData image/link fields, render/reddit cards, thumbs in rank lists, CSS, and a fixture test—but it is additive UI on top of that pipeline rather than a structural fix.
Side B introduces a substantive architectural change by moving entity fetching to an SSE-based workflow, adding asynchronous completion notifications with oneshot channels, integrating streaming UI updates, and wiring the backend, frontend, and tests together for a more responsive fetch pipeline. Side A adds valuable Reddit-specific rendering (thumbnails, full images, outbound links, specialized markup, and parsing/tests), but it is primarily a feature enhancement layered on top of existing behavior rather than a broader infrastructure improvement.
comparison · c_410d9361a866 (tommy-mor) vs c_effff18688f9 (tommy-mor)
B consolidates three separate POST endpoints into a single /ui dispatch path, removing ~360 lines of duplicated auth/session-resolution logic while preserving behavior (verified by updated integration tests and fixture), a genuine architectural simplification with real test coverage. A adds a legitimate feature (Reddit post rendering with image/link extraction and a new render module) with a unit test, but it's narrower in scope and mostly additive rather than resolving existing duplication/tech debt.
A adds lasting product capability: EntityData gains image_url/link_url with real Reddit preview/link parsing, a dedicated render::reddit path for post cards/thumbnails, CSS, and a fixture-backed test. B mainly consolidates already-working web ingest/check/redact onto POST /ui by deleting web_post.rs and rewriting callers/tests—valuable cleanup, but largely relocation of existing behavior rather than new design substance.
Side A adds substantial new end-user functionality: Reddit-specific rendering for entity pages and ranking lists, extends `EntityData` with `image_url` and `link_url`, implements robust extraction of preview/full-image URLs while avoiding unsuitable Redgifs links, and adds a regression test fixture. Side B is primarily an architectural refactor that consolidates web posting flows into `POST /ui` and removes duplicate handlers; while useful for maintainability, it mostly reorganizes existing behavior rather than adding comparable lasting capabilities.