comparison · c_5cd3e5917d2f (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Commit A delivers a coherent, project-wide architectural change with clear functional impact. It removes persistent storage of Reddit payloads from the event log and entity store, introduces ephemeral projection caching with TTL-based eviction, simplifies replay by logging only structural events, updates the journal and projection pipeline, adjusts storage schema versions, and adds or updates tests to validate the new behavior. This is a significant redesign touching many core subsystems while preserving consistency.
Commit B is very large in raw size, but much of it appears to be an initial dump of files, design notes, and even pasted terminal output rather than a polished, integrated feature. It mixes utility scripts, planning documents, large parser and reducer implementations, and accidental artifacts. While it contains substantial code, the commit message ('init seed') and the presence of copied terminal sessions reduce its effective contribution as a clean, production-ready change. Overall, A represents the more impactful and deliberate contribution.
Commit A is a substantial architectural change: it removes the persistent entity store and shifts Reddit content to an ephemeral, TTL-based projection model. This touches many core subsystems (events, journal, projection, storage schema, reducer, state management, Reddit ingestion flow), introduces new eviction logic, simplifies event semantics, and updates tests accordingly. It meaningfully changes system behavior, data lifecycle, and compliance with external API constraints. In contrast, Commit B is an initial seed adding assorted scripts, experimental modules, and large standalone components (parser, ranking, etc.), but without clear integration into the existing system. While large in size, B is more of a scaffold or dump of new files, whereas A delivers a cohesive, impactful refactor to the live architecture.
Commit A is a large, architectural change that removes the EntityStore and EntityImported event, redesigns Reddit ingestion to keep content ephemeral, updates projection logic, storage schema, eviction background task, tests, and multiple modules. It meaningfully alters data modeling, persistence guarantees, and replay semantics across the server. Commit B is an initial seed adding assorted new files (scripts, parser, ranking, reducer, UI actions, notes), but as presented it’s largely a bulk code drop without clear integration changes in this diff context. The systemic impact and careful refactor in A outweigh B’s scaffold-style addition.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_45659f04aa7c (tommy-mor)
Commit A introduces a large amount of foundational functionality across the project: new UI plumbing, voting pages, ranking and reducer logic, parser infrastructure with extensive tests, form templating, UI actions, scripts, and seed/design files. Although parts of it appear to include accidental terminal captures and draft material, it establishes major subsystems that the project builds on. Commit B is a high-quality, substantial feature that replaces GitHub API polling with deterministic multi-repository Git discovery, adds replayable attribution, locking, extensive real-Git and property-based tests, and improves emission logic. It is a deeper improvement to one important area, but its scope is narrower than the broad foundational code introduced in A.
Commit A bootstraps a substantial portion of the project: core parser architecture (~1800 lines), ranking algorithms, reducer state management, UI actions, frontend JS plumbing, and extensive tests. It establishes foundational systems across multiple layers (backend logic, UI interaction, testing). Commit B introduces a sophisticated and well-engineered git discovery and attribution system with strong testing, but it is a focused feature within an existing system. While complex and impactful, it is narrower in scope compared to the broad foundational groundwork laid in A.
Side A is effectively a foundational project seed: it introduces large core modules (parser ~1800 LOC, reducer ~800+ LOC, ranking ~400 LOC, vote UI, form handling, UI actions), extensive tests, scripts, and multiple new subsystems. It establishes the primary application architecture. Side B is a substantial and sophisticated feature addition (multi-repository git discovery, emission integration, and extensive tests), but it builds within an existing system and is narrower in scope. In terms of total code volume, architectural surface area, and baseline functionality introduced, Side A contributes significantly more.
comparison · c_5cd3e5917d2f (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a coherent, well-tested refactor that removes the EntityStore/EntityImported machinery and replaces it with ephemeral projection content plus a TTL eviction task, updating call sites, tests, and even the Clojure integration tests consistently. Side B's 'init seed' commit dumps loose, disorganized files at the repo root (some literally containing captured shell prompts like 'tommy@Tommys-Laptop:...⇒ cat server/src/ranking.rs' pasted into the file), indicating accidental/scratch content rather than a deliberate, reviewable change.
Commit A makes a lasting architectural change: drops EntityImported/EntityStore so the event log keeps only NodeEnsured structure, writes Reddit display content ephemerally into the projection with fetched_at, and adds a 48h TTL evictor—aligning storage with API policy and rebuild semantics. Commit B is an init dump of notes (.tdsl), shell-cat noise pasted into .rs files, and large prototype blobs (parser/reducer/ranking) that do not land as clean, integrated project value.
Side A implements a substantive architectural change: it removes persistent Reddit payloads from the event log (`EntityImported` and `EntityStore`), replaces them with ephemeral projection-cached content plus TTL eviction, updates replay/journaling accordingly, and adds tests verifying the new behavior. Side B is an unfocused seed commit containing planning documents, scripts, large new modules, and even pasted terminal output in source files, with little evidence of a coherent, production-ready change compared to A's deliberate redesign.
Side A makes a substantive architectural change: removing EntityImported events and the entire EntityStore, replacing them with ephemeral projection-cached content with TTL eviction and simplifying the event log to structural data only. This reduces log bloat and enforces API policy while adding eviction logic and updating replay semantics, whereas Side B mostly adds initial scaffolding (scripts, UI plumbing, parser, and notes) without clear integration or demonstrated necessity.
Side A makes a deep architectural change: it removes the persisted EntityImported event and EntityStore, introduces ephemeral Reddit content caching in ProjectionStore with TTL eviction (e.g., put_ephemeral_content, evict_content_older_than, REDDIT_CONTENT_TTL), and rewires journal/projection/state logic and tests accordingly. Side B mainly adds initial scaffolding files and scripts (TEST.sh, bundle.js, parser.rs, etc.) without integrating them into the existing server architecture, providing comparatively less lasting structural impact.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_45659f04aa7c (tommy-mor)
Side A is essentially a raw dump of files (some literally captured from a terminal with prompt lines included) with no real diff context, mixing unrelated concerns (parser, ranking, reducer, vote UI) as a single 'init seed' commit, making its actual incremental value hard to assess. Side B is a focused, well-motivated change replacing a GitHub-API-dependent commit discovery mechanism with a deterministic, replayable, multi-repo Git-based discovery system, including careful handling of forced pushes, patch-identity dedup, merge/empty commit exclusion, and extensive new tests (unit, integration, and stateful/hypothesis-based) validating the new logic's correctness and idempotency.
Side B replaces fragile GitHub-API commit fetching with deterministic multi-repo git mirror discovery (reachability, patch-id dedup, genesis/merge/empty exclusions, locks, replay), wired into emissions and backed by substantial unit, stateful Hypothesis, and integration coverage. Side A is largely an “init seed” dump of notes, a large URL parser/tests prototype, ranking/reducer/vote slices, and shell helpers—some of it substantive product code, but noisier and less cohesive as lasting project infrastructure than B’s targeted constitutional change.
Side B replaces GitHub API-based commit discovery with deterministic multi-repository Git mirroring, reachability snapshots, patch-identity deduplication, replayable `GitDiscovery` ledger events, and corresponding integration/stateful tests, substantially strengthening the project's core attribution logic. Side A is a large seed commit, but it includes obvious accidental terminal transcript text embedded in source files (for example `forms.rs` and `ranking.rs` begin with shell prompt output), alongside speculative notes and a large amount of initial code, making it a much less reliable lasting contribution.
Side B introduces a full deterministic Git discovery and attribution system (multi-repo mirroring, patch-identity deduplication, snapshotting, locking, and extensive tests), fundamentally changing how contributions are computed. Side A is mostly initial scaffolding with mixed-quality additions (scripts, large parser, notes) but includes noisy artifacts (e.g., pasted terminal text) and lacks cohesive, production-ready impact compared to B’s well-integrated feature.
Side B replaces GitHub API–based commit fetching with a deterministic, replayable multi-repository Git discovery system (mirror cloning, ref-pattern matching, patch identity deduplication, snapshot hashing, file locks) and wires it into emissions with a `GitDiscovery` event and extensive property/stateful tests. Side A is largely an initial seed adding assorted new files (parser, ranking, reducer, UI scaffolding) but without the focused architectural rigor and replay guarantees that Side B introduces for contribution attribution.
comparison · c_66eb04076a98 (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a small, coherent bugfix that replaces a positional gradient with a score-based min-max normalization, includes updated targeted unit tests, and is directly reviewable and mergeable. Side B is an 'init seed' dump of many large files (parser.rs, reducer.rs, vote.rs, etc.) that appear to be pasted terminal output (including shell prompts embedded in the file content), unstructured design notes, and duplicated/unintegrated code, offering far less clear, lasting, reviewable value despite its size.
A is a precise, well-tested design fix that recolors rank rows via min–max of vote mass within each group (with clamp, tied-score handling, and regression tests), directly improving readability as groups grow. B is a noisy “init seed” dump of prototypes/notes plus large files that embed shell prompts and cat output, so much of the bulk is non-viable churn rather than clean lasting design.
Side A makes a targeted functional improvement by changing rank-row coloring from list position to per-group score normalization, adds a dedicated `score_gradient_t` helper, updates rendering to use min/max scores, and includes focused regression tests for edge cases like tied scores. Side B is a massive seed commit containing speculative designs and many new files, but it also includes obvious accidental terminal transcript dumps in source files (`forms.rs`, `ranking.rs`), making much of the patch noisy and of questionable lasting value compared with A's precise, test-backed bug fix.
comparison · c_28dfd8015c8a (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a small, coherent, real change: it fixes tests.edn to auto-discover all test namespaces, correctly explains why (new test.ranking), and verifies both CI and local scripts still work. Side B is an 'init seed' dump of large, seemingly copy-pasted/misplaced files (e.g. forms.rs and ranking.rs literally include a shell prompt and 'cat' command in the diff, files placed at repo root rather than proper module paths), which reads as unreviewed scaffolding rather than a deliberate, lasting contribution.
B seeds core product surfaces (reducer state machine, rank-centrality, vote compare UI, form/UI action plumbing, test entrypoints), whereas A only rewrites tests.edn suite ids into one ^test\..+ auto-pattern. A is a clean maintainability tweak; B’s lasting domain code outweighs A despite seed noise (shell/cat paste in forms.rs/ranking.rs, .tdsl notes, large parser prototype).
Side A makes a focused, lasting infrastructure improvement by replacing hand-enumerated Kaocha suites with a single auto-discovered `:all` suite (`^test\..+`), ensuring new test namespaces run automatically without editing `tests.edn`. Side B adds a large amount of mixed prototype code and planning notes, but several files (`forms.rs`, `ranking.rs`) even contain pasted terminal session text instead of valid source, making the patch noisy and likely broken despite its size.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_7ec67b9cef2c (tommy-mor)
Side A's diff is mostly a noisy dump of already-existing files pasted at the repo root, with literal shell-prompt artifacts (`tommy@Tommys-Laptop:~/...⇒ cat ...`) embedded inside the '.rs' content, meaning these are not real, buildable additions integrated into the actual server/src tree. Side B, though much smaller, adds a real, properly wired module (`routing.rs`/`RouteContext`) integrated into `html/mod.rs`, plus a clear, actionable refactor plan (`plan.md`) that gives concrete lasting guidance for future work — substance over spectacle.
Side B delivers a precise, lasting architectural foundation: a complete phased plan for structural ItemId (replacing stringly CanonicalItemUrl) plus the clean RouteContext wrapper and export that begins migratable href generation. Side A is a noisy bulk dump of prototype files (parser/reducer/ranking/vote plus .tdsl notes) that includes terminal garbage embedded in forms.rs and ranking.rs, making much of the large diff non-lasting churn rather than polished design.
Side B introduces a concrete architectural abstraction (`RouteContext`) for centralized HTML route generation, re-exports it from the HTML module, and documents a coherent migration plan toward structured `ItemId` handling. Side A is much larger, but it mixes many unrelated additions with obvious accidental terminal transcript text embedded at the start/end of files such as `forms.rs` and `ranking.rs`, reducing the reliability and lasting value of the patch despite its scope.
comparison · c_cf0a514b261a (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a small, correct, well-reasoned bugfix with an updated test asserting the new (correct) behavior, and clear justification for why the removed guard was dead code. Side B is a chaotic 'init seed' dump that includes shell-prompt garbage pasted into files (forms.rs, ranking.rs, reducer.rs literally start with 'tommy@...cat server/src/...'), making those files non-compiling noise rather than a real, usable commit, despite containing large amounts of code.
B seeds core product surface—rank centrality, GroupState/reducer event application, vote compare UI, HTML form RPC plumbing, and test harnesses—whereas A only deletes a few lines of already-dead zero-ratio guard and retargets one unit test. Even with notes and some paste-corrupted files, B’s lasting design mass dwarfs A’s small cleanup.
Side A removes a demonstrably dead zero-ratio early return from `GroupState::apply_vote`, relying on existing parser/browser validation and the existing `add_edge_weight` zero-weight check, then updates the test to verify the new intended behavior (items and pairs are still registered while zero-weight edges are skipped). Side B is an enormous seed commit mixing many unrelated additions, including files that accidentally contain shell transcript text (e.g. `forms.rs` and `ranking.rs` begin with terminal output), making it noisy and likely non-buildable rather than a clear, lasting project improvement.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_88200cfa5c4d (tommy-mor)
Side A is a chaotic 'seed' dump with files placed at the repo root (not real source paths) and several .rs files literally containing pasted terminal output (e.g. 'tommy@Tommys-Laptop:...⇒ cat server/src/form_template.rs') mixed into the code, meaning much of it wouldn't even compile as committed — it reads like a snapshot rather than a working change. Side B is a small, precise, correctness-preserving clippy cleanup that fixes real issues (a silently-skipped test missing #[test], correct is_some_and usage, cleaner error destructuring) with no risk of regression, making it the more trustworthy, lasting contribution despite its modest size.
Side A seeds substantial core logic (rank-centrality implementation with tests, reducer state machine, form-template filling, vote-compare UI, and a large composable parser) that defines lasting project behavior, while Side B only applies minor clippy cleanups, a missing #[test] attribute, and allow(dead_code) with no functional design or bugfix impact.
Side A introduces substantial new project functionality: core modules for ranking and reducer state, a graph-based parser with extensive tests, browser UI plumbing (bundle.js and UI actions), voting pages, form-template handling, and test scripts. Side B is limited to maintenance—adding one missing #[test], silencing dead-code warnings, and making small Clippy-driven cleanups (pattern simplifications, type aliasing, API idioms)—which improves code quality but does not add comparable lasting capabilities.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_bd76779bd7ed (tommy-mor)
Side A introduces substantial, working subsystems (rank-centrality ranking algorithm with regression tests, event-sourced reducer, form templating with $form holes, a composable URL parser, and vote-compare UI) that encode real design decisions and lasting logic, despite some stray copy-paste artifacts (shell prompts) in a couple of files. Side B is a single-line tweak changing a disabled `<span>` to an `<a href="#">` in a paginator, a trivial cosmetic/no-op fix with negligible lasting impact by comparison.
Side A seeds substantial core subsystems (ranking/centrality logic with tests, event reducer state machine, HTML vote-compare UI, form-template plumbing, parser graph, and test harnesses), which form lasting project foundation despite some pasted noise. Side B is a one-line cosmetic swap of a disabled paginator span to an anchor.
Side A introduces substantial new project infrastructure, including a client-side fetch/SSE UI layer, ranking and reducer logic, a parser with extensive tests, vote handling, UI action parsing, and supporting test scripts. Side B only changes a disabled paginator element from a <span> to an <a href="#">, a minor UI tweak with limited lasting architectural impact.
comparison · c_6a02ffb06a41 (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a coherent, real fix: it removes a silently-defaulting `.unwrap_or(0)` fallback for thread_post_index in favor of an explicit `expect` that surfaces bugs, fixes the corresponding UI/link logic, updates doc comments to match 0-based semantics, and adds regression tests verifying the new indexing behavior end-to-end. Side B is a dump of large, mostly unrelated file snapshots (including literal shell-prompt lines like 'tommy@Tommys-Laptop:...⇒ cat ...' pasted into the diff), design notes/tdsl files, and whole modules added wholesale with no clear incremental change being reviewed, making it noisy and hard to attribute as a meaningful single commit of lasting value.
A is a precise correctness fix: thread_post_index becomes consistently 0-based (matching `/t/tag/N`), drops silent `unwrap_or(0)` fallbacks for `expect`, always emits the post link, documents the contract, and extends integration tests. B is mostly seed noise—brainstorm `.tdsl` notes, shell-prompt-corrupted file dumps, and a large unrelated Reddit parser—so line volume does not translate into lasting integrated design.
Side B introduces substantial new project functionality, including core ranking/reducer logic, a URL parser with extensive tests, UI action handling, vote flow, and supporting infrastructure, despite also containing some noisy or accidental content (such as terminal captures and planning files). Side A is a useful correctness change that enforces invariants with `expect`, aligns `thread_post_index` with 0-based URLs, updates documentation, and adds regression tests, but it is a comparatively narrow refinement.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_995cbd9de96d (tommy-mor)
Side A introduces substantial new functionality (rank-centrality ranking engine, event reducer, form templating, UI action dispatch, parser graph, vote comparison logic) that provides lasting architectural value, even though the diff is messy (shell-pasted files with prompt artifacts). Side B is purely a rustfmt-style reformatting commit with zero behavioral change, offering only cosmetic value and no new functionality or bugfixes.
Side A seeds substantial project foundations (graph-based reddit URL parser with extensive tests, rank-centrality ranking with connected components and issue #146 fix, event reducer/state, HTML UI actions + form templates, vote compare page, and client SSE plumbing), while Side B is pure non-functional formatting/reflow of imports and signatures in one existing file with zero behavior or design change.
Side A introduces substantial new functionality across the project: new ranking and reducer logic with tests, a parser graph and extensive parser test suite, browser UI plumbing, vote handling, form-template processing, and supporting scripts. Side B is a pure formatting pass that only reflows imports, line breaks, and expressions in an existing file without changing behavior.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_e4fb43f04791 (tommy-mor)
Side A is not a real commit at all: it dumps stray shell prompt output and duplicate copies of source files (forms.rs, ranking.rs, reducer.rs, vote.rs) into the repo root, seemingly by accident, adding noise rather than a coherent, working change. Side B is a small, legitimate, targeted commit that fixes real template/markup indentation and CSS styling (rank number sizing, retro theme list styles) with clear before/after diffs that actually improve the codebase.
A seeds core product systems—rank centrality and components, the event reducer/content model, vote-compare handlers, form-template UI actions, and a large tested URL parser—whereas B only unwraps a vote-compare HTML shell and tweaks ranking-list number CSS across themes. Notes and a few paste-noisy files weaken A slightly, but its lasting design and behavior still dwarf B’s small presentation cleanup.
Side A introduces substantial new project functionality, including a reducer and ranking engine with tests, a graph-based parser with extensive test coverage, vote handling, UI action parsing, form-template substitution, browser plumbing, and test scripts. Side B is primarily a presentation cleanup: it removes a wrapper element around the vote-compare page and adjusts CSS styling for ranked lists, improving layout but adding little enduring core functionality.
comparison · c_16438843de8f (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side B contains substantial, functional application logic (reducer state machine, rank-centrality ranking algorithm with regression tests, a URL parser graph with extensive test coverage, form-templating and vote UI handlers) that directly implements core product features. Side A is mostly infrastructure/config scaffolding (Dockerfile, fly.toml, deps.edn) plus two small standalone Rust modules (event log, view counter) that are useful but far less substantial than B's ranking/reducer/parser logic.
B seeds the core domain (graph-based URL parser with extensive flow tests, rank-centrality scoring + connected components, full event-sourced ReducerState, vote-compare UI/handlers, and HtmlUiAction form templates), which defines lasting product behavior; A only adds secondary infra (Dockerfile/fly.toml deploy, EventLog JSONL helper, ViewStore, deps.edn) that supports but does not constitute the application.
Side A adds coherent, production-oriented infrastructure and core functionality: a Dockerfile and Fly deployment config, an `EventLog` abstraction with JSONL append/load and corrupt-line handling, and a persistent `ViewStore` with asynchronous flushes. Side B contains a large amount of ambitious code (parser, reducer, ranking, UI), but multiple added Rust files (`forms.rs`, `ranking.rs`) include pasted shell transcript text, making the patch appear invalid and reducing its lasting value despite its size.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_b8e80699547c (tommy-mor)
Side A establishes the actual core architecture of the project—vote reducer with rank centrality math, parser graph, form templating, and vote UI routes—complete with substantive tests and real bugfix rationale (e.g. the rank-centrality convergence fix referencing issue #146). Side B is a single self-contained Reddit API client wrapper, useful but narrower in scope and lacking tests or integration with the rest of the system shown in Side A's diff. Side A's breadth and depth of durable, load-bearing logic outweighs Side B's isolated utility module.
Side A seeds the project's core lasting systems (rank-centrality with #146 regression tests and connected components in ranking.rs, full event-sourced ReducerState/GroupState in reducer.rs, the graph-based Reddit URL parser with extensive keystroke-flow tests, form $form template fill, HtmlUiAction, and the complete vote-compare page/UI), whereas Side B only adds a single clean but narrower Reddit HTTP client with rate limits and serde types. A's volume includes some pasted shell noise and note files, but the real algorithms, state machine, and UI plumbing dominate lasting value over B's useful-but-peripheral fetch layer.
Side B adds a cohesive, reusable Reddit API client with built-in rate limiting, structured response types, robust serde deserialization, and explicit handling for common API errors, providing infrastructure that is likely to be reused across the project. Side A contains a large amount of code, but it mixes speculative design documents with implementation and even includes accidental terminal transcript text embedded in source files (for example at the start/end of forms.rs and ranking.rs), which would undermine correctness despite the breadth of functionality.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_92734e554a25 (tommy-mor)
Side A, despite some copy-paste artifacts (stray shell prompts in two files), introduces substantial working functionality: a rank-centrality algorithm with a documented correctness fix (issue #146), a reducer/state-machine for votes and content, a form-template substitution system with tests, and a vote-compare UI feature — real, lasting design work. Side B is a small maintenance fix (bump Node version, drop an npm upgrade step, remove two now-invalid unit tests) that is correct but trivial in scope and impact by comparison.
Commit A seeds substantial core systems (rank-centrality with regression tests, event reducer/state, form-template/$form plumbing, HTML UI actions, vote-compare UI, and a large composable parser with tests), which define lasting product behavior. Commit B only bumps the Node release workflow and deletes two stale validation tests—useful hygiene, but minor versus A’s architectural payload.
Side A introduces substantial new project functionality, including a reducer and ranking engine with tests, a parser framework, browser UI plumbing, vote handling, form-template processing, and supporting scripts. Although it contains some low-quality artifacts (such as pasted terminal prompts and planning notes), it establishes major reusable infrastructure, whereas Side B only makes a small maintenance change by updating the GitHub Actions Node version and removing a few obsolete tests.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_1c1c8e7a2de8 (tommy-mor)
B is a coherent, compiling change that simplifies the room model (drops the unused/confusing ThreadVisibility field), threads that change consistently through events, reducer, RPC, CLI (adds `room create`), docs, and tests. A is a chaotic dump of speculative/idea files placed at repo root (not in server/src), several of which literally contain pasted shell prompts and `cat` commands baked into the file content, indicating they are not real, integrated source files but seed notes/junk with no demonstrated build integration.
Side B ships a real, integrated feature path: CLI `room create`, a cleaner private-room model (drop ThreadVisibility/RoomState, rooms as HashSet), matching RPC/reducer/timeline/test/doc updates. Side A is mostly an exploratory dump (notes .tdsl files, TEST scripts, a large Reddit parser prototype) with lasting code quality undercut by corrupted patches (forms.rs/ranking.rs are shell `cat` paste, not clean sources).
Side A introduces substantial new project functionality across multiple areas: a ranking engine with connected-component and rank-centrality logic plus tests, a reducer for event-driven state, UI action parsing with JSON form templates, browser plumbing, and a large parser/autocomplete system. Side B is a focused refinement that adds a CLI `room create` command and simplifies room handling by removing the room visibility concept (replacing a room map with a `HashSet` and updating RPC/tests/docs), which is useful but comparatively incremental.
comparison · c_c124c217f89c (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A adds a real, working feature: a background Reddit-fetch worker with OAuth, rate-limit/backoff handling, JSON parsing, and unit tests, properly wired into state.rs and html/mod.rs. Side B is a disorganized dump of loose top-level files (ranking.rs, reducer.rs, vote.rs, forms.rs, etc.) placed outside server/src, some containing raw shell-prompt artifacts from a `cat` command, indicating it's an unintegrated snapshot rather than a coherent commit.
Commit A delivers a complete, integrated Reddit fetch broker (OAuth, rate-limit backoff, dedup worker, JSON parsers, browse/state hooks, tests) that replaces a stub with production-ready code. Commit B is mostly unintegrated scrapes/notes (tdsl ideas, shell-prompt-contaminated dumps of parser/ranking/reducer/vote) plus minor scripts, adding far less durable project value despite higher line count.
Side A replaces a Reddit import placeholder with a complete background fetch system: queued async worker, OAuth support, rate-limit handling, JSON parsing into entity data, request deduplication/caching, integration into application state, and tests, plus triggering fetches from browse/create paths. Side B adds many planning documents and large code drops, but several files contain accidental terminal transcripts rather than clean source, and much of the content is speculative or scaffolding rather than a clearly integrated, production-ready feature.
comparison · c_f10e7b043e68 (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a coherent, working refactor that replaces a combinator-based URL engine with a cleaner graph-based canonicalization approach, updates docs, and preserves test coverage via registry_tests. Side B's 'init seed' dump adds huge files (forms.rs, ranking.rs) that literally contain leftover shell prompts and 'cat' commands baked into the file content, meaning those files as committed are broken/non-compiling, making it low-quality, unreviewed noise despite its size.
A delivers a focused architectural refactor of URL canonicalization (deleting the ad-hoc engine primitives in favor of a semantic DFA/graph design, with registry updates and docs), which is lasting core design. B is a noisy bulk seed dump of prototypes, notes, and large files (parser/reducer/ranking/vote) polluted by terminal paste artifacts and non-code .tdsl ideation, so most of its volume does not land as clean lasting value.
Side A replaces the URL canonicalization implementation with a new graph-based architecture by removing the old `engine` layer, routing the public API through `graph`/`parse`, and simplifying `registry.rs` to use semantic graph resolution and shared breadcrumb logic. Side B adds a very large mix of prototype code, notes, and even terminal-capture artifacts (for example `forms.rs` and `ranking.rs` include shell prompts), making it a broad initial dump rather than a focused, maintainable project improvement.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_3403e5929da7 (tommy-mor)
Side A is a sprawling 'init seed' dump that pastes raw terminal output (including shell prompts like 'tommy@Tommys-Laptop:~/... ⇒ cat ...') into oddly-placed root-level files (forms.rs, parser.rs, vote.rs, etc.), which reads as an unstructured snapshot rather than a real, integrated contribution. Side B is a small, precise bugfix (splitting unranked siblings into individual nav groups) accompanied by a targeted regression test, representing clear, verifiable, lasting value despite its size.
A seeds core product surface: a tested Reddit path graph parser, event reducer/ranking (including issue #146 star-topology fix), form JSON hole-fill + HtmlUiAction, and the vote-compare page—durable architecture despite some .tdsl notes and terminal-paste noise in forms/ranking. B only tweaks sibling nav so each unranked isolate is its own group plus one regression test (#130), a correct but narrow UI fix on existing garden code.
Side B makes a focused behavioral improvement: it changes sibling navigation so each unranked sibling becomes its own navigation group instead of lumping all unranked items together, and adds a regression test verifying the new grouping. Side A is an enormous 'init seed' that mixes many unrelated additions and even includes accidental terminal transcript text in source files (e.g. `forms.rs` and `ranking.rs`), making it noisy and difficult to judge as a coherent, lasting contribution.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_a337088f57f0 (tommy-mor)
Side B is a small, coherent, working change: it improves the dev fixture script to use cargo-watch with a persistent data dir and preferred port, and removes redundant UI markup, all integrated into the actual codebase. Side A is a disorganized dump of stray untracked files (many pasted with shell prompts like 'tommy@Tommys-Laptop...cat file' baked into the diff), placed at repo root rather than proper module paths, indicating this is not a real integrated commit but leftover scratch content of dubious lasting value.
Side A lands core lasting domain machinery (rank-centrality with the #146 star-topology fix and tests, event reducer for scopes/rooms/ingests/votes, HTML form $form templates + ui_action parsing, vote-compare page, and a large tested URL parser graph), while B only polishes the fixture DX (cargo-watch, persistent fixture-data/, preferred port 8080) plus a small room page markup trim.
Side A introduces substantial project functionality: core ranking and reducer logic, a parser with extensive tests, UI action/form templating, voting pages, browser plumbing, and supporting test scripts, all of which define lasting behavior. Although it contains some accidental pasted terminal output and planning notes, it establishes major reusable infrastructure, whereas Side B mainly improves the developer workflow by making the fixture environment persistent, using cargo-watch, preferring port 8080, and making small UI/test utility adjustments.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_59974b9da42a (tommy-mor)
Side A introduces substantial new functionality (rank-centrality ranking engine with regression tests, form-template substitution system, a URL parser/graph engine, and a large vote-comparison UI module) that provides lasting algorithmic and product value. Side B is a pure refactor (splitting forum.rs into submodules plus an unrelated macOS sampling script) that reorganizes existing code without adding new capability, and even reintroduces some inline duplication that the original had factored out.
Side A introduces substantial product systems—rank centrality with regression tests, the event reducer/state model, vote-compare UI, form-template/UI actions, and a large URL parser—whereas Side B mostly splits existing forum HTML into submodules and adds a small macOS sample-fixture helper. Even with noise (shell paste in forms.rs/ranking.rs, .tdsl notes), A’s lasting design and behavior far outweigh B’s organizational churn.
Side A introduces substantial new project capabilities: a parser graph with extensive tests, ranking and reducer infrastructure, UI action/form templating, vote handling, browser plumbing, and supporting test scripts. Although it includes some accidental terminal-output noise in files like `forms.rs` and `ranking.rs`, the commit still establishes core functionality, whereas Side B is primarily a code organization refactor that splits forum code into modules and adds a developer profiling script without introducing comparable new behavior.
comparison · c_b7cc67300477 (tommy-mor) vs c_f6d0fed9bf9a (tommy-mor)
Side A is a focused, meaningful test that validates rank-centrality correctness on a random spanning tree, adding real regression coverage with minimal footprint. Side B is a disorganized 'init seed' dump containing shell prompts and terminal artifacts pasted into .rs files, notes/tdsl scratch files, and bundled source files that appear to be copy-pasted snapshots rather than a coherent, reviewable commit.
A adds a clean, targeted unit test that locks in core rank-centrality behavior (perfect-ratio spanning tree recovers alphabetical order), directly protecting a lasting invariant. B is a noisy “init seed” dump whose volume is mostly exploratory notes, scripts, and corrupted files (shell prompts and cat output embedded in forms.rs/ranking.rs), so far less durable substance despite the line count.
Side A adds a focused regression test that exercises rank centrality on a minimal random spanning tree with perfect vote ratios, verifying the algorithm recovers the expected alphabetic ordering and protecting a core ranking property. Side B is a large seed commit mixing many unrelated files, design notes, and even terminal transcript text embedded in Rust source (e.g. `forms.rs` and `ranking.rs`), making it noisy and of questionable build quality despite its size.
comparison · c_f6d0fed9bf9a (tommy-mor) vs c_7ca21f5e83a8 (tommy-mor)
Side A introduces substantial, lasting core functionality (form template substitution, ranking/rank-centrality algorithm with regression tests, reducer state machine, vote comparison UI, UI action dispatch) that forms real application logic and infrastructure, even though the diff includes messy artifacts like shell-prompt-contaminated files. Side B adds only a single browser integration test for pool-scoped voting, which is useful for verification but far narrower in scope and does not add product capability or design.
Side A lands substantial product foundation (reducer/ranking/vote UI flow, form-template UI actions, client plumbing, parser) that the system depends on long-term, despite some seed noise and design notes. Side B adds a valuable but narrow E2E browser test for the pool-scoped vote loop; lasting value is real regression coverage, not new design or core behavior.
Side A introduces substantial project functionality: core reducer and ranking logic, vote UI, parser infrastructure, form-template handling, UI actions, test scripts, and extensive unit tests. Side B adds a valuable end-to-end browser test for the pool-scoped voting flow, but it exercises existing behavior rather than adding new capabilities, so its long-term contribution is much smaller.