comparison · c_5696b828c728 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side B ships substantial, functional code: cookie-based web session auth, a new /post web-ingest endpoint, room-scoped thread views/routing, and updated router wiring—real, working features that expand the product surface. Side A is valuable but purely documentation alignment (DSL.txt/GUIDE.sorter/plan.md wording fixes) with no functional change, and Side B is weakened somewhat by including an unpolished 'plan2.md' AI-chat transcript as noise, but its actual Rust/routing changes still represent more durable, load-bearing functionality than the doc-only patch.
B delivers substantial lasting product value: session cookies + web login/logout, /post web ingest, private-room ACL-gated pages and thread/post/expand routes, compose forms, and home navigation wired through the real axum/HTML/auth stack. A only realigns DSL/GUIDE/plan.md prose and examples with the no-@ wire identity model—useful consistency, but documentation churn with no runtime behavior change.
Side B adds substantial application functionality: browser session cookies, login/logout flows, web posting wired into the existing RPC path, room-aware thread views, routing, and UI handlers that enable authenticated web use rather than just CLI access. Side A is a documentation-only update that usefully aligns the DSL, guide, and plan with the new wire identity model (removing `@` from API examples and clarifying `--delegate`), but it does not change project behavior.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_30aff8402510 (tommy-mor)
Side A implements substantial real functionality: cookie-based web sessions, room-scoped navigation and views, ACL-aware compose forms, a new web-post endpoint, and route wiring—actual lasting product code. Side B merely deletes a stray planning markdown file (plan2.md) that A itself had added, contributing no functional value beyond cleanup.
Side A ships real product surface: session cookies, web login/logout, POST ingest, private room pages/threads with ACL checks, compose forms, and full routing—lasting UI/auth design. Side B only deletes plan2.md, removing a planning note with no runtime value.
Side A implements substantial functional changes: it adds browser session cookies and login/logout flow, web posting wired through existing RPC authorization, new routes, room-aware UI/pages, and authentication-aware rendering, alongside the necessary dependency updates. Side B only deletes a planning document (`plan2.md`) and makes no behavioral or architectural improvement to the project.
comparison · c_3ff71f7eaeda (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Commit B delivers substantial new functionality—session-cookie web auth, a unified /post ingestion path, room-scoped thread views/routes (ThreadNav abstraction), and full router wiring—representing real, lasting feature/architecture work despite including some noise (a speculative plan2.md, Cargo.lock churn). Commit A is a small, focused set of UI polish fixes (vote-count tooltip, HUD unpin-via-POST instead of link, CSS/test tweaks) which is useful but narrow in scope and impact compared to B's structural additions.
B restores foundational multi-room web UI: session cookies + /login|/logout|/post, ThreadNav scoped to public vs private rooms with ACL checks, room index/thread/post/expand routes, compose forms, and home listing of granted rooms—real product surface. A only polishes existing garden pin/vote UX (vote-count badges, HUD unpin form, docs/CSS/tests), which is useful but narrower and dependent on prior structure.
Side B restores substantial web functionality by wiring browser session cookies, login/logout, room-aware thread routing, authenticated posting, and integrating these into the application's router, creating lasting infrastructure for the web UI. Side A improves the garden experience with pairwise vote counts, an unpin HUD action, styling, and tests, but these are incremental UI enhancements rather than foundational capabilities.
comparison · c_2f5d9e0370f8 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A is a focused, well-tested DSL redesign (explanation-first votes) with consistent parser changes, updated tests, fixtures, and docs across CLI/server/browser tests — a coherent, lasting change to the language's syntax and semantics. Side B is a large feature addition (room UI, cookie auth, web posting) that is plausible but includes an out-of-place LLM-generated 'plan2.md' essay, no new tests, and more speculative/less validated surface area, making its lasting value harder to assess despite its size.
B restores lasting product surface area: cookie sessions, /login|/logout, web POST ingest, public+private room/thread routes, compose forms, and ACL-gated room pages in forum.rs/auth/web_post. A is a real DSL grammar flip (explanation-first votes, parser split into block-prefixed vs item-definition paths) but most of the diff is cascading fixture/test/doc rewrites rather than new capability.
Side B adds substantial end-user functionality by wiring up browser login via session cookies, adding web posting (`/post`), room-aware forum routes, authentication helpers, and integrating these into the application's router. Side A thoroughly redesigns the DSL to require block-first vote explanations and updates the parser, UI, docs, and tests accordingly, but it is primarily a syntax migration rather than adding new user-facing capabilities.
comparison · c_8dc1a8119370 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A replaces a fragile, over-engineered 1800-line keystroke autocomplete graph with a small, correct, well-tested paste-and-go parser (~90 lines), removing dead code, a stale test suite, and unused browser-test infra while adding focused unit tests and an integration test — a clear net simplification with real, verifiable behavior. Side B adds substantial new room/auth/cookie functionality but is messier (includes an unrelated AI-generated 'plan2.md' essay committed to the repo, large sprawling diffs across auth/forum/routing with no tests), making its lasting value harder to assess and its hygiene weaker despite more features.
Commit A replaces an unreliable ~1800-line keystroke graph parser (plus parser_action, race-prone JS, and Playwright test) with a correct ~87-line paste-and-go URL extractor and redirect, delivering lasting simplicity and a real reliability fix. Commit B re-wires room/forum UI, cookie sessions, and compose forms—valuable product surface—but is largely restoration/plumbing plus a long speculative plan2.md, so less durable design improvement per line.
Side B restores major application functionality by wiring browser login/logout with session cookies, adding authenticated web posting, room-aware thread views, routing, and access control across the forum UI. Side A does simplify an overcomplicated parser into a focused Reddit URL extractor and replaces fragile autocomplete with paste-and-go navigation, but it also removes a large amount of parser/UI capability rather than extending the project's core functionality.
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_8c6a5e2e4a54 (tommy-mor) vs c_c42f908efc44 (tommy-mor)
Side A delivers a substantial, working feature (private room UI, session cookies, web posting form, room-scoped routing) that materially extends the application's capabilities, despite including some noisy/unpolished artifacts (plan2.md AI chat log). Side B is a solid internal refactor (newtype deref, canonical item plumbing) improving type-safety and reducing stringly-typed code, but it's lower-impact churn with no new user-facing capability, so it contributes less lasting value despite being cleaner.
Commit A ships lasting product surface: session cookies and web login/logout, private room pages/threads with ACL checks, compose/post forms via rpc_post_with_bearer, and ThreadNav so public and room UIs share one path model. Commit B is a worthwhile type-safety refactor (CanonicalItemUrl through resolve_item/rank/pair paths and Deref on href newtypes) that removes String churn but does not add user-facing capability.
Side A delivers substantial end-user functionality by wiring the web UI back together: it adds browser login/logout with session cookies, authenticated web posting, room-aware thread pages, routing, and reusable helpers for principal resolution, enabling the application to be used through the browser. Side B is a solid internal refactor that strengthens type safety by propagating `CanonicalItemUrl` and adding `Deref` implementations, but it mostly restructures existing code without adding comparable user-visible capability.
comparison · c_552f408ae0da (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A adds a clean, well-scoped feature (RoomList RPC + CLI subcommand) with a comprehensive integration test proving per-user isolation, and updates the test runner/bb.edn accordingly—clear, self-contained, verifiable value. Side B is a large, messy web-UI wiring commit that includes a stray AI-generated design essay (plan2.md) accidentally committed, mixes cookie-auth, routing, and room-view logic without any tests, and has questionable production hygiene (committing chat transcripts) that undermines its lasting value despite larger scope.
Side A ships a complete, correctly scoped feature (RoomList RPC + types + CLI + isolation tests that prove users only see granted rooms), which is lasting API surface. Side B restores substantial room UI (cookie sessions, /r/* pages, web post, ACL checks in forum.rs) but dilutes value with a 190-line speculative plan2.md and more diffuse wiring without equivalent new tests.
Side A adds a complete, focused capability: a new authenticated RoomList RPC, matching CLI subcommand, shared RPC types, and integration tests verifying per-user room visibility and grant isolation. Side B contains a very large UI wiring change, but it also introduces an unrelated planning document (`plan2.md`) and broad routing/auth refactoring without accompanying tests in this patch, making its lasting, verified value less clear than A's precise, well-tested feature.
comparison · c_1c1c8e7a2de8 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A is a focused, coherent change: it adds a working `room create` CLI command wired to a simplified server-side RoomCreate RPC, removes now-unneeded ThreadVisibility plumbing, and updates docs/tests consistently across cli/server/types. Side B is much larger but noisier and riskier — it introduces cookie-based auth, new routes, and a substantial UI refactor while also committing an unrelated, out-of-place 'plan2.md' AI-chat transcript file that adds no real value and pollutes the repo.
B delivers lasting end-to-end product value by adding cookie sessions, web login/logout, /r/* room pages, thread listing/pagination under private scopes, and POST /post compose forms that rewrite the forum HTML layer for multi-room use. A is valuable but narrower: it mainly adds the CLI `room create` path and simplifies the model (drop ThreadVisibility, rooms HashMap→HashSet) plus test/docs updates, which is solid prep work rather than the broader usable feature surface in B.
Side B restores substantial end-user functionality by wiring browser authentication with session cookies, adding web posting, routing, and private-room UI with capability checks, enabling a complete web workflow instead of only CLI access. Side A adds a useful `room create` CLI command and simplifies the room model by removing unused visibility state, but much of the patch is API cleanup and documentation around a narrower feature.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_64faa3bee86f (tommy-mor)
Side A implements a substantial, functional feature: cookie-based session auth, private room routing/permissions, a web-based posting endpoint reusing the RPC core, and refactored thread navigation supporting both public and room scopes — real, load-bearing architecture. Side B is a much smaller UX polish (inline form morphing instead of redirect) that's useful but narrow in scope, and both patches include some noise (A's odd plan2.md prose file; B's AI co-author tag), but A's changes deliver far more lasting functional value.
A delivers lasting product surface: browser session cookies, web login/logout, /post ingest, and full private-room UI (ThreadNav, room pages, ACL-gated thread/post/expand views, compose forms) wired into routes and RPC. B only swaps choose-username redirects for fragment + Idiomorph morph and minor auth CSS—a narrow UX polish on one form.
Side A restores substantial web UI functionality by adding browser session cookies, login/logout flows, authenticated web posting, room-aware routing and permissions, private room pages, and reusable thread/navigation abstractions wired into the router. Side B is a focused UX improvement that changes the username form to return HTML fragments and updates the client-side form handler to morph form contents instead of redirecting, plus minor CSS additions.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_abd68b5e771a (tommy-mor)
B is a small, precise, correct bugfix that eliminates a real state-corruption bug (ghost items and falsely-marked voted pairs) and updates the test to verify the fix, with clear lasting value. A is a large feature/routing diff that also includes a nonsensical committed artifact (plan2.md, an AI chat transcript praising itself) which is noise rather than project value, undermining confidence in the commit's overall quality despite the real room-UI wiring work.
A ships lasting product surface: cookie/session auth, web login/logout, POST /post ingest, and multi-scope room/public thread UI (ThreadNav, ACL-gated room pages, compose forms, routes). B is a correct, necessary reducer fix (move zero-ratio return before ensure_item/voted_pairs) with tests, but it is a narrow integrity patch versus A’s end-to-end room UI and auth wiring.
Side A implements substantial new functionality: browser session cookies and login/logout flow, web posting, room-aware forum pages and routing, shared authentication via cookies or bearer tokens, and the necessary API/router integration to make the room UI work again. Although it also includes a large non-functional planning document, the code changes add enduring capabilities, whereas Side B is a focused correctness fix that moves the zero-ratio guard before `ensure_item`/`voted_pairs.insert` to prevent ghost items and invalid voted pairs, with an updated regression test.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_597d3f736194 (tommy-mor)
Side A adds substantial working functionality—cookie-based web sessions, private room UI/routing, a web posting form wired to the RPC layer—which is real, lasting product surface area, despite the odd inclusion of a non-functional AI-chat-transcript file (plan2.md) as noise. Side B is a legitimate but narrow bugfix to Clojure E2E test mocks (fixing regex splits, request-body reads, and null-state encoding), valuable for test reliability but limited in scope to test infrastructure rather than the product itself.
A restores lasting product surface: session cookies/web login-logout, POST /post ingest, home + private room indexes, and room-scoped thread/post views with ACL checks—real multi-tenant UI wiring. B only fixes test doubles (regex split, getRequestBody, null-safe state/token, try/catch) so Clojure E2E auth runs again; valuable but narrow test-infra vs. A’s durable app behavior.
Side A adds substantial, lasting application functionality: browser session cookies, login/logout flows, web posting, room-aware forum routing and authorization, reusable thread navigation, and new HTTP routes integrating the UI with existing RPC logic. Side B is a focused maintenance fix for the test infrastructure, correcting mock OAuth request parsing, redirect handling, form reading, null safety, and Playwright selectors so end-to-end auth tests work again, but it primarily improves testing rather than core product capabilities.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_477013996fa5 (tommy-mor)
Side A delivers substantial new functionality—cookie-based web sessions, a unified web posting handler, and full room-scoped thread routing/views—wiring the room UI into a real, working feature despite the noisy unrelated plan2.md file. Side B is a narrower, well-tested refinement (fullscreen vote-compare layout, vote sorting, preview morph) that improves UX polish but has much smaller architectural scope and lasting impact than A's session/room infrastructure.
Commit A adds lasting product infrastructure: browser session cookies, web login/logout, POST /post ingest, and full public/private room forum routing and pages (ThreadNav, ACL-gated room views, compose forms). Commit B improves one existing surface—vote-compare fullscreen chrome, edge-history sort/ratio alignment, and preview morph—plus CSS/tests, which is real but narrower UX polish rather than core wiring.
Side A delivers substantial functional infrastructure: it adds browser session-cookie authentication, login/logout flows, web posting that reuses the RPC layer, room-aware forum pages with access checks, new routes, and private-room navigation/composition support. Side B is a focused UI refinement for vote comparison—fullscreen layout, improved edge-history ordering/display, preview morphing after posting, and related CSS/tests—but its scope and long-term architectural impact are much smaller.
comparison · c_c124c217f89c (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side B implements substantial, working end-to-end functionality: cookie-based web sessions, room-scoped thread navigation, a unified web posting form wired to the existing RPC layer, and access-control checks for private rooms, all integrated into the router. Side A adds a genuinely useful background Reddit-fetch worker with rate-limiting and OAuth plus tests, but it includes unrelated scratch content (a speculative 'plan2.md' chat transcript in B is noise, but A's diff is cleaner overall); still, B's changes wire up more real, load-bearing UI/auth functionality that the app will depend on going forward, despite the plan2.md clutter.
B delivers lasting core product value by wiring browser sessions (HttpOnly slug_session cookies, /login|/logout, optional_principal), a real /post web ingest path reuse of RPC, and full private-room UI (ThreadNav scoping, /r/... room/thread/post/expand routes, grant checks, compose forms, home room list). A is a solid specialized feature (RedditBroker worker, OAuth, rate-limit/backoff, JSON parsers + tests replacing a stub) but narrower and less foundational than making multi-room forum usable in the browser; B’s plan2.md is pure noise and does not change the ranking.
Side A replaces a Reddit import placeholder with a working background fetch system: it adds a broker/worker, OAuth support, rate-limit handling, URL mapping, JSON parsing into EntityData, and integrates lazy fetching into state and page browsing. Side B delivers substantial UI wiring for browser sessions, room pages, posting, and routing, but it is primarily application interface expansion, while Side A establishes a reusable backend integration with deduplication, caching, and tests that adds enduring infrastructure.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_0c466eea1ed4 (tommy-mor)
Side A implements substantial real functionality: cookie-based web sessions, private room routing/authz, a compose/post form pipeline, and a full rewiring of forum HTML views to support both public and room-scoped threads—directly expanding the product's core feature set. Side B adds a useful but narrower dev-only offline linting/compiling tool (sorterc) for local .sorter validation, which is valuable tooling but affects a much smaller surface and doesn't touch the live product; A's changes also include a stray unpolished 'plan2.md' chat transcript which is noise, but the core code changes still outweigh B's scope in lasting user-facing value.
Side A ships lasting product surface: cookie-based web sessions, /login /logout /post, room-scoped ThreadNav, ACL-gated room pages/threads/compose forms, and full routing for public + private forum UI. Side B adds a useful but peripheral offline dev binary (sorterc + offline compile/scan) that does not change runtime behavior for users.
Side A adds substantial end-user functionality: browser session cookies, login/logout, authenticated web posting, room-aware thread views with access checks, new routes, and UI integration for private/public forums. Although it also includes a large non-functional planning document (`plan2.md`), the code changes reconnect the web UI and authentication flow, whereas Side B primarily adds an offline developer tool (`sorterc`) for compiling `.sorter` files and scanning `events.jsonl`, which is valuable but has a narrower operational impact.
comparison · c_cd965c070df3 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A is a focused, well-scoped bugfix that corrects Reddit child-import path wiring and unranked-child labels, with matching integration test updates verifying the fix. Side B is a large, sprawling feature dump (room UI, cookies, web posting) that also includes an out-of-place AI-generated markdown file (plan2.md) with no clear relevance to the codebase, indicating noise and lower signal-to-substance ratio despite its size.
B restores lasting product surface: cookie sessions (optional_principal, slug_session), /post web ingest, and scoped room/thread UI (ThreadNav, ACL-gated /r/… routes, compose forms)—foundational multi-tenant web behavior. A is a precise, correct fix (apply_entity_under_parent vs link_child+ensure_path, child_label titles, tighter SSE tests) but narrower in impact; B’s plan2.md is noise yet does not outweigh the real auth and room wiring.
Side A fixes concrete correctness issues in Reddit imports by adding `apply_entity_under_parent` to avoid incorrect `/comments/` path nesting, preserving imported entity data, and updating the ranking panel to display child titles from the global tree instead of raw IDs. It also updates the affected UI call sites and adds integration tests covering SSE updates, child fetches, and import behavior, whereas Side B is a large UI/auth expansion with substantial architectural churn and documentation but a generic commit message and less clearly bounded, correctness-focused value.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_57453fc5c6c0 (tommy-mor)
A wires up substantial new functionality (cookie-based web sessions, login/logout, web posting form, and full private-room browsing/posting routes via a new ThreadNav abstraction), which is architecturally significant lasting value despite the unfortunate inclusion of a noisy, unrelated plan2.md chat transcript. B is a smaller, cleanly scoped and well-tested feature (clipboard copy for garden rankings) with good test coverage but far less structural impact on the project than A's room/auth wiring, even though A's commit hygiene is worse due to the extraneous file.
Commit A delivers foundational product surface: cookie-based web sessions, /login|/logout|/post, ThreadNav, private room index/thread/post routes with ACL checks, compose forms, and home listing of granted rooms—real lasting UI architecture. Commit B only adds a focused CopyGardenRank clipboard helper, button markup, and tests on existing garden rankings, a useful but narrow UX increment.
Side A delivers substantial functional infrastructure: browser session cookies, login/logout flow, web posting that reuses the RPC path, private room pages with capability checks, room-aware routing, and the wiring needed to make the room UI usable again. Although it also includes an unrelated planning document, the code changes establish lasting authentication, routing, and room UI architecture, whereas Side B adds a useful but narrower feature—a clipboard copy action for garden rankings with supporting UI, tests, and markdown formatting.
comparison · c_48edc893c5b0 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A introduces a clean, well-tested, reusable form_template/ui_action abstraction (with substitution unit tests) and refactors web_post handlers into shared run_* functions cleanly used by both /post and /ui, reducing duplication. Side B does deliver real functional room/auth features but also includes an unrelated speculative AI-chat 'plan2.md' document (pure noise) and duplicates large chunks of forum.rs logic across public/room variants without much abstraction, making it noisier and less maintainable despite being larger.
Side B delivers the foundational room web UI: session cookies and optional_principal auth, /login|/logout, ThreadNav, room_page/room_thread_* routes with ACL checks, compose/new-thread forms, and home wiring—core lasting product surface. Side A is a solid follow-on (form_template $form holes, HtmlUiAction, shared run_* helpers, progressive + morph via POST /ui) but assumes and refines that earlier surface rather than establishing it.
Side A adds a reusable UI action architecture: a new `/ui` endpoint, `HtmlUiAction` parsing with JSON form-template substitution, shared `run_*` web handlers, and a `form_template` module with tests. Side B delivers substantial browser login, room routing, and cookie-based posting, but it also includes a large planning document and broad UI wiring; the more modular abstractions in A (shared handler extraction and generic form-template parsing) are likely to provide longer-term reuse across future UI features.
comparison · c_c6f5afec1d36 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side B wires up substantial, functional infrastructure: cookie-based web sessions/login/logout, private room browsing with capability checks, a web POST/ingest form, and route wiring for rooms and threads — real, working feature surface despite the stray plan2.md noise file. Side A is a focused, clean feature (pool-scoped voting) that is well-integrated but smaller in scope; B's changes enable broader, more foundational UI capability (auth, rooms, posting) even though it drags in an unrelated markdown artifact that slightly hurts its cleanliness.
B re-enables core multi-room HTML UI (ThreadNav abstraction, room index/thread/post/expand routes with ACL checks), browser session cookies + login/logout, and web ingest posting—foundational product surface. A is a useful but narrower incremental feature (optional pool param and next-pair scoping on an already-working vote path) with less architectural weight.
Side A implements a coherent new feature with lasting behavior changes: `/vote` gains pool-scoped navigation, optional `pool` query handling, automatic pair selection from a parent's children, UI links to 'vote on children', and propagation of pool context through post-success navigation. Side B mixes many unrelated changes, including a large checked-in design document (`plan2.md`) and broad UI/auth refactoring; while it contains useful work, the patch is diffuse and harder to attribute to a single focused, durable improvement than Side A's end-to-end voting enhancement.
comparison · c_509fc5155034 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
B ships a coherent, working feature set (cookie-based web login/logout, a generic POST /post handler wired through the existing RPC/ACL pipeline, and room-scoped thread pages reusing a new ThreadNav abstraction) that visibly increases end-user functionality and route coverage. A is a substantial internal refactor (ItemId/tree/journal rename plus reddit-url canonicalization) that is well-tested but mostly repackages existing scope logic without adding end-user-visible capability, and it also includes an unrelated, unpolished plan2.md prose file that adds no code value.
A replaces flat string scopes with a lasting hierarchical domain model (ItemId/GlobalTree/NodeState, path ensure/vote replay, journal worker, breadcrumbs/entity panel), which is core design rather than glue. B restores valuable room/web surfaces (session cookie auth, /r/* views, compose/post), but much of the diff is route/UI wiring plus a large unused plan2.md, so it is less foundational than A’s model change.
Side A introduces a substantive shift from flat string scopes to a canonical hierarchical `ItemId`/`GlobalTree` model, updates vote recording and replay to use that structure, adds path normalization, breadcrumbs, node persistence, and adapts the UI and parser around the new design. Side B mainly reconnects and expands the web UI (cookie-based browser sessions, room routes, posting forms, and routing), which is useful, but it is largely wiring on top of existing capabilities rather than introducing a comparably foundational data model and persistence change.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_effff18688f9 (tommy-mor)
Commit A delivers substantial new functionality: cookie-based web sessions, a login/logout flow, private room routing (/r/:short/:slug/...), room-scoped thread views with ACL checks, and a full web posting handler — real, functional feature additions. Commit B is a refactor that consolidates existing /post endpoints into a single /ui RPC dispatcher, which is reasonable cleanup but net-negative in some spots (e.g., includes stray irrelevant plan2.md-adjacent content isn't here, but B's diff shows leftover TODOs and duplicate JSON-building boilerplate), making it useful but comparatively lower-impact than A's feature buildout.
Side A lands the foundational room UI: cookie sessions, web login/logout, POST ingest, ThreadNav, ACL-gated private room pages/routes, and compose forms that wire the forum for multi-tenant use. Side B is mostly a downstream refactor that deletes web_post, collapses /post*/check/redact into /ui, and moves the same handlers plus form templates—useful consolidation but little new product capability relative to A's feature surface.
Side A delivers substantial new functionality: browser session cookies, login/logout flow, web posting, room-aware thread views, private room access checks, new routes, and reusable helpers such as `rpc_post_with_bearer`, fundamentally restoring and expanding the web UI. Side B is primarily a refactor that consolidates `/post`-style handlers into a single `/ui` dispatch (`resolve_web_session`, moving logic from `web_post.rs` into `ui_html.rs`) and updates forms/tests to use `__rpc__`, improving organization but adding comparatively little new behavior.
comparison · c_5e9a63e9d276 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A is a focused, coherent refactor that centralizes path/URL logic into a well-tested types module, preserving behavior (tests moved and passing) while reducing duplication and improving type safety across the codebase. Side B delivers real feature value (room UI wiring, session cookies, web posting) but also includes an unrelated, unpolished 'plan2.md' architecture essay committed to the repo, which is noise/spectacle rather than working code, slightly diluting the commit's substance despite the legitimate routing/auth additions.
B restores lasting product capability: HttpOnly session cookies, /login|/logout, ACL-gated /r/{short}/{slug} room index and thread/post/expand routes, compose forms, and POST /post that reuses rpc_post_with_bearer—making private rooms usable in the browser. A is a solid but secondary refactor that moves canonicalize_* / CanonicalItemUrl into slug-types and swaps string helpers for GardenItemUrl/ForumThreadUrl newtypes without adding behavior.
Side A performs a substantial architectural refactor by moving canonicalization, path parsing, and room-aware URL generation into a shared `types::paths` module, replacing ad hoc string helpers with strongly typed `GardenItemUrl`, `ForumThreadUrl`, and `TildeOntologyPath` throughout the API and shared types. This centralizes path semantics, reduces duplication across server and shared crates, and makes JSON/RPC interfaces type-safe, whereas Side B mainly wires browser UI features (cookie login, room routes, posting handlers) and adds a planning document without a comparable improvement to the project's core design.
comparison · c_06fce70179bc (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A implements a coherent, testable improvement (SSE-based entity fetch with proper job-result signaling, worker instrumentation, and updated tests/JS), even though it removes a few existing unit tests. Side B mixes legitimate new room/auth/session functionality with a large amount of noise, including committing an AI-generated design-discussion markdown file (plan2.md) that has no code value and clutters the repo, which hurts its overall lasting value despite the real feature work.
Side B permanently wires multi-room UI (ThreadNav abstraction, /r/* routes with ACL checks, compose/post forms via rpc_post_with_bearer, cookie sessions + login/logout) turning public-only threads into a functional web product; Side A mainly refactors one Reddit fetch path to SSE (new fetch/ mod, oneshot results, JS consumer) which improves polish but is narrower and more internal.
Side B substantially expands core web functionality by wiring browser session cookies into authentication, adding login/logout, enabling authenticated web posting through the existing RPC layer, and introducing room-aware routing with access control for private forums. Side A usefully refactors Reddit entity fetching into an SSE-based streaming flow with progress/error events and modularizes fetch UI, but it is more localized, whereas B establishes broader application capabilities that affect authentication, routing, and posting across the project.
comparison · c_6209cd238b3f (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
Side A is a focused, well-tested improvement to a CLI tool: it fixes scan's misleading skip semantics, adds a real feature (compile --ingest single-event replay), surfaces detailed parse errors, and includes new unit tests plus docs. Side B is a large, unfocused commit that bundles legitimate web auth/session/room routing changes with a nonsensical committed AI-chat transcript (plan2.md) as if it were project documentation, indicating sloppy scope and lower lasting engineering value despite more lines changed.
B restores core product surface area: browser session cookies, login/logout, web ingest posting, and full public/private room thread navigation with ACL checks and compose forms, turning unwired server routes into a usable room UI. A is a solid but narrower tooling fix—fast parse-only scan, richer parse_error reporting, and compile --ingest—valuable for offline logs yet secondary to shipping the multi-room web experience.
Side A delivers focused, durable improvements to the offline tooling: it replaces an expensive replay-based scan with a fast parse-only pass, exposes detailed DSL parse errors, adds targeted `compile --ingest` support for replaying a single event with prior state, and includes tests and CLI/documentation updates. Side B adds substantial UI and authentication functionality (browser session cookies, room pages, posting routes), but it also includes a large non-code planning document and broad architectural churn, making the lasting value of the individual commit less concentrated than A's clear performance and debugging improvements.
comparison · c_8c6a5e2e4a54 (tommy-mor) vs c_9608dc0d38ab (tommy-mor)
Side A implements substantial, working functionality: cookie-based web session auth, a full web posting flow, and room-scoped thread views/navigation wired into real routes, which restores/expands actual product surface area. Side B fixes a genuine RwLock deadlock bug and adds useful test hardening (timeouts, log-file redirection), which is valuable but narrower in scope; A's changes deliver more lasting end-user-facing capability despite including an odd unrelated plan2.md file.
Side A delivers substantial lasting product value by implementing cookie-based web sessions, a full web POST ingest path, ThreadNav abstraction, room/private thread pages with ACL checks, compose forms, and complete routing—making rooms usable in the browser. Side B is a precise and necessary RwLock deadlock fix plus test harness hardening, but narrower in scope than the UI and auth surface A adds.
Side A adds substantial end-user functionality: browser session cookies, login/logout flows, web posting, room-aware thread pages, routing, permission-aware UI, and supporting APIs, effectively wiring a complete web forum interface back into the application. Side B is a valuable but narrowly scoped maintenance change that fixes potential `RwLock` deadlocks by shortening lock lifetimes and adds regression tests and timeout/logging improvements, but its lasting impact is much smaller than the new capabilities introduced in Side A.