comparison · c_32dfae0385a4 (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Commit B introduces a substantial new URL canonicalization and traversal subsystem, including graph-based routing, parsing utilities, a graph builder with validation, integration into the module tree, and an extensive suite of unit and integration tests. It adds significant new functionality and infrastructure. Commit A is a small cleanup that removes client-side form validation attributes from a single HTML form, with minimal scope. The overall contribution of B is orders of magnitude larger.
Commit B introduces an entire URL canonicalization system with multiple new modules, hundreds of lines of logic, graph traversal, parsing, and extensive tests. Commit A is a tiny removal of attributes from a form. The scope and impact of B vastly outweigh A.
Side B introduces a substantial new URL canonicalization subsystem: multiple new modules (graph, graph_builder, parse, registry tests), ~1000+ lines of production and test code, a DFA-based semantic graph, generic fallback logic, and extensive unit and integration tests covering Reddit, YouTube, and generic sites. Side A is a tiny ‘nit’ change removing form attributes (a small simplification of a single HTML form). The scope, architectural impact, and test coverage of B overwhelmingly exceed A.
comparison · c_9bced108c8aa (tommy-mor) vs c_a154a1e4f1df (tommy-mor)
Commit A introduces a substantial new URL canonicalization subsystem: a semantic graph with traversal logic, a graph builder with validation, URL parsing and normalization, generic fallback behavior, breadcrumb generation, support for Reddit and YouTube URL patterns, and an extensive test suite covering parsing, canonicalization, traversal, security-related encoding, and regressions. It adds multiple new modules and hundreds of lines of functionality. Commit B is a small UI cleanup that removes a preview section from the HTML output. While potentially useful, it is a minor deletion compared with the broad architectural feature and test coverage added in Commit A.
Commit A introduces an entire URL canonicalization system: DFA-based graph traversal, parsing utilities, a builder with validation, generic fallback logic, and extensive tests covering many edge cases. It’s a large, foundational feature addition. Commit B simply removes a small HTML section, which is minor in scope and impact.
Side A introduces a comprehensive URL canonicalization system with multiple new modules (graph, builder, parser), extensive logic, and a large suite of unit and end-to-end tests—over a thousand lines of substantive functionality. Side B merely removes a small HTML preview section (a few lines). The scope, complexity, and impact of Side A far exceed Side B.
comparison · c_32dfae0385a4 (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side A is a trivial one-line removal of an unused data-check-rpc attribute, essentially cosmetic cleanup. Side B introduces a substantial, well-tested URL canonicalization/breadcrumb system (graph DFA engine, builder with validation, robust parsing/normalization, and extensive unit/integration tests) that provides real, lasting functionality to the project.
Side B adds a full URL canonicalization subsystem (semantic DFA graph, builder, parser, generic fallback, and extensive tests) that delivers lasting product behavior for Reddit/YouTube/generic URLs and breadcrumbs. Side A only deletes a few unused data-check-* attributes from a form—a trivial nit with negligible lasting design or bugfix value.
Side B introduces a substantial new URL canonicalization subsystem: a semantic graph with traversal, parsing, canonical URL generation, breadcrumbs, graph validation via a builder, and extensive unit/end-to-end tests covering Reddit, YouTube, and generic URLs. Side A only removes client-side form validation attributes (`data-check-action`/`data-check-rpc`) from a single HTML form, a small behavioral tweak with far less enduring architectural impact.
Side A merely removes the `data-check-action` and `data-check-rpc` attributes from a form, likely reducing client-side validation without adding functionality. Side B introduces an entire URL canonicalization system (graph traversal, parsing, builder, and extensive tests), providing substantial new capabilities and long-term architectural value.
Side B introduces an entire semantic URL canonicalization system (new graph, parser, builder, registry tests) with ~800+ lines of substantive logic and extensive tests covering Reddit/YouTube normalization, breadcrumbs, tracking stripping, and security encoding. Side A merely removes a `data-check-*` attribute block from a form in `forum.rs`, a small UI tweak with minimal architectural impact.
comparison · c_9bced108c8aa (tommy-mor) vs c_a154a1e4f1df (tommy-mor)
Side A introduces a substantial, well-tested URL canonicalization system (graph traversal, builder with validation, parsing, tracking-param stripping) with extensive test coverage, representing real lasting design work. Side B is a trivial 4-line deletion removing a dead DOM section, providing minimal but real value with no accompanying tests or explanation of impact.
Side A adds a full URL canonicalization stack (DFA graph, builder with link validation, parse/normalize, generic fallback) plus extensive regression tests for Reddit/YouTube equivalence and breadcrumbs. Side B only deletes a small unused vote-compare preview DOM block, a minor UI cleanup with little lasting design impact.
Side A introduces a substantial new URL canonicalization subsystem: parser, semantic graph with validated builder, traversal logic, canonical URL and breadcrumb generation, generic fallback behavior, and extensive unit/end-to-end tests covering Reddit, YouTube, aliases, query normalization, and regressions. Side B only removes a small HTML preview section from the vote comparison page, deleting a UI block without adding comparable infrastructure or functionality.
Side A introduces an entire URL canonicalization system (graph traversal, parsing, normalization, generic fallback) with extensive tests, adding substantial long-term functionality. Side B only removes a small DOM section (`vote-compare-preview-wrap`) with no evident architectural or bug-fixing impact.
Side A introduces an entire URL canonicalization subsystem (graph.rs, graph_builder.rs, parse.rs) with DFA-based traversal, host normalization, tracking-parameter stripping, generic fallback logic, and extensive unit and end-to-end tests. Side B merely removes a small HTML preview section (`vote-compare-preview-wrap`) from a template without adding new functionality. The architectural addition and comprehensive test coverage in A provide far greater lasting value.
comparison · c_cf0a514b261a (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side B introduces a substantial, well-tested URL canonicalization subsystem (graph traversal DFA, builder with validation, parsing, tracking-param stripping, generic fallback) with extensive unit and integration tests covering reddit/youtube edge cases—clear lasting functional value. Side A is a small, correct cleanup removing dead code and updating a test comment/assertion, which is valid but minor in scope and impact compared to B's substantial new capability.
A only deletes a few lines of already-dead zero-ratio guard code and retunes one test; B introduces a full URL canonicalization subsystem (graph DFA, builder, parser, registry tests) with real design and broad coverage for Reddit/YouTube/generic URLs and breadcrumbs.
Side B adds a substantial new URL canonicalization subsystem: a graph/DFA-based resolver with parsing, graph builder validation, generic fallback logic, Reddit/YouTube canonicalization, breadcrumb generation, and extensive unit/end-to-end tests covering normalization, encoding, aliases, and regressions. Side A only removes a now-redundant zero-ratio guard from `apply_vote` and updates the test expectations to reflect that zero-weight edges are skipped later while items are still registered.
comparison · c_597d3f736194 (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side B introduces a substantial, well-tested URL canonicalization/graph system (graph traversal engine, builder with validation, parser, and extensive regression/equivalence tests) that provides real lasting architecture for URL normalization. Side A is a smaller, useful bugfix (regex split, response body stream fix, error handling, selector correctness) that restores test infrastructure but has narrower, more localized impact confined to test mocks.
B introduces a full semantic URL graph (DFA traversal, GraphBuilder, parse/normalize, canonicalization and breadcrumbs) with broad production impact and extensive tests, whereas A only repairs test OAuth mocks and E2E helpers (query split, request body, null/state guards, selectors). B’s lasting product design outweighs A’s valuable but scoped test-infrastructure bugfixes.
Side B introduces a substantial new URL canonicalization subsystem with a graph-based traversal engine, parsing and normalization logic, a graph builder with validation, generic fallback behavior, and extensive unit/end-to-end tests covering Reddit, YouTube, and generic URLs. Side A is a valuable targeted test infrastructure bugfix—correcting mock OAuth request handling, redirect behavior, null safety, and Playwright test selectors—but its scope is limited to restoring E2E test reliability rather than adding a lasting project capability.
comparison · c_11ce057e37af (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side B introduces a well-structured, testable URL canonicalization graph (DFA traversal, generic fallback, builder with build-time validation) plus extensive matrix/edge-case tests, giving durable infrastructure for URL normalization. Side A is also solid (deterministic block tokens, prose ref tokenizer, stricter DSL body rules) but is more narrowly scoped and partly overlaps with fixing self-inflicted regressions (e.g., requiring braces around fenced bodies that previously worked without them), whereas B adds a genuinely new, reusable subsystem with strong safety guarantees (percent-encoding, tracking-param stripping).
A delivers integrated, lasting product behavior: deterministic typed block masking, a real prose item-ref tokenizer (with newline/punctuation and code-fence rules), stricter braced-body DSL parsing, and HTML garden linkification for ~/‑/ and raw URLs wired through external_resolver and breadcrumbs. B adds a large, well-tested URL DFA/canonicalization subsystem, but it is mostly isolated greenfield scaffolding under a vague commit with less demonstrated end-to-end impact than A’s cross-layer contract and UX changes.
Side A delivers integrated parser and rendering improvements: it adds deterministic typed block masking, a prose item-reference tokenizer that correctly avoids code fences and trims URL punctuation, enforces braced DSL bodies, updates HTML linkification to support raw URLs/external references, and adjusts serialization accordingly, all backed by focused tests. Side B introduces a substantial URL canonicalization graph and parser framework with extensive tests, but it is largely new infrastructure whose lasting value depends on broader integration, whereas Side A directly fixes parsing correctness and user-visible behavior across existing code paths.
comparison · c_9bced108c8aa (tommy-mor) vs c_4772ee88dbe3 (tommy-mor)
Side A introduces a complete, well-architected URL canonicalization subsystem (DFA-based graph, builder with build-time link validation, parser, generic fallback) backed by an extensive, meaningful test suite covering edge cases, equivalence classes, and regressions—this is substantial, reusable, correctly designed functionality. Side B is a smaller, more mixed change: it removes dead demo-counter code (good cleanup) and adds an async settlement/caching layer for votes, which is a reasonable concurrency improvement but narrower in scope and less self-contained than A's new subsystem.
A adds a full semantic URL DFA (graph + builder + parse + extensive tests) that correctly canonicalizes Reddit/YouTube aliases, strips tracking, encodes safely, and supplies breadcrumbs—foundational lasting design. B removes demo-counter scaffolding and adds a useful settlement worker/cache, but that is narrower architectural cleanup on an existing path rather than comparable new capability.
Side A introduces a substantial new URL canonicalization subsystem: a semantic graph/DFA with a declarative graph builder, URL parsing and normalization, generic fallback logic, breadcrumb generation, and extensive tests covering Reddit, YouTube, and generic URLs. Side B makes useful architectural cleanup by removing the demo counter, adding an asynchronous settlement worker and cached ranking path, but much of the patch is refactoring and feature removal, whereas Side A adds a lasting core capability with validation and broad test coverage.
comparison · c_55f1cdf12e22 (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side A delivers a complete, integrated feature (invite links) spanning CLI, auth flow, RPC, reducer state, room timeline, and an end-to-end babashka test, giving real user-facing access-control capability. Side B is an impressively tested but narrow URL-canonicalization module limited to reddit/youtube normalization, valuable but smaller in scope and less clearly load-bearing for core product functionality.
A ships an end-to-end invite/ACL product path (mint RPC, /join redemption into OAuth, multi-cap RoomGrant, RoomAudit, CLI, and invites integration tests) that permanently expands how private rooms are used. B is a strong, well-tested URL DFA/canonicalization module, but it is scoped to one subsystem and does not match A’s cross-stack access-control impact.
Side A delivers a substantial end-to-end feature: shareable room invites with redemption integrated into OAuth, new RPCs for minting invites and auditing grants, CLI support, server routes, state management, API/type updates, and an integration test covering the full lifecycle. Side B introduces a well-tested URL canonicalization graph and parsing framework, but it is largely an internal infrastructure refactor with limited visible functionality compared with the broad user-facing access-control workflow added in Side A.
comparison · c_9bced108c8aa (tommy-mor) vs c_5cd3e5917d2f (tommy-mor)
Side B is a substantive architectural fix: it removes duplicate/inconsistent storage (EntityStore + projection), stops persisting full Reddit payloads in the append-only log (likely a real API/ToS and storage-growth concern), and replaces it with ephemeral projection content plus a TTL eviction task — all while keeping votes/tree structure intact and updating every touched module and test coherently. Side A is a well-tested new feature (URL canonicalization graph) but is additive and isolated, whereas B simplifies and corrects a core data-lifecycle problem across the whole system.
B makes a lasting architectural correction by deleting EntityStore/EntityImported, stopping raw Reddit payloads from entering the durable event log, writing display fields only as TTL-evicted projection cache, and keeping NodeEnsured/votes/structure as the sole logged facts—directly reducing retention/compliance risk and long-term log bloat. A adds a solid, well-tested URL DFA/canonicalization graph (parse, builder, Reddit/YouTube rules, generic fallback), but that is additive domain logic rather than a core persistence-model fix.
Side B makes a durable architectural change by removing persistent storage of Reddit API payloads (`EntityStore` and `EntityImported` events), replacing it with ephemeral projection-only content, TTL-based eviction, and a simplified replay path that logs only `NodeEnsured` structure. Side A introduces a substantial URL canonicalization graph with parsing, generic fallbacks, builders, and extensive tests, but it is largely additive functionality, whereas Side B simplifies core persistence semantics and better aligns the storage model with long-term policy and replay behavior.
comparison · c_45659f04aa7c (tommy-mor) vs c_9bced108c8aa (tommy-mor)
Side A replaces a fragile GitHub-API-only discovery mechanism with a deterministic, multi-repo, replay-safe git discovery system (patch identity dedup, config digests, atomic ledger writes) backed by extensive real-git unit and stateful hypothesis tests plus updated integration tests, fixing real correctness/security gaps (e.g. git-replace spoofing, cherry-pick double-payment) in a payout-critical system. Side B adds a reasonably well-tested URL canonicalization graph for reddit/youtube, which is solid but scoped to a narrower, less foundational feature with lower stakes than the ledger/discovery core touched by A.
A replaces brittle GitHub API polling with deterministic multi-repo git mirroring, immutable discovery snapshots, patch-identity dedup, and strong all-or-nothing/adversarial tests—core lasting design for attribution and emissions. B adds a solid URL DFA/canonicalization stack with good tests, but it is a narrower application feature, not foundational project infrastructure.
Side A replaces GitHub API polling with a deterministic multi-repository Git discovery system that records immutable discovery snapshots, deduplicates commits and cherry-picks, adds concurrency-safe snapshot persistence, integrates discovery into emissions, and includes extensive integration, property-based, and stateful tests. Side B introduces a well-tested semantic URL graph and canonicalization framework for Reddit/YouTube plus generic URL handling, but it is a more isolated feature, whereas Side A fundamentally changes attribution, replayability, and correctness of the project's core ownership allocation pipeline.
comparison · c_9bced108c8aa (tommy-mor) vs c_df12ba3b70a8 (tommy-mor)
Side B fixes a real production bug (empty /-/ external garden index due to bogus parent), refactors external_resolver into a resolvers/ module with typed GithubImportCard rendering, wires it through vote-compare and item pages, and adds integration/unit tests plus CSS. Side A adds a new URL-canonicalization graph engine with extensive tests but is a standalone/net-new feature not shown to fix any existing defect or integrate with the rest of the app in this diff, making B's change more clearly load-bearing and battle-tested.
Side A introduces a full semantic URL graph (DFA traversal, builder validation, parse/canonicalize/breadcrumbs, generic fallback) with broad, lasting design and dense unit coverage for Reddit/YouTube equivalence. Side B fixes a real empty /-/ index bug via external_root_host_items and adds structured GitHub import cards plus render hooks, but much of the diff is a module move/refactor of existing resolver code plus CSS/layout polish.
Side A introduces a new URL parsing and semantic graph infrastructure with DFA-based traversal, canonicalization, generic fallback behavior, a validated graph builder, and extensive tests covering Reddit, YouTube, encoding, breadcrumbs, and parsing. Side B contains a real bug fix for the external garden index and adds GitHub resolver card rendering plus a module refactor, but much of its patch reorganizes existing resolver code while adding a narrower feature set.
comparison · c_9bced108c8aa (tommy-mor) vs c_7a129e904906 (tommy-mor)
B ships production deployment infrastructure (Dockerfile, fly.toml, CI workflow) plus real correctness fixes (git credential injection for private mirrors, object-hash dedup by location instead of by ref, requiring OPENROUTER_API_KEY only when contested, safer SSE client removal) and a functional live-audit dashboard with tests. A is a clean, well-tested URL canonicalization graph, but it's a narrower, self-contained feature versus B's broader operational and correctness improvements that let the whole system actually run and be observed in production.
A introduces a full semantic URL DFA (graph engine, builder with link validation, parsing/normalization, and dense behavioral tests) that is core lasting product design. B mainly ships production wiring (Docker/Fly/CI), multi-repo config, and an audit/watch SSE UI—valuable operationally but more scaffolding and presentation around an existing emission pipeline than new foundational logic.
Side A adds a substantial new URL canonicalization subsystem: a graph-based traversal engine with declarative graph builder, URL parsing/normalization, generic fallback logic, breadcrumbs, and extensive tests covering Reddit, YouTube, encoding, query stripping, and traversal behavior. Side B mainly adds deployment infrastructure, production configuration, a live monitoring UI/SSE audit stream, and some robustness improvements (e.g. GitHub token support and deduplicated object verification), which are valuable operational enhancements but less foundational to the project's core behavior than the new canonicalization engine.
comparison · c_9bced108c8aa (tommy-mor) vs c_afa638171cf7 (tommy-mor)
Side B implements a real feature (Reddit OAuth linking with UUID-canonical identity, conflict handling, private linked-provider display, batch-consistent trust weight updates) plus corresponding test infrastructure updates, delivering concrete user-facing and security-relevant behavior. Side A adds a well-tested URL canonicalization graph, which is solid engineering but a narrower, self-contained utility with less integration risk and lower overall product impact than B's auth/identity change.
Side A introduces a complete, lasting URL subsystem (DFA graph traversal, GraphBuilder validation, host/path absorb patterns, generic fallback, encode-safe canonicals, and dense equivalence/breadcrumb tests across Reddit/YouTube). Side B is a solid identity/auth extension (UUID-only principal, multi-provider link semantics, Reddit OAuth paths, pending-weight batching) but largely builds on the existing OAuth/session model rather than a new core domain design.
Side A introduces a new URL parsing and semantic graph framework with generic canonicalization, breadcrumb generation, graph validation via a builder, host/query normalization, and extensive tests. Side B adds useful OAuth functionality (Reddit provider support, UUID-centered account linking, projection fixes, and UI updates), but it extends an existing authentication system, whereas Side A establishes a broader reusable architecture for URL canonicalization that is likely to underpin future URL rules and behavior.
comparison · c_9bced108c8aa (tommy-mor) vs c_48aeaf9b52c3 (tommy-mor)
Side B fixes a real, well-diagnosed correctness bug in the core ranking algorithm (bipartite Markov chain non-convergence for star topologies), grounds the fix in the actual Rank Centrality paper, and adds targeted regression tests (Rust unit test plus Clojure end-to-end fixtures) that verify the fix. Side A is a large, mostly speculative new URL-canonicalization subsystem with extensive self-testing, but it's net-new architecture rather than a fix to an existing defect, making its lasting necessity less certain than B's precise, well-justified bugfix.
A adds a full URL canonicalization subsystem (DFA graph, builder with link validation, parse/normalize/tracking-strip, generic fallback) plus broad regression coverage for Reddit/YouTube equivalence and breadcrumbs. B is a critical but localized correctness fix in Rank Centrality (degree-based d_max) with solid star/cycle fixtures; high leverage, yet narrower lasting surface than A’s new architecture.
Side A introduces an entire URL canonicalization subsystem: a graph-based traversal engine, parser, graph builder with validation, generic fallback behavior, Reddit/YouTube canonicalization, breadcrumbs, and extensive unit/integration tests. Side B is a valuable correctness fix that changes the Rank Centrality implementation from weight-sum normalization to degree-based d_max and adds regressions for the oscillation bug, but its scope is a targeted algorithm correction rather than the addition of a substantial new project capability.
comparison · c_9bced108c8aa (tommy-mor) vs c_73d485b8085b (tommy-mor)
A lands a complete, carefully designed URL semantic graph (DFA traversal, absorb edges, builder validation, parse/normalize, generic fallback) with dense regression tests for Reddit/YouTube equivalence and encoding safety—core lasting domain logic. B’s OAuth/session/pseudonym gating and identity projection are valuable product work, but a large share of the patch is moving durable out-of-tree (mass deletion + lockfile/git dep churn) rather than net new in-repo design.
comparison · c_9bced108c8aa (tommy-mor) vs c_77729db919ab (tommy-mor)
Side B performs the foundational integration: it introduces the url_rules engine/registry, switches ItemId to store fully-qualified canonical URLs, and updates every call site across the codebase (event_log, journal, pair, parser, projection_apply, reddit.rs, reducer, render, state) plus docs and a replay script, fixing real correctness issues (scheme-qualified IDs, parent/breadcrumb logic). Side A largely re-implements the same URL-parsing/canonicalization logic as a DFA graph with extensive tests, but it only touches files inside url_rules and isn't wired into the rest of the system, making its practical impact less certain and partly redundant with the machinery B already built.
A delivers a complete, tested semantic URL graph (DFA traversal, absorb edges, parent chains, builder validation, generic fallback) that is the lasting core design for canonicalization and breadcrumbs. B introduces the initial engine/registry and necessary ItemId→full-URL wiring, but a large share of its diff is mechanical https:// id renames and call-site churn around a simpler transform pipeline that A supersedes.
Side A introduces a substantially richer URL canonicalization architecture: a graph-based traversal engine with declarative graph builder, parsing layer, generic fallback, breadcrumb generation, context-aware canonicalization for Reddit and YouTube, and extensive validation/tests. Side B mainly integrates URL canonicalization into the wider codebase and migrates IDs to full HTTPS URLs, but much of its functional value depends on the underlying URL rules that Side A implements.
comparison · c_ef71be9831cc (tommy-mor) vs c_9bced108c8aa (tommy-mor)
A is a clean internal refactor (GroupState -> ScopeVotes) that removes cached edge state in favor of deriving it on demand, improving simplicity but is mostly mechanical renaming/restructuring of existing logic. B introduces a new, well-tested semantic URL graph (DFA traversal, builder with validation, generic fallback, extensive equivalence-class and regression tests) that adds real, durable functionality for canonicalizing and breadcrumbing URLs across reddit/youtube/generic sites, representing more net new capability with strong test coverage.
Commit A redesigns the core vote model (GroupState → ScopeVotes), dropping maintained edges/idx maps/rollback paths so ranking and pair logic derive weights from uuid_votes on demand across reducer, ranking, storage, and UI. Commit B adds a solid URL DFA/canonicalization stack with tests, but it is new peripheral infrastructure rather than a lasting simplification of the project's central ranking state.
Side A implements a substantial architectural refactor: it replaces cached `GroupState` with a simpler `ScopeVotes` model, derives ranking edges and connected components on demand, updates persistence and ranking algorithms, and adapts callers and tests throughout the project. Side B adds a sizable URL canonicalization/graph subsystem with extensive tests, but it is largely an isolated new feature, whereas Side A simplifies core state management and removes redundant cached data in a way that affects the project's central ranking pipeline.
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_9bced108c8aa (tommy-mor) vs c_2595b6007624 (tommy-mor)
Side A adds a self-contained, well-designed URL canonicalization module (DFA graph + builder pattern) with exhaustive, meaningful test coverage and clear separation of concerns, representing focused lasting value. Side B is a sprawling refactor that collapses many typed REST endpoints into one large, undifferentiated RPC dispatcher (rpc.rs, ~1300 lines) and renames thread/room concepts throughout the codebase—functionally useful (rooms/capabilities) but mostly high-churn mechanical restructuring with reduced modularity and higher review/maintenance risk.
B’s commit changes the product’s core model (room vs thread/tag, ScopeId::Room, grants keyed by room) and replaces many REST handlers with a single batched RPC surface wired through CLI, reducer, events, and tests—foundational multi-room architecture. A adds a high-quality, well-tested URL DFA/graph module, but it is a focused subsystem rather than a platform-wide lasting redesign; much of B’s size is necessary consolidation, not mere churn.
Side A adds a substantial new URL canonicalization subsystem: a semantic graph/DFA with declarative graph builder, URL parsing and normalization, generic fallback behavior, breadcrumb generation, encoding/security handling, and extensive unit and integration tests for Reddit, YouTube, and generic URLs. Side B is a large architectural refactor that consolidates many REST endpoints into an RPC layer and renames thread concepts to rooms while preserving existing behavior, but much of the patch is migration and code movement rather than introducing comparable new end-user functionality.