comparison · c_a3b1b1967afc (tommy-mor) vs c_16438843de8f (tommy-mor)
Side B adds concrete, functional infrastructure: a working EventLog implementation (append/load with JSONL), a ViewStore for counting views with debounced disk flush, plus deployment artifacts (Dockerfile, fly.toml) and a deps.edn for test tooling. Side A merely deletes a planning markdown document with no accompanying implementation, providing no functional or lasting code value.
B adds lasting runtime and ops foundations: EventLog (JSONL append/load), ViewStore persistence, plus Dockerfile/fly.toml deployment. A only deletes PLAN.md with no implementation, tests, or behavioral change—cleanup after planning, not durable project value.
Side B adds functional project infrastructure and code: a JSONL-backed `EventLog` with append/load support, a persistent `ViewStore` that asynchronously flushes counts to disk, plus Docker and Fly.io deployment configuration. Side A only deletes `PLAN.md`, removing design documentation without changing runtime behavior or implementing any of the planned architecture.
comparison · c_16438843de8f (tommy-mor) vs c_7a129e904906 (tommy-mor)
Side A adds new files (Dockerfile, deps.edn, event_log.rs, views.rs, fly.toml) that are not wired into any build system or referenced by existing code, appearing as unintegrated scaffolding/dead code dropped at repo root. Side B is a substantive, integrated feature: it adds a real-time SSE audit dashboard, fixes an object-hash dedup bug, gates contested rankings on OPENROUTER_API_KEY with tests, adds a CI/CD deploy workflow, and includes corresponding integration and unit tests validating the new behavior.
B ships production deployment (Fly Dockerfile/fly.toml + main-branch CI), a full live /watch audit UI with SSE status/progress, multi-repo/contributor production roots, epoch-loop reliability fixes, and matching tests. A only drops early Rust seed scaffolding (event_log/views + Dockerfile/deps) without wiring, tests, or evidence it became the lasting path.
Side B delivers substantial, lasting functionality by adding a production deployment pipeline (GitHub Actions, Docker, Fly.io), a live audit/status system with structured SSE events, a new /watch dashboard, process-state tracking, authenticated Git access, and accompanying integration/unit tests. Side A mainly introduces infrastructure and persistence helpers (Dockerfile, event log, view counter, deployment config), which are useful but narrower in scope and less integrated into the application's core behavior.
comparison · c_97611919bf0b (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A performs a substantive, coherent type-system refactor (introducing ItemId, splitting item_wire, updating dozens of call sites and tests consistently) that improves identity handling across the codebase, deleting a stale plan doc as a bonus. Side B merely adds deployment scaffolding (Dockerfile, fly.toml, deps.edn) and two orphaned .rs files (event_log.rs, views.rs) placed at the repo root rather than integrated into any crate module, making their actual project impact unclear or possibly non-functional.
A replaces the CanonicalItemUrl string newtype with a structural ItemId enum (Root/Local/Web/Opaque), splits wire normalization into item_wire, and migrates reducer maps, ranking, RPC, HTML routing, and tests onto typed identity—core lasting design. B mainly seeds deploy scaffolding (Dockerfile, fly.toml), Clojure deps.edn, and small standalone event_log/views modules, which help bootstrap ops but do not reshape the domain model.
Side A performs a substantial architectural refactor by introducing a structural `ItemId` type, extracting wire-normalization into `item_wire`, and propagating the new identity model throughout reducers, ranking, routing, APIs, HTML, and tests while replacing `CanonicalItemUrl`. These changes centralize item identity and routing logic (for example `RouteContext::item_href` and `ThreadNav::garden_item_href`) and reduce string-based handling. Side B adds useful deployment artifacts (Dockerfile, Fly config) and standalone persistence utilities (`EventLog`, `ViewStore`), but they are largely additive infrastructure and are not integrated into the project's core behavior in this patch.
comparison · c_c6f5afec1d36 (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A implements a coherent, integrated feature (pool-scoped voting) with real changes to routing, query parsing, HTML templates, and matching test updates, showing deliberate design work across the actual codebase. Side B's diff is oddly structured—adding stray top-level files (event_log.rs, views.rs, Dockerfile, deps.edn, fly.toml) outside any src/ directory, seemingly disconnected/orphaned infra files with a vague 'more seed' message, offering little demonstrable integration or lasting architectural value.
A delivers a complete, integrated product feature (pool-scoped voting): optional pool query handling, first-unvoted pair selection from children, constrained next-pair navigation, UI entry point, and pool threading through post-success JS—lasting application design. B is mostly bootstrap/seed (Dockerfile, fly.toml, deps.edn plus standalone event_log/views stubs), which is useful scaffolding but lower durable design density relative to A’s targeted behavior change.
Side A implements a complete, integrated feature: `/vote` gains a `pool` mode, request parsing and validation are extended, next-pair selection is constrained to a pool, UI links are added for voting on children, and the pool context is preserved through post-success navigation. Side B mainly adds deployment/configuration files plus standalone `event_log.rs` and `views.rs` modules that are not wired into the shown application flow, so the demonstrated lasting project impact is smaller.
comparison · c_a896b2dc05d5 (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A is a coherent, well-reasoned refactor (deque→vec, moving the recent-votes cap to query time) with clear rationale in comments and a new test verifying correctness, directly improving code clarity and correctness. Side B is a disorganized 'seed' commit dumping unrelated deployment configs (Dockerfile, fly.toml, deps.edn for Clojure) and duplicate/misplaced source files (event_log.rs, views.rs at repo root) with no tests or integration, offering little lasting architectural value.
A is a deliberate storage/reducer redesign: Deque→List/Vec, write-time trim removed for append-only votes with a query-time cap, schema bump, call-site cleanup, and a new cap test—lasting correctness and simpler projection apply. B mostly dumps seed scaffolding (root event_log/views, deps.edn, Dockerfile/fly.toml) that is foundational but rough/noisy versus A’s integrated design change.
Side A introduces a lasting redesign of recent-vote storage by replacing the durable deque with an append-only list, removing post-commit trimming, updating the reducer and loading logic to cap results at query time, bumping the storage schema version, and adding a regression test for the new behavior. Side B adds useful infrastructure (Dockerfile, Fly configuration, and new `EventLog`/`ViewStore` modules), but those additions are more ancillary than the core persistence and data-model changes in Side A.
comparison · c_6a02ffb06a41 (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A is a focused, verified correctness fix: it removes a silent unwrap_or(0) fallback that masked invariant violations, replaces it with an explicit expect, aligns doc comments/URLs to the actual 0-indexed semantics, and adds concrete integration tests validating thread_post_index behavior. Side B mostly dumps unintegrated scaffolding (event_log.rs and views.rs at repo root, not wired into any module tree) plus deployment config and an unrelated Clojure deps.edn, with no tests and unclear integration into the existing Rust crate structure.
A makes a coherent, tested contract fix: rank-history thread_post_index becomes consistently 0-based like /t/tag/N, drops silent unwrap_or(0) fallbacks for expect, updates API docs/HTML links, and asserts behavior in integration tests. B mainly dumps unwired seed files (root event_log.rs/views.rs with no module wiring, plus deps.edn) alongside useful but thinner deploy scaffolding (Dockerfile/fly.toml), so less proven lasting design impact.
Side A fixes a semantic inconsistency by making rank-history thread indices consistently 0-based to match `/t/tag/N` routes, replacing silent fallbacks with `expect(...)` to enforce an invariant, updating documentation, always rendering the post link, and adding integration tests that verify the behavior. Side B adds several new infrastructure and utility files (Dockerfile, Fly config, event log, view store), but they are largely standalone additions without evidence in this patch of integration into the main application, making their demonstrated lasting impact less certain.
comparison · c_28dfd8015c8a (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A is a small, well-explained fix that removes duplicated, hand-maintained test-suite config and replaces it with a self-maintaining pattern, with clear rationale tied to a real need (new test namespace auto-discovery). Side B's commit message ('more seed') gives no context for a large, disorganized dump of unrelated new files (Dockerfile, fly.toml, deps.edn, Rust event-log/view-store modules) with no explanation of intent or integration, making its lasting value and correctness hard to assess.
B adds foundational runtime and deploy pieces (event_log.rs append/load, ViewStore persistence, Dockerfile, fly.toml, deps.edn) that define how the app runs and ships. A only rewrites tests.edn to a single auto-discovered suite—useful hygiene, but a small config change with far less lasting product impact.
Side B adds substantial new infrastructure and functionality: a Docker-based build/deployment path, Clojure dependency configuration for testing, a persistent JSONL event log with append/load APIs and error handling, deployment configuration (fly.toml), and a persistent view-count store with asynchronous flushing. Side A improves test maintenance by replacing manually enumerated Kaocha suites with automatic discovery of all `test.*` namespaces, which is a useful long-term simplification but narrower in scope and impact than the new runtime capabilities introduced in Side B.
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_7ec67b9cef2c (tommy-mor) vs c_16438843de8f (tommy-mor)
B adds concrete, potentially reusable infrastructure (Dockerfile, fly.toml, deps.edn) plus two functional modules (EventLog for JSONL persistence, ViewStore for view counting) that encapsulate real logic, even though their file placement suggests staging. A's diff is dominated by a long speculative planning document (plan.md) that will be deleted per its own text, with the only functional code being a thin RouteContext wrapper that mostly forwards to existing ThreadNav methods without yet being adopted anywhere.
B adds load-bearing runtime and ops pieces (JSONL EventLog append/load, ViewStore persistence, Dockerfile/fly.toml, kaocha deps.edn) that the project actually runs on. A mostly drops a disposable plan.md plus a thin RouteContext newtype that delegates to existing ThreadNav, so little permanent behavior lands beyond scaffolding for a future refactor.
Side B adds several concrete, reusable capabilities: an asynchronous JSONL `EventLog` with append/load logic and error handling, a persistent `ViewStore` that flushes counts to disk, plus deployment artifacts (`Dockerfile` and `fly.toml`) that enable building and running the project. Side A mostly introduces a detailed migration plan document and a thin `RouteContext` wrapper around `ThreadNav` with re-exports; while directionally useful, it is largely scaffolding and documentation rather than completed functionality.
comparison · c_16438843de8f (tommy-mor) vs c_6864b1ca8ce6 (tommy-mor)
Side A adds real functional infrastructure — a JSONL event log with load/append logic, a persistent view-counter store with debounced disk flushing, plus deployment scaffolding (Dockerfile, fly.toml, deps.edn) — which are concrete building blocks for persistence and deployment. Side B is purely cosmetic CSS polish (padding, focus outlines, color-mix accents) duplicated across two theme files, improving UX consistency but carrying no functional or architectural weight.
A adds lasting foundation: EventLog JSONL persistence, ViewStore with async flush, and real deploy plumbing (Dockerfile + fly.toml). B only restyles voting/pin UI in CSS with no behavioral or architectural change.
Side A introduces substantive project infrastructure and persistence: a Dockerfile and Fly deployment config, a reusable EventLog module that appends and reloads JSONL events with error handling and corrupt-line tolerance, and a ViewStore that persists view counts atomically. Side B is almost entirely CSS refinements for the voting UI (spacing, colors, focus states, layout, and theme overrides), improving appearance and accessibility but not adding comparable core functionality.
comparison · c_16438843de8f (tommy-mor) vs c_88200cfa5c4d (tommy-mor)
Side A adds disconnected scaffolding files (Dockerfile, deps.edn, event_log.rs, fly.toml, views.rs) that appear orphaned outside any project structure with no integration evidence, making its lasting value unclear. Side B is a focused, verifiable cleanup that fixes real clippy warnings, restores a broken/missing #[test] attribute (a genuine bug fix), and improves code correctness (is_some_and, deref cleanup), providing concrete, low-risk lasting value.
Side A adds foundational, lasting pieces (EventLog append/load JSONL handling, ViewStore with async flush and atomic writes, multi-stage Dockerfile, and fly.toml deployment/mounts), which define core runtime and shipability. Side B only applies minor clippy cleanups, a missing #[test] attribute, a dead_code allow, and tiny test refactors with no new behavior or design.
Side A introduces substantial new project capabilities and infrastructure: a persistent JSONL event log with append/load APIs and error handling, a view-count store with disk persistence, plus Docker and Fly.io deployment configuration. Side B is almost entirely Clippy-driven cleanups and minor test fixes (adding one missing #[test], simplifying expressions, introducing a type alias, and removing warnings), which improve code quality but do not add comparable lasting functionality.
comparison · c_b8e80699547c (tommy-mor) vs c_16438843de8f (tommy-mor)
Side B adds several genuinely integrated, distinct project pieces (deployment config via Dockerfile/fly.toml, a working async EventLog with corruption handling, a persistent ViewStore with debounced disk flushing, and a Clojure deps.edn), each solving a real infrastructure/persistence need. Side A is a single self-contained Reddit API client that is reasonably well structured but is a single-purpose module whose value is more speculative/isolated, with less evidence of integration into the rest of the system.
Side A delivers a complete, well-engineered Reddit API client (rate limiting via governor, full serde types for posts/comments, custom deserializers, and extraction helpers) that is directly usable and lasting application logic. Side B adds necessary but thinner infrastructure (Dockerfile/fly.toml boilerplate plus simpler EventLog and ViewStore modules), which supports running the service yet contributes less distinctive design substance.
Side A introduces a substantial Reddit API client with built-in rate limiting, HTTP request handling, typed serde models for posts/comments, custom deserializers, and reusable helper methods, forming a coherent new subsystem. Side B adds useful infrastructure such as Docker/Fly deployment files plus persistent event logging and view counting, but much of the patch is operational configuration, and the new code is narrower in scope than the complete API client added in Side A.
comparison · c_16438843de8f (tommy-mor) vs c_2595b6007624 (tommy-mor)
Side B is a substantial, coherent refactor introducing an RPC batch API, room/thread scoping (ScopeId::Room replacing ThreadVisibility hack), and updates across server, CLI, types, and tests/integration scripts to match — real architectural work with passing test coverage. Side A merely adds unintegrated scaffolding (Dockerfile, fly.toml, deps.edn, and orphan .rs files not wired into any module), providing little demonstrable lasting value.
B is a lasting architectural pass: it consolidates the scattered REST surface into a batched RPC API, splits permission boundaries into rooms vs forum threads in events/reducer state, and updates CLI plus tests accordingly. A only adds seed/deploy scaffolding (Dockerfile, fly.toml, deps.edn) plus small standalone modules (event_log, views), which is useful plumbing but not core product design.
Side B performs a substantial architectural migration: it replaces many individual REST endpoints with a unified RPC batch API, introduces room-scoped commands and data structures (room/thread separation), updates the reducer and event model, and adapts the CLI, server, tests, and shared types to the new design. Side A adds useful infrastructure such as a Dockerfile, deployment config, an event log helper, and a persisted view counter, but these are comparatively isolated additions rather than a project-wide API and data model evolution.
comparison · c_16438843de8f (tommy-mor) vs c_c42f908efc44 (tommy-mor)
Side B is a genuine, coherent type-safety refactor that threads CanonicalItemUrl through resolve_item, rank change computation, pair selection, and validation, reducing string-based bugs and improving compile-time guarantees. Side A merely adds unintegrated scaffolding files (Dockerfile, fly.toml, event_log.rs, views.rs, deps.edn) that aren't wired into the codebase and appear to be dumped, disconnected infrastructure rather than a cohesive improvement.
A adds lasting product infrastructure: EventLog JSONL append/load, ViewStore persistence with async flush, plus Dockerfile and fly.toml that make the server deployable. B is a worthwhile type-safety refactor (Deref on URL newtypes, CanonicalItemUrl through resolve_item/validate/pair/rank paths) that removes stringly conversions, but it mostly reshapes existing code rather than introducing new capability.
Side B performs a substantive type-safety refactor by changing `resolve_item` to return `CanonicalItemUrl` instead of `String`, propagating strongly typed canonical URLs throughout ranking, validation, and RPC code, eliminating repeated parsing/wrapping and reducing opportunities for misuse. Side A adds useful infrastructure (Dockerfile, Fly deployment config, event log, and view persistence), but much of it is deployment/support code and new utilities, whereas B improves the core API design and correctness across many existing code paths with lasting architectural value.
comparison · c_3403e5929da7 (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A is a focused, tested bugfix improving sibling nav grouping logic within the actual codebase, with a new test validating the change. Side B adds orphaned files (Dockerfile, fly.toml, deps.edn, event_log.rs, views.rs) sitting at the repo root outside any crate structure, with no integration, no tests, and no indication they are wired into the build—suggesting stray/unintegrated scaffolding rather than lasting value.
A is a precise, tested behavior fix: unranked siblings become one group each (aligned with the doc comment) instead of a single bulk group, with a regression test locking the layout. B is a diffuse “seed” dump (Dockerfile/fly.toml plus root-level event_log/views and a Clojure deps.edn) without evidence of integration or lasting design—more volume, less durable product substance.
Side B adds substantial new infrastructure with a persistent JSONL event log (append/load, directory creation, error handling), a durable view-count store with background flushing, and deployment/build configuration via Dockerfile and Fly.io files. Side A makes a targeted behavioral fix by changing sibling navigation so each unranked sibling is its own group and adds a regression test, which is valuable but much narrower in long-term impact than the foundational runtime and deployment capabilities introduced in Side B.
comparison · c_16438843de8f (tommy-mor) vs c_410d9361a866 (tommy-mor)
Side B implements coherent, tested functionality (Reddit post image/thumbnail rendering with a new render module, unit test with fixture, and CSS) that integrates into existing rendering code paths. Side A adds disconnected scaffolding files (Dockerfile, fly.toml, deps.edn, event_log.rs, views.rs) placed oddly at repo root with no wiring into the actual codebase, suggesting speculative/incomplete seed work of unclear lasting value.
B ships a coherent product feature: Reddit image/link extraction, a dedicated render module wired into entity and rank lists, CSS, and a fixture-backed test. A mostly adds bootstrap/ops surface (Dockerfile, fly.toml, deps.edn) plus standalone event_log/views modules without the same integration, tests, or domain depth.
Side B adds a cohesive feature with lasting architectural value: it extends `EntityData` with `image_url` and `link_url`, introduces a dedicated `render::reddit` module, updates HTML rendering to display Reddit-specific cards and thumbnails, and adds a regression test covering preview/image extraction. Side A adds useful infrastructure (Dockerfile, Fly config) and new persistence helpers (`EventLog`, `ViewStore`), but much of it is deployment scaffolding or isolated utilities without showing equivalent integration into the application's behavior.
comparison · c_16438843de8f (tommy-mor) vs c_ca9169f732b8 (tommy-mor)
Side B is a targeted, real bugfix: it correctly forces OAuth when credentials exist, adds retry-on-401/403 logic with token refresh, improves error reporting, pins the base URL in fly.toml, and includes a new test validating the error-truncation logic. Side A merely adds unintegrated scaffold files (Dockerfile, deps.edn, event_log.rs, views.rs) that aren't wired into the build and provide no demonstrated behavior or fix, offering speculative seed code rather than lasting, verified value.
B is a targeted production fix: force OAuth when credentials exist (no public www.reddit.com fallback that cloud IPs hit as 403 HTML), add AuthRejected + one-shot token refresh, tighten ensure_oauth_token errors, and pin SORTER2_BASE_URL, with a unit test for truncate_for_error. A mainly seeds Dockerfile/fly.toml plus new event_log/views modules and an unrelated Clojure deps.edn—useful scaffolding, but more breadth than a lasting correctness fix on the live Reddit path.
Side B fixes a concrete production behavior by requiring OAuth when credentials are configured, adding token refresh and retry on 401/403 responses, improving error propagation, and introducing a targeted test for error truncation. Side A mostly adds infrastructure and new utility files (Dockerfile, deployment config, event log, view persistence, Clojure deps), but without showing their integration into the application, making their lasting project impact less certain than B's focused reliability fix.
comparison · c_cf0a514b261a (tommy-mor) vs c_16438843de8f (tommy-mor)
Side A is a small, precise cleanup that removes genuinely dead code, correctly reasons about why the guard is redundant, and updates the corresponding test to verify actual behavior—clear, verifiable, lasting value. Side B ('more seed') dumps loose files (Dockerfile, fly.toml, deps.edn, and stray event_log.rs/views.rs at repo root, not integrated into any module tree) with no clear integration or intent, appearing to be unstructured scaffolding rather than a coherent, reviewed contribution.
B adds lasting project infrastructure (Dockerfile, fly.toml deploy config, event_log persistence, and ViewStore), while A only deletes a small dead zero-ratio guard and retunes one test. The deploy/persistence modules outweigh a few lines of redundant validation cleanup.
Side A makes a targeted behavioral cleanup by removing a redundant zero-ratio early return that is already enforced by earlier validation, preserving negative clamping and updating the test to reflect the intended semantics (items and pairs are still registered while zero-weight edges are skipped). Side B adds several new files (Dockerfile, Fly config, event log and view store modules), but the patch shows no integration with the existing codebase, so much of its lasting impact is uncertain from the diff alone.
comparison · c_16438843de8f (tommy-mor) vs c_b7cc67300477 (tommy-mor)
Side B adds a concrete, well-reasoned test verifying that the rank-centrality algorithm recovers the true order from a random spanning tree of votes, directly strengthening confidence in core ranking logic. Side A dumps several new files (Dockerfile, fly.toml, deps.edn, event_log.rs, views.rs) that aren't wired into any existing module (no mod declarations or call sites shown), making it look like speculative scaffolding of uncertain integration value rather than a tested, functional addition.
A adds lasting production pieces: EventLog (JSONL append/load with corrupt-line handling), ViewStore (persisted counts with coalesced flushes), plus Dockerfile and fly.toml for deployable runtime. B only adds one ranking property test; valuable as a correctness check, but narrower and non-runtime compared with A’s core modules and ops surface.
Side A adds substantial new project infrastructure and functionality: a persistent JSONL event log with append/load logic and error handling, a view-count store with asynchronous disk flushing, plus Docker and Fly.io deployment configuration. Side B adds a single regression/property-style test that exercises the ranking algorithm on a random spanning tree with perfect ratios, which improves verification but does not change runtime behavior or architecture.
comparison · c_16438843de8f (tommy-mor) vs c_6209cd238b3f (tommy-mor)
B delivers a real, tested improvement: it fixes a slow full-replay scan (avoiding minutes-long DSL simulation), surfaces detailed parse errors, adds a working `compile --ingest` feature with new tests, and updates docs to match. A merely adds scaffolding (Dockerfile, fly.toml, deps.edn) and two loose top-level .rs files (event_log.rs, views.rs) with no visible module wiring or tests, making its lasting value unclear and possibly dead code.
B lands a lasting design fix: scan becomes a fast DSL-only pass (no per-ingest centrality replay), surfaces full parse_error text, adds compile --ingest with prior-state replay, plus CLI/docs/tests. A mostly seeds ops/config (Dockerfile, fly.toml, deps.edn) and two small new modules (event_log, views) without the same targeted product improvement.
Side B makes the offline tooling substantially more useful and efficient by changing `scan_jsonl` to a fast parse-only pass, surfacing detailed DSL `parse_error` information, adding `compile --ingest` to replay state up to a single event, improving CLI behavior, and adding a regression test. Side A adds important infrastructure (Dockerfile/Fly config) plus new `EventLog` and `ViewStore` modules, but much of it is deployment support or isolated new utilities, whereas Side B directly improves core developer workflows and diagnostics with targeted functional changes.
comparison · c_16438843de8f (tommy-mor) vs c_a337088f57f0 (tommy-mor)
Side B delivers a coherent, integrated improvement to the dev workflow (cargo-watch reload, persistent fixture-data with reused seed summary, smarter port picking) that plugs cleanly into existing tooling. Side A adds infra files (Dockerfile, fly.toml, deps.edn) plus event_log.rs/views.rs dropped at the repo root outside any src tree, suggesting orphaned/unintegrated scaffolding rather than a wired-in feature.
A adds lasting core runtime and ops pieces (EventLog JSONL append/load, ViewStore with async flush, multi-stage Dockerfile, fly.toml mounts/health checks), which the product and deploy path depend on. B improves local DX (cargo-watch fixture, persistent fixture-data/, prefer-8080) plus a small forum HTML trim—useful iteration polish, but not comparable foundational design.
Side A adds substantial project infrastructure and core functionality: a production Dockerfile and Fly.io deployment config, a reusable EventLog module that appends and reloads JSONL events with error handling and corrupt-line tolerance, and a persistent ViewStore that loads and atomically flushes view counts. Side B mainly improves the local development workflow by making the walkthrough fixture persistent with cargo-watch, preferred ports, and fixture reuse, plus a small UI cleanup, which is useful but has a narrower long-term impact on the project's architecture.
comparison · c_16438843de8f (tommy-mor) vs c_b3cb2762569d (tommy-mor)
Side A merely adds standalone, disconnected files (Dockerfile, deps.edn, event_log.rs, views.rs) that appear orphaned—not wired into any build or module tree, so their lasting value is questionable. Side B, despite including a large deleted legacy file, actually integrates a new parser module into the live server (lib.rs, ui_html.rs, html/mod.rs), adds a parser_action/parser_render abstraction, wires up JS for tab-completion, and adds real integration/smoke tests validating the new panel end-to-end.
Side B integrates the full Reddit path parser (moved from legacy, plus new ParserAction/parser_render modules, /ui ParseQuery wiring, home-panel markup, debounced JS tab/completion UX, and integration tests), delivering the project's core interactive navigation feature as lasting design. Side A only seeds ops/scaffold files (Dockerfile, fly.toml, deps.edn) plus smaller standalone modules (event_log.rs, views.rs) with less product surface.