comparison · c_df12ba3b70a8 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side B contributes a larger architectural change. It introduces a new workspace crate (`durable`) implementing RocksDB-backed persistent collections, integrates it into the server with a disk-backed entity store for Reddit payloads, changes replay to stream the event log line-by-line to reduce startup memory, updates startup/state management, and adds extensive documentation, examples, tests, and build integration. These changes affect persistence, memory usage, and project structure across many components. Side A is also a significant contribution: it fixes the external garden index, refactors the resolver system into a dedicated module, adds GitHub import cards with rendering support, updates vote-compare rendering, styling, and tests. However, its scope is primarily a feature/UI and resolver refactor, whereas Side B introduces broader infrastructure with long-term impact on storage and replay behavior.
Commit B introduces a substantial architectural change: a new durable storage crate backed by RocksDB, integration into the server, streaming event log replay to reduce memory usage, and an entity store that moves large payloads off-heap. This impacts persistence, startup performance, and system design across multiple modules. In contrast, Commit A mainly refactors the resolver system, fixes a bug in external indexing, and adds GitHub card rendering and UI improvements. While A is sizable and user-facing, B delivers deeper infrastructure changes with broader long-term impact.
Commit B introduces a new durable storage subsystem (a full RocksDB-backed workspace crate), integrates it into the server for off-heap entity storage, and refactors event log replay to stream line-by-line—significantly improving architecture, scalability, and startup memory behavior. It spans many files, adds substantial functionality (new crate, APIs, examples, docs), and changes core persistence paths. Commit A is a solid feature/refactor (GitHub resolver modularization, rich cards, external index fix, tests, CSS), but its impact is primarily at the application/UI and resolver layer. B represents a deeper infrastructural enhancement with broader long-term impact.
comparison · c_2dc96aace098 (tommy-mor) vs c_8fdd9b86c77f (tommy-mor)
Commit A introduces substantial new functionality and architectural changes. It adds a new RocksDB-backed durable storage crate, moves raw Reddit entity payloads out of in-memory structures into persistent storage, changes replay to stream the event log line-by-line to reduce startup memory usage, updates application state and Reddit import paths to use the new storage layer, adds tests, and integrates the new crate into the workspace and build. These changes materially affect performance, persistence, memory usage, and project architecture. Commit B is a small cleanup that removes a few UI elements and adjusts CSS gradients for the voting slider, with only minor presentation impact.
Commit A introduces a substantial new subsystem: a full RocksDB-backed persistence layer (the new `durable` crate with maps, vectors, nested collections, tests, docs, and examples), integrates it into the server (entity storage, event replay streaming, state changes), and refactors core data flow. This is a major architectural and performance improvement. Commit B is minor UI/CSS cleanup and removal of small elements, with negligible impact on functionality.
Commit A introduces a substantial architectural change: adds a full RocksDB-backed `durable` workspace crate (with maps, vectors, nesting, tests, docs, examples), integrates it into the server, offloads entity payloads to disk, and rewrites event log replay to stream line-by-line for reduced RAM usage. This spans many new modules and core state changes. Commit B contains only minor UI/CSS tweaks and small HTML removals. The scope, complexity, and impact of A vastly exceed B.
comparison · c_df12ba3b70a8 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
A fixes a genuine bug (the external garden root listing was always empty) and cleanly refactors the GitHub resolver into a structured, tested module with real UI/test coverage, all without new heavy dependencies. B vendors an entire third-party 'durable' RocksDB crate wholesale (README, docs, LICENSE, examples, benchmarks, its own Cargo.lock) just to back a simple string->string entity cache, adding a large, mostly irrelevant dependency footprint (rocksdb/bindgen/clang) disproportionate to the actual need, even though the underlying entity_store/streaming-replay idea has some merit.
B’s streaming event-log replay and EntityStore offload of Reddit JSON out of GlobalTree into RocksDB are lasting architectural fixes for startup RAM and scale, whereas much of A is a useful bugfix (bogus https://. external roots) plus presentational GitHub card rendering/CSS after a resolver move. B’s concrete value is the wire-up (entity_store, replay API, reducer no longer holding entity_raw), not the bulk of the vendored durable examples/docs noise.
Side B introduces a substantial architectural improvement by moving large entity payloads out of in-memory structures into a RocksDB-backed `EntityStore` and changing event log startup from loading the entire log to streaming replay via `EventLog::replay`, reducing memory usage and improving scalability. Side A contains a real bug fix for the external garden index (`external_root_host_items`) and adds richer GitHub import card rendering with resolver modularization, but much of the patch is UI, rendering, and refactoring rather than a foundational runtime improvement.
Side B introduces a new RocksDB-backed `durable` storage layer, moves large JSON payloads out of memory into `EntityStore`, and replaces `load_all` with streaming `replay`, directly improving scalability and startup memory. Side A mainly restructures resolvers and adds GitHub card rendering/UI plus a bugfix, which is valuable but more feature/UI-oriented than foundational system improvements.
Side B introduces a new `durable` workspace crate with RocksDB-backed persistent collections (DurableMap/Vec), integrates an `EntityStore` to move large JSON payloads off-heap, and replaces `load_all` with streaming `replay` to reduce startup RAM—substantial architectural improvements. Side A mainly refactors the GitHub resolver into a `resolvers/` module, adds rich card rendering and CSS, and fixes the external index root logic—valuable UI and organization work but less foundational than adding durable storage and streaming log replay.
comparison · c_2dc96aace098 (tommy-mor) vs c_8fdd9b86c77f (tommy-mor)
Side A implements a substantive architectural change: it vendors a RocksDB-backed durable crate, moves large Reddit JSON payloads out of the in-memory GlobalTree into an EntityStore, and switches event-log loading from load-all-into-memory to a streaming line-by-line replay, with accompanying tests and integration updates across reddit.rs, reducer.rs, state.rs, and event_log.rs. Side B is a small cosmetic 'nits' commit that removes two UI elements and flips CSS gradient directions on vote sliders, with no functional or architectural impact.
Side A delivers a lasting architectural fix: Reddit entity JSON moves out of in-memory GlobalTree into a RocksDB-backed EntityStore, plus streaming event-log replay that cuts startup RAM. Side B only removes minor vote-page markup and flips slider gradient CSS—pure UI nits with negligible lasting impact.
Side A introduces substantial new functionality: it adds a durable RocksDB-backed storage crate, moves raw Reddit entity JSON out of in-memory state into an EntityStore, changes replay to stream the event log line-by-line to reduce startup memory, and updates application logic and tests to use the new persistence model. Side B is limited to UI cleanup and CSS gradient tweaks plus removal of a few navigation/label elements, with no comparable architectural or functional impact.
Side A introduces a substantial new persistence layer (new `durable` crate with RocksDB-backed collections), adds `EntityStore`, and refactors event replay to streaming (`replay` replacing bulk `load_all`), fundamentally improving memory usage and architecture. Side B only removes minor UI elements and tweaks CSS gradients, with no impact on core functionality.
Side A introduces a full `durable` workspace crate (RocksDB-backed `DurableMap`/`DurableVec` with tests, examples, and docs), adds an `EntityStore` to offload raw JSON from memory to disk, and replaces bulk `load_all` with streaming `replay` to reduce startup RAM—substantial architectural improvements affecting persistence and memory usage across server modules. Side B only removes minor HTML text and tweaks CSS gradient directions, providing cosmetic changes with no structural impact.
comparison · c_7ec67b9cef2c (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side B is a real, working feature: it vendors a durable RocksDB crate, moves entity JSON out of the in-memory tree into on-disk storage, switches event-log loading to a streaming replay API, and updates reducer/state/reddit modules plus tests to match, directly cutting startup RAM and adding persistence infrastructure. Side A is only a planning document (plan.md) plus a thin, largely unused RouteContext wrapper that still delegates to the old ThreadNav/CanonicalItemUrl string logic, contributing no functional change or bugfix to the codebase.
B delivers a real lasting architecture fix: offloads heavy Reddit entity JSON from the in-memory GlobalTree into a RocksDB-backed EntityStore, streams event-log replay line-by-line to cut startup RAM, and wires those changes through reducer/reddit/state. A only adds a thin RouteContext newtype plus a plan.md checklist for a future ItemId migration, with almost no shipped behavior change.
Side B makes lasting architectural changes: it introduces a RocksDB-backed `durable` workspace crate, adds an `EntityStore` to move raw Reddit JSON off-heap, changes reducer state to stop storing raw payloads in memory, and rewrites event log replay to stream events line-by-line instead of loading the entire log. Side A mainly adds a detailed migration plan document plus a thin `RouteContext` wrapper and re-export, which is useful guidance but contributes little functional behavior compared with B's concrete storage and startup-memory improvements.
comparison · c_bc8c17a00ed7 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side A is a small, correct, well-tested bugfix that prevents pinned Reddit posts from polluting listings, with a focused unit test. Side B vendors an entire speculative 'durable' crate (with generated Cargo.lock noise, READMEs, RFCs, example programs) and reworks storage/replay in a way that is far more invasive and mostly unproven infrastructure rather than a lasting, necessary fix; most of its diff is boilerplate/dependency churn rather than reviewed, load-bearing logic.
B delivers lasting architectural value by offloading entity JSON from in-memory GlobalTree to a RocksDB-backed EntityStore, streaming event-log replay to cut startup RAM, and wiring those paths through reducer/state/reddit. A is a correct but narrow filter (skip stickied/pinned children) plus one unit test, and does not change core scalability or persistence design.
Side B introduces substantial lasting infrastructure: it adds a new RocksDB-backed `durable` workspace crate, moves raw Reddit entity payloads out of in-memory state into a persistent `EntityStore`, and changes event-log replay to stream entries one at a time, reducing startup memory while preserving replay semantics with new tests. Side A is a correct, targeted bug fix that skips stickied/pinned Reddit posts during subreddit import and adds a regression test, but its scope and long-term impact are much smaller than the storage and replay architecture changes in Side B.
comparison · c_28dfd8015c8a (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side B makes a real architectural change: it introduces a RocksDB-backed entity store, replaces in-memory JSON storage with disk-backed storage, and switches event-log loading to a streaming replay to cut startup RAM, all wired through reducer/state/reddit modules with tests updated accordingly. Side A is a small, sensible but low-stakes config simplification (collapsing two kaocha suites into one glob pattern) that saves future test-registration effort but has negligible functional impact compared to B's storage/performance redesign, despite B's diff being noisy with vendored lockfiles/docs.
B adds a durable RocksDB-backed entity store, streams event-log replay so startup does not hold the whole log in RAM, and removes bulky Reddit JSON from GlobalTree—core runtime architecture. A only rewrites tests.edn ns-patterns to a single auto-discovered suite, a small config convenience with no product behavior change.
Side B introduces substantial new functionality: a RocksDB-backed durable storage crate, a new `EntityStore` that moves raw entity JSON out of in-memory state, and a streaming `EventLog::replay` API that replays events line-by-line instead of loading the entire log into memory, with corresponding integration changes across the server. Side A is a useful maintenance improvement that replaces hand-maintained Kaocha namespace lists with a single auto-discovered `^test\..+` suite, reducing future configuration work, but its impact is much narrower.
comparison · c_978e283f2229 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
B delivers genuine architectural value: entity JSON is offloaded to a RocksDB-backed store, the event log now replays line-by-line instead of loading everything into memory, and reducer/state code is refactored to match, addressing real scalability/startup-RAM concerns backed by new tests. A is a useful but lower-stakes CLI UX reshuffle (ingest→forum post, forum→forum list/show) that also silently drops XML escaping in post output, a minor regression. B's downside is the large amount of vendored 'durable' crate boilerplate (docs, examples, duplicate Cargo.lock) that isn't strictly needed, but the core server-side change is more substantive and lasting than A's renaming-focused patch.
B delivers lasting infrastructure value by vendoring a RocksDB-backed durable collections crate, moving heavy Reddit entity JSON out of the in-memory GlobalTree into entity_db, and replacing load-all event replay with line-at-a-time streaming to cut startup RAM. A is a useful but narrower CLI reshape (ingest → scoped forum post/list/show, docs/tests updates) that mostly reorganizes the command surface without comparable core durability or scalability impact.
Side B introduces substantive infrastructure: a new RocksDB-backed `durable` workspace crate with persistent collections, moves raw entity JSON into a dedicated `EntityStore`, and changes event log startup from loading all events into memory to streaming replay via `EventLog::replay`, reducing memory usage and improving scalability. Side A primarily restructures the CLI and documentation (renaming `ingest` to `forum post`, adding subcommands, updating help text and tests) with only minor behavioral adjustments, making it far less impactful in long-term project architecture.
comparison · c_7ec4b410de02 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
B delivers a real architectural improvement—offloading Reddit JSON payloads from the in-memory GlobalTree to a RocksDB-backed EntityStore and switching event-log loading to a streaming replay—backed by new tests (entity_store, event_log, state) that materially reduce startup RAM, a genuine lasting fix. A is a clean, well-scoped UI feature (clickable unpin icon reusing the existing set_garden_pin flow) with matching CSS and a solid browser test, but it's a much smaller, more contained change. B's patch is bloated with vendored crate boilerplate (duplicate Cargo.lock, README, RFC docs, unused examples) that is mostly noise, but the core server-side integration is a nontrivial, correct systems improvement that outweighs A's narrower scope.
B delivers lasting infrastructure: vendoring a RocksDB-backed durable crate, moving full Reddit entity JSON out of in-memory GlobalTree into entity_db, and streaming event-log replay line-by-line to cut startup RAM—plus wiring EntityStore through import/replay paths. A is a focused UX polish (clickable unpin in ranked child rows with CSS/tests) that reuses an existing set_garden_pin flow and does not change core storage or scalability.
Side B introduces substantial architectural changes: it adds a new RocksDB-backed `durable` workspace crate, moves raw entity payloads out of the in-memory tree into a persistent `EntityStore`, changes reducer/state/reddit flows to use it, and replaces whole-log loading with streamed event replay to reduce startup memory, along with integration tests. Side A is a well-scoped UX improvement that makes pinned icons clickable to unpin via the existing `/ui` flow and adds browser coverage, but its impact is localized compared with B's lasting storage and replay infrastructure.
comparison · c_b00c261f06c2 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side B introduces a real architectural improvement (offloading Reddit JSON payloads to RocksDB via a new durable crate, streaming event-log replay, and updated tests/integration) that reduces startup RAM and improves persistence design, despite heavy vendored lockfile noise. Side A is a legitimate but much smaller bugfix/UI polish for vote-compare highlighting and slider gradient logic, valuable but far less impactful than B's structural storage change.
B delivers lasting architecture: a real EntityStore on RocksDB, removal of full Reddit JSON from GlobalTree, and streaming event-log replay that cuts startup RAM—fundamental scalability. A is a solid but narrower UI fix (per-group rank gradients, center-anchored vote sliders, polarity tests) that improves correctness of highlighting without changing the system's capacity or data model.
Side B makes a substantial architectural improvement by introducing a RocksDB-backed `durable` workspace crate, moving raw entity JSON out of `GlobalTree` into a persistent `EntityStore`, and replacing event-log bulk loading with streaming `replay()` to reduce startup memory usage. Side A is a focused UI correctness fix that changes rank highlighting to be computed per ranking group instead of globally and adds regression tests, but its impact is much narrower than the persistence and scalability changes in Side B.
comparison · c_4772ee88dbe3 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side B delivers a substantive architectural change (offloading Reddit JSON payloads to a RocksDB-backed entity store, streaming event log replay to cut startup RAM) with tests validating persistence and replay correctness, despite noisy vendored Cargo.lock churn. Side A mostly removes a demo feature and adds a settlement worker/cache that duplicates ranking logic without clear necessity, offering less lasting architectural value relative to its complexity.
Side A delivers lasting core design: a settlement worker that batches vote appends + ranking recompute off the request path, plus a ranked_items_cached fast path that lets ranking_panel/home use read locks instead of write locks, while cleanly excising the demo-counter scaffolding. Side B’s entity offload and streaming replay are real scalability wins, but most of the patch is a large newly-vendored durable crate (docs, examples, proptests, lockfile noise) whose full surface is only lightly used by EntityStore.
Side A introduces substantive architectural improvements to the running server: it adds a settlement worker that batches vote persistence and ranking recomputation, introduces cached ranking reads (`ranked_items_cached`) so HTTP handlers can use read locks instead of write locks, and removes an obsolete demo counter feature. Side B adds a large new `durable` workspace crate and streams event-log replay while moving raw entity payloads into RocksDB, but much of the patch is dependency, documentation, examples, and vendored infrastructure, making the immediately integrated project impact less concentrated than A's core runtime and concurrency improvements.
comparison · c_2dc96aace098 (tommy-mor) vs c_77729db919ab (tommy-mor)
Commit A delivers a substantive architectural change (offloading entity payloads to RocksDB via a new durable crate, plus streaming event-log replay), reducing startup RAM and adding real tests/persistence behavior, even though much of the diff is vendored lockfile/dep noise. Commit B is a large URL-canonicalization refactor (adding a rules engine and rewriting ItemId to always include scheme) which is reasonably designed but is mostly mechanical test-string updates and a schema-migration risk without corresponding data migration tooling beyond a README note, making its net lasting value comparatively smaller despite similar diff size.
A delivers lasting architecture: entity JSON moves off the in-memory tree into RocksDB via EntityStore, and event_log gains true line-at-a-time replay so startup no longer materializes the full log. B’s url_rules module and https-canonical ItemId are correct, focused design, but they mainly re-shape identity strings and call sites rather than changing capacity or persistence the way A does.
Side A introduces substantial new infrastructure: a RocksDB-backed `durable` workspace crate, an `EntityStore` that moves raw Reddit JSON off-heap, and a streaming `EventLog::replay` API that replays one line at a time to reduce startup memory, with corresponding integration into state loading and reducers. Side B mainly refactors URL canonicalization by introducing `url_rules`, switching to canonical `https://` identifiers, and updating parsing/tests, which is useful but narrower in long-term architectural impact than the persistence and replay redesign in Side A.
comparison · c_11ce057e37af (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side A is a focused, well-tested fix improving DSL/link tokenization correctness (deterministic tokens, prose URL boundaries, code-fence handling) with clear new tests validating behavior. Side B vendors a large speculative 'durable' crate (with docs, examples, benchmarks, RocksDB bindgen deps) whose core motivation—reducing startup RAM—is undermined by still reading the entire event log and calling flush_wal on every single operation, adding heavy build complexity (clang, RocksDB) for a dubious IO-bound win, though it also includes a useful minor line-by-line replay refactor mixed into the noise.
B delivers lasting architectural value by offloading Reddit entity JSON from in-memory GlobalTree into a RocksDB-backed EntityStore and replacing full event-log loads with line-at-a-time replay, directly cutting startup RAM; A is a solid but narrower UX/parser improvement (deterministic BlockMasker tokens, prose ItemRef tokenization, braced body enforcement) that mainly extends garden linkify behavior.
Side A delivers focused, lasting functionality: it adds a prose item-reference tokenizer that correctly skips code fences, trims trailing punctuation, supports raw URL references, enforces braced DSL item bodies instead of standalone code fences, and updates HTML linkification to use the tokenizer, all backed by targeted tests. Side B mixes a few meaningful runtime changes (streaming event-log replay and moving entity payloads to a RocksDB-backed store) with a very large amount of vendored crate, lockfile, documentation, examples, and generated project scaffolding, making the substantive project improvement much smaller relative to the patch size.
comparison · c_2dc96aace098 (tommy-mor) vs c_97611919bf0b (tommy-mor)
Side A delivers a working, tested feature (RocksDB-backed entity payload offloading and streaming event log replay) with new module, real tests, integration test updates, and a genuine startup-RAM benefit; the vendored 'durable' crate is a real dependency addition despite the noisy Cargo.lock diffs. Side B is a large but purely mechanical rename/refactor (CanonicalItemUrl -> ItemId) that touches many files without adding new capability, and much of the diff is boilerplate churn plus deletion of a stale plan.md. A's change is more load-bearing (actual memory/behavior improvement) versus B's cosmetic-but-wide type rename.
Side A lands a lasting architectural win: offloading Reddit entity JSON into a RocksDB-backed EntityStore, vendoring the durable crate, and replacing bulk load_all with line-at-a-time event_log.replay so startup no longer holds the full log and payloads in RAM. Side B is a broad but mostly mechanical CanonicalItemUrl→ItemId refactor (plus deleting plan.md); it improves type structure without the same operational/scalability impact.
Side A delivers concrete infrastructure improvements: it introduces a reusable `durable` RocksDB-backed storage crate, moves raw Reddit entity JSON out of the in-memory tree into an `EntityStore`, and replaces full event-log loading with line-by-line replay to reduce startup memory usage. Side B is a broad `CanonicalItemUrl` → `ItemId` refactor with routing and API updates that improves type structure, but it is primarily an internal representation change, whereas A directly adds durable storage and measurable runtime behavior improvements.
comparison · c_2dc96aace098 (tommy-mor) vs c_7a129e904906 (tommy-mor)
Side A vendors an entire generic 'durable' RocksDB collections crate (with unused Entry/nested-collection API, README, docs, LICENSE, benchmarks, examples) just to back a simple string->string JSON store, adding large dependency/boilerplate weight disproportionate to the actual server-side change (entity_store.rs + streaming replay), much of which reads as generated filler. Side B's patch is tightly scoped to real, used functionality: CI/CD deploy pipeline, Dockerfile/fly.toml for production, a working live SSE audit dashboard, and concrete correctness fixes (require OPENROUTER_API_KEY for contested rankings, dedupe redundant git-object hashing, GITHUB_TOKEN auth), all backed by updated tests exercising the new behavior.
A’s lasting value is architectural: entity JSON moves out of in-memory GlobalTree into a RocksDB-backed EntityStore, and event_log gains true line-at-a-time replay so startup no longer materializes the full log/payloads in RAM—concrete reducer/state/reddit call-site changes that change scalability. B is real product/ops work (Fly/Dockerfile/CI deploy, /watch audit SSE, production repo/contributor roots, emission retry), but it is mostly deployment, UI, and configuration on an existing process rather than a deeper data-plane redesign.
Side A makes substantive architectural changes: it introduces a RocksDB-backed durable storage crate, moves large Reddit JSON payloads out of the in-memory tree into a persistent entity store, and replaces whole-log loading with streaming event replay to reduce startup memory, updating replay and integration tests accordingly. Side B primarily adds deployment infrastructure, a live dashboard, SSE status/audit UI, and CI/CD configuration, which improves operations and visibility but has much less impact on the project's core functionality and architecture.
comparison · c_2dc96aace098 (tommy-mor) vs c_48aeaf9b52c3 (tommy-mor)
Side B is a small, well-reasoned correctness fix to the core ranking algorithm (switching to degree-based d_max per the cited Rank Centrality paper), backed by targeted regression tests and fixtures that clearly demonstrate the bug and fix. Side A vendors an entire speculative 'durable' RocksDB crate (with huge generated Cargo.lock, docs, examples, README) mostly unused by the actual integration beyond a single EntityStore wrapper, adding large maintenance surface and dependency risk for a modest gain (streaming replay), diluting its real signal-to-noise ratio despite legitimate startup-RAM improvements .
B is a precise, lasting correctness fix to Rank Centrality (degree-based d_max per Negahban–Oh–Shah) that stops bipartite oscillation on star topologies and ships targeted Rust/Clojure regression tests. A mainly adds a large vendored durable/RocksDB stack plus streaming event replay to cut RAM, which is valuable infrastructure but mostly new dependency surface and off-heap storage; B’s concentrated algorithm fix and tests outweigh A’s broader but noisier change for enduring project value.
Side A makes a substantive architectural change by introducing a RocksDB-backed `EntityStore` for raw Reddit payloads, removing large JSON blobs from the in-memory tree, and replacing full event-log loading with line-by-line replay via `EventLog::replay`, reducing startup memory usage. Side B is a high-quality targeted fix—changing the Rank Centrality normalization to degree-based `d_max` and adding regression tests for the oscillation bug—but its scope is narrower than A's persistent storage and replay redesign.
comparison · c_2dc96aace098 (tommy-mor) vs c_2595b6007624 (tommy-mor)
Side B is a large but coherent, directly-relevant refactor (RPC batch API, room/capability model, CLI and test updates) that touches only code the project actually ships and runs. Side A's real value—streaming event-log replay and offloading Reddit JSON out of GlobalTree—is genuine but small, and it's buried under a massive vendored 'durable' crate (docs, examples, benchmarks, nested-collection abstractions, duplicate Cargo.lock) that adds heavy build dependencies (rocksdb/bindgen/clang) and speculative generality far beyond what storing a JSON blob requires, which reads as generated noise rather than necessary code.
B consolidates the HTTP surface into a batch RPC API and reworks the reducer so rooms own permissions while forum threads are scoped separately—an architectural backbone change that multiplies private-room support through CLI, events, HTML, and tests. A meaningfully cuts peak RAM by streaming event replay and parking Reddit JSON in RocksDB, but most of its diff is vendoring the large durable crate rather than net new domain logic.
Side A implements concrete infrastructure changes with lasting operational impact: it introduces a RocksDB-backed `EntityStore`, moves raw Reddit JSON out of in-memory state, updates reducers to store only derived views, and replaces full event-log loading with streaming replay to reduce startup memory. Side B is a broad API and architecture refactor (RPC batching, room-scoped commands, endpoint consolidation, reducer changes), but much of the patch is interface reshaping and endpoint migration rather than delivering a similarly direct improvement to correctness or resource usage.
comparison · c_2dc96aace098 (tommy-mor) vs c_af08bd851e49 (tommy-mor)
Commit A delivers a substantive architectural change—offloading large Reddit JSON payloads to RocksDB via a new durable crate and switching event replay to a streaming line-by-line model, both of which reduce startup RAM and are backed by tests—representing real, lasting infrastructure value despite the vendored crate bloat. Commit B is a solid but comparatively smaller refactor (vote-compare morphing via Idiomorph, pair-selection bridging logic, ItemId normalization) that improves UX and correctness but is narrower in scope and less foundational than A's storage/replay overhaul.
A’s lasting impact is architectural: it moves full Reddit entity JSON out of GlobalTree into a RocksDB-backed EntityStore and replaces load-all event startup with line-at-a-time replay, directly cutting RAM and decoupling derived views from raw payloads. B adds real product value (vote-compare morph UX, bridge-preferring pair selection, ItemId::from_storage), but it is incremental UI/ranking polish versus A’s foundational storage and startup design.
Side A introduces substantial infrastructure: a new RocksDB-backed `durable` workspace crate, an `EntityStore` that moves raw Reddit JSON off-heap, updates the reducer to keep only derived entity data, and replaces startup `load_all` with streaming event-log replay to reduce memory usage. Side B mainly refactors the vote UI by adding compare-page morphing, pair-selection helpers, and ID normalization improvements, which are useful but much narrower in long-term architectural impact.
comparison · c_2dc96aace098 (tommy-mor) vs c_ca9169f732b8 (tommy-mor)
A adds a substantial, tested infrastructure change (RocksDB-backed entity storage, streaming event replay) that reduces startup RAM and cleanly separates raw payloads from in-memory tree state, verified by new unit/integration tests. B is a smaller but real bugfix (mandatory OAuth with retry-on-401/403 and better error truncation) that fixes a genuine production reliability issue, but its scope and lasting architectural impact are narrower than A's.
A introduces lasting architectural value by offloading bulky Reddit entity JSON from the in-memory GlobalTree into a RocksDB-backed EntityStore (via the vendored durable crate) and by replacing full event-log materialization with true streaming replay, which directly cuts startup RAM; the integration touches entity_store, event_log, reducer, state and reddit paths with accompanying tests. B is a correct, necessary production bugfix (force OAuth when credentials exist, refresh on 401/403, avoid the public www.reddit.com block page, plus a fly.toml pin) but is narrower in scope and impact.
Side A makes a substantial architectural change: it introduces a RocksDB-backed `durable` workspace crate, moves raw Reddit entity JSON out of the in-memory tree into a persistent `EntityStore`, and replaces startup's `load_all()` with streamed event-log replay via `EventLog::replay`, reducing memory usage while preserving functionality. Side B is a valuable operational bugfix that requires OAuth when configured, refreshes tokens after 401/403, and avoids fallback to blocked public endpoints, but its scope is limited compared with Side A's long-term persistence and scalability improvements.
comparison · c_2dc96aace098 (tommy-mor) vs c_94135a1c4c58 (tommy-mor)
Side A vendors a large, mostly generated durable/ crate (docs, examples, lockfiles) and swaps entity storage to RocksDB, but this was later superseded by pinning durable as an external git dep in Side B, making much of A's vendored code and its own Cargo.lock churn transient scaffolding. Side B fixes a real security bug (votes silently falling back to an anonymous actor instead of failing closed), gates a mock-OAuth backdoor behind an explicit test-only env var, adds Secure cookie flags and open-redirect hardening, and pins the durable dependency to an immutable rev rather than a floating branch — all small, precise, and durable improvements to correctness and security posture.
A delivers lasting core architecture: entity JSON moves out of GlobalTree into RocksDB via EntityStore, event log replay streams line-by-line (cutting startup RAM), and apply_entity paths stop retaining full payloads in memory. B is high-value but narrower—fail-closed vote auth, mock-OAuth gating, Secure cookies, return-to hardening, and nav alias—important security/UX fixes that do not reshape the data plane like A.
Side A introduces substantial infrastructure: a new RocksDB-backed `durable` workspace crate, moves raw Reddit entity JSON out of the in-memory tree into an `EntityStore`, and replaces startup loading with line-by-line event log replay to reduce memory usage while updating reducers and tests accordingly. Side B improves security by making vote authentication fail closed, adding Secure-cookie handling, redirect sanitization, and pinning a dependency revision, but these are comparatively localized hardening changes rather than a broad architectural improvement.
comparison · c_2dc96aace098 (tommy-mor) vs c_e2ee16c7ada5 (tommy-mor)
Side A vendors a whole speculative RocksDB abstraction crate (with docs, examples, benchmarks, licenses) plus a huge dependency/Cargo.lock churn, but the actual integration into the server is thin (one entity_store wrapper) and the streaming replay refactor is modest; much of the diff is generated noise rather than durable design. Side B is a focused, coherent refactor that removes ad-hoc identity canonicalization scattered across events/reducer, introduces clear identity.rs/canonical_path.rs modules, fixes wire-format inconsistencies (@ handling), and updates tests/CLI/docs consistently, yielding a cleaner, more correct codebase with less risk and less bloat.
Commit A delivers lasting architectural value by introducing a full RocksDB-backed durable crate, offloading entity JSON payloads out of the in-memory GlobalTree into EntityStore, and replacing bulk event load with true line-at-a-time replay to cut startup RAM. Commit B is a worthwhile but narrower refactor that extracts canonical_path/identity modules and enforces naked stored-form identities on the wire; it improves modularity and API consistency without adding comparable runtime capability or resource wins.
Side A introduces substantial new infrastructure: a new RocksDB-backed `durable` workspace crate, an `EntityStore` that moves raw Reddit JSON out of in-memory state, and streaming event-log replay via `EventLog::replay`, reducing startup memory while preserving functionality. Side B is a worthwhile architectural refactor that separates path normalization and identity parsing, enforces stored-form identities without `@`, and updates APIs accordingly, but it primarily reorganizes validation and representation rather than adding comparable runtime capabilities.
comparison · c_2dc96aace098 (tommy-mor) vs c_c0df72aee6da (tommy-mor)
Side A delivers substantive architectural work: vendoring a durable RocksDB crate, moving entity payloads off the in-memory tree into disk storage, and refactoring event log replay to stream line-by-line, all with tests and real integration changes across reducer/state/reddit modules. Side B is a small, focused XSS fix (HTML sanitization via ammonia) that is valuable but narrow in scope compared to A's broader storage/performance redesign with new modules, tests, and cross-cutting changes.
Commit A delivers lasting architectural value by introducing a RocksDB-backed durable store for entity payloads (removing them from in-memory GlobalTree) plus streaming event-log replay, which directly cuts startup RAM and scales the core data path; the large patch is mostly the purpose-built durable crate plus focused server integration. Commit B is a correct, necessary XSS fix via ammonia sanitization at render time, but it is a narrow, localized hardening change compared with A’s systemic design improvement.
Side A makes a substantial architectural improvement by introducing a RocksDB-backed `durable` crate, moving raw Reddit entity payloads out of the in-memory tree into an `EntityStore`, and replacing event-log startup loading with streaming replay via `EventLog::replay`, reducing memory use and changing persistence design across the project. Side B is a valuable security fix—adding `ammonia` sanitization before rendering `selftext_html` and testing that scripts/event handlers are stripped—but it is a localized rendering hardening compared with A's broad, lasting infrastructure changes.
comparison · c_afa638171cf7 (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side A ships a coherent, working feature (Reddit OAuth linking, UUID-canonical identity, trust-weight logic, privacy-preserving account page) with accompanying tests and mock server updates, all real project logic. Side B is dominated by vendoring an entire unrelated third-party 'durable' crate (with its own README, RFC docs, examples, licenses, and a huge generated Cargo.lock) plus a modest, legitimate refactor (entity payloads to RocksDB, streaming event replay); the actual server-side diff is reasonable but is buried in enormous non-project noise inflating the patch without proportional lasting value. A's diff is entirely purposeful application code and tests, giving cleaner, more reviewable ownership value than B's mix of a real improvement plus vendored boilerplate.
B’s lasting value is the architectural shift that keeps full Reddit entity JSON out of the in-memory GlobalTree (new EntityStore on RocksDB via workspace durable) and replaces load_all with line-at-a-time event_log.replay, which directly cuts startup RAM and scales the core data path. A is strong product work (Reddit OAuth, UUID-canonical linking, private linked-providers UI and trust-weight/batch fixes), but it extends auth rather than changing how the system stores and reconstitutes principal data; B’s huge line count is largely the vendored durable crate, yet the server-facing storage/replay change is the more foundational, durable improvement.
Side A delivers a substantial architectural change to identity management: it makes UUIDs the canonical identity, refactors OAuth into a provider-agnostic linking flow, adds Reddit OAuth, prevents linking conflicts, exposes linked providers privately, and fixes trust-weight updates during projection replay with tests. Side B includes a useful startup-memory optimization by streaming event-log replay and moves entity payloads into a RocksDB-backed store, but much of the patch is vendoring a new `durable` crate, dependency churn, examples, and documentation whose lasting value is less directly tied to the application's core behavior.
comparison · c_9bced108c8aa (tommy-mor) vs c_2dc96aace098 (tommy-mor)
Side A adds a self-contained, well-tested URL canonicalization/breadcrumb graph with a validated builder DSL and extensive unit tests, directly improving app correctness with minimal footprint. Side B vendors a large speculative 'durable' RocksDB crate (with vendored Cargo.lock, docs, examples, licenses) mostly unrelated to app needs, and the actual integration change (moving entity JSON out of GlobalTree into RocksDB, streaming replay) is a reasonable but much noisier, heavier, and riskier change (native deps, build complexity, lock files) relative to its incremental value.
Side A ships a complete, purpose-built URL semantic graph (DFA + parse + builder + large focused tests) that is core product behavior for canonicalization and breadcrumbs. Side B’s lasting substance is real (entity payloads off heap into RocksDB and streaming event-log replay) but the bulk of the patch is vendoring an entire durable crate with locks, docs, examples, and LICENSE noise, so less of the diff is tight project value per line.
Side A adds a substantive new URL canonicalization subsystem with a graph-based traversal engine, parsing/normalization, generic fallback, builder validation, and extensive tests covering Reddit, YouTube, breadcrumbs, encoding, and regressions. Side B introduces a durable RocksDB crate and starts offloading entity payloads plus streaming event-log replay, but much of the patch is new library scaffolding, documentation, examples, and dependency/vendor churn relative to the smaller set of integrated behavioral changes.
comparison · c_2dc96aace098 (tommy-mor) vs c_25172cf8caa0 (tommy-mor)
Side A vendors an entire speculative RocksDB-backed collections crate (with docs, examples, benches, vast Cargo.lock churn) mainly to move Reddit JSON out of memory, adding large maintenance surface for a modest, somewhat premature startup-RAM optimization. Side B is a small, focused bugfix that removes shared sentinel delegate IDs which were silently corrupting multi-user authorship/voting (AgentBound collisions), with clear tests proving the real bug and its fix, delivering concrete correctness value with minimal footprint.
Side A introduces a real architectural win: vendoring a RocksDB-backed durable crate, moving Reddit entity JSON off the in-memory GlobalTree into entity_db, and streaming events.jsonl line-by-line so startup no longer loads the full log. Side B is a necessary but narrow correctness fix—dropping shared WEB_BROWSER_AGENT/INVITE sentinels so multi-user browser votes no longer collide on AgentBound—without comparable lasting systems impact.
Side A makes a substantial architectural change: it introduces a new RocksDB-backed `durable` workspace crate, moves raw Reddit entity JSON out of in-memory state into a persistent `EntityStore`, and replaces full event-log loading with streaming replay to reduce startup memory usage. Side B fixes a real correctness bug by removing shared browser sentinel delegates (changing browser sessions to use `Option<String>` delegates and adding integration tests), but its impact is much narrower than A's persistent storage and replay redesign.
comparison · c_2dc96aace098 (tommy-mor) vs c_0a9a8eab32ba (tommy-mor)
B is a tight, correct bugfix: it replaces timestamp-based feed cutoffs with ingest-position anchors (fixing same-millisecond races and clock rollback) and adds permission-aware room visibility, backed by focused integration tests proving the exact failure modes it fixes. A vendors an entire new 'durable' crate wholesale—including marketing README, RFC docs, motivation.md, multiple examples, and a duplicated Cargo.lock—so most of its bulk is generated/boilerplate noise, with the actual server-side change (entity_store.rs, streaming replay) being comparatively small and unproven by tests for the RAM-reduction claim. Per the rubric favoring precise, necessary fixes over diffuse churn, B delivers more verified, lasting correctness per line changed.
Commit A adds a full RocksDB-backed durable crate, moves Reddit entity JSON off the in-memory GlobalTree into entity_db, and streams event-log replay line-by-line, which is a lasting architectural fix for startup RAM and payload retention. Commit B correctly stabilizes feed catch-up on ingest order and hardens multi-user private-room visibility with solid tests, but it is a targeted correctness fix in one API path rather than a foundational storage redesign.
Side A implements substantial infrastructure changes: it introduces a RocksDB-backed `durable` workspace crate, moves raw Reddit entity JSON out of the in-memory tree into a persistent `EntityStore`, and replaces whole-file event loading with streaming replay to reduce startup memory while updating reducers and tests accordingly. Side B is a solid correctness improvement—changing feed catch-up to use durable ingest order instead of timestamps, enforcing room visibility during feed generation, and adding regression tests—but it is a targeted behavioral fix rather than the broad persistence and scalability architecture added in Side A.