constitution · epochs · watch · epoch 3

commit

c_11d6a0ec9839d29a6b

tommy-mor · sha1:36e92cf261e94e6b3f5515345725bf9e1f7eb025

download patch · raw event

message

Fix /vote/compare page: attribution, fallback, swap button, and route rename.

- Pass WEB_BROWSER_AGENT as delegate_opt out-of-band (not in DSL body text)
- Error instead of falling back to all items when sibling pool < 2
- Remove pointless "swap sides" button
- Rename route /vote/compare → /vote

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

comparisons involving this commit

comparison · c_0957178bd303 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
openai/gpt-chat-latest · winner B · 6:1 · permalink

Commit B makes a broader functional improvement across the application. It fixes multiple issues in the voting flow: passes delegate information separately instead of embedding it in the request text, prevents an incorrect fallback when too few sibling items exist, removes an unnecessary UI control, renames the public voting route, updates navigation and routing, propagates API signature changes, and adjusts tests accordingly. These changes affect behavior, API usage, routing, and test coverage. Commit A is a focused UI/layout fix that moves the view counter into the top navigation and updates CSS to prevent overlap with authentication controls. While useful, its scope and impact are much smaller than the multi-faceted functional changes in Commit B.

openai/gpt-5.3-chat · winner B · 1:6 · permalink

Side B makes substantial functional and architectural changes across the codebase: modifies API signatures, changes request handling, removes incorrect fallback behavior, updates routing (/vote/compare → /vote), adjusts UI logic, and updates multiple tests. Side A is a small UI/layout tweak with minor CSS adjustments. The scope and impact of B are far greater.

openai/gpt-5.2-chat · winner B · 1:6 · permalink

Commit B introduces substantial functional changes across the API, routing, UI logic, and tests: adding a delegate parameter to RPC calls, correcting vote fallback behavior, removing the swap button, renaming routes from /vote/compare to /vote, and updating integration and browser tests accordingly. These changes affect core behavior and multiple modules. In contrast, Commit A is a small UI/layout fix adjusting nav placement and CSS for the view counter. Therefore, Commit B contributed significantly more.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_5e6847233bd6 (tommy-mor)
openai/gpt-chat-latest · winner A · 20:1 · permalink

Commit A makes multiple user-facing and architectural improvements across the application: it fixes vote page behavior, changes delegate handling by passing the browser agent out-of-band, removes an incorrect fallback when too few sibling items exist, simplifies the UI by removing the swap button, renames routes from /vote/compare to /vote, updates tests, and threads the API change through the codebase. These changes affect functionality, routing, correctness, and maintenance. Commit B only deletes a developer notes file with no direct effect on application behavior or infrastructure. As a result, A contributes substantially more.

openai/gpt-5.3-chat · winner A · 10:1 · permalink

Side A makes substantive functional changes across multiple modules: fixes vote flow logic, removes incorrect fallback behavior, updates routing, adjusts UI behavior, and modifies API parameters with real impact on correctness and UX. Side B only deletes a notes file with no runtime effect. The impact difference is large.

openai/gpt-5.2-chat · winner A · 9:1 · permalink

Side A makes substantial functional changes across many files: API signature updates, UI behavior fixes, route renaming with corresponding router and test updates, removal of fallback logic, and UI element removal. It meaningfully alters application behavior and structure. Side B only deletes a single notes file with no impact on runtime functionality.

comparison · c_0957178bd303 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 80:20 · permalink

Side B makes several substantive fixes: correcting attribution by passing delegate_opt out-of-band, fixing a real bug where sibling pool fallback silently expanded to all items instead of erroring, removing dead UI, and consistently renaming a route across code and tests. Side A is a small, purely cosmetic CSS/layout fix moving a view counter into the nav, useful but minor in scope and impact.

~x-ai/grok-latest · winner B · 1:4 · permalink

B fixes real behavior and design: agent attribution moved out-of-band via delegate_opt, sibling-pool fallback that could return wrong pairs is replaced with an error path, dead swap-sides UI is removed, and the route is cleaned up with matching tests. A only relocates the view counter into the nav and tweaks CSS positioning—useful but narrow layout polish.

openai/gpt-chat-latest · winner B · 5:1 · permalink

Side B makes several functional improvements to the voting flow: it fixes delegate attribution by passing the browser agent separately instead of embedding it in the DSL text, prevents incorrect fallback to voting across all items when the sibling pool is too small by returning no next pair, simplifies the UI by removing the unnecessary swap button, and consistently renames the route to `/vote` across handlers and tests. Side A is a targeted UI layout fix that moves the view counter into the top navigation and removes fixed positioning to stop overlap with login controls, but its impact is narrower and primarily presentational.

openai/gpt-5.3-chat · winner B · 1:4 · permalink

Side B fixes real behavior: it stops an incorrect fallback to all items when the sibling pool is too small (now returns None), correctly threads delegate_opt through RPC instead of embedding it in text, and simplifies/clarifies routing by renaming /vote/compare to /vote with corresponding test updates. Side A is a minor UI/layout tweak (moving the view counter into the nav and removing fixed positioning) with limited lasting impact.

openai/gpt-5.2-chat · winner B · 4:1 · permalink

Side B fixes substantive behavior in the /vote flow: it passes WEB_BROWSER_AGENT as an out-of-band delegate instead of injecting it into the DSL text, removes an incorrect fallback when the sibling pool < 2 (returning None instead of voting over all items), drops the pointless "swap sides" button, and consistently renames and rewires the route from /vote/compare to /vote across handlers, links, and tests. Side A is a small UI/CSS tweak moving the view counter into the nav to avoid overlap, which is minor compared to B’s functional and routing corrections.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_5e6847233bd6 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 9:1 · permalink

Side A makes substantive functional fixes: correct out-of-band delegate attribution, real bugfix replacing a silent fallback with an explicit error when the sibling pool is too small, removal of a broken/pointless UI feature, and a route rename applied consistently across code and tests. Side B merely deletes a scratch notes file, which is trivial housekeeping with no functional impact on the project.

~x-ai/grok-latest · winner A · 10:1 · permalink

Commit A delivers real product fixes: correct out-of-band delegate attribution, stopping a bad fallback when the sibling pool is too small, removing a useless control, and a route rename with matching call sites/tests. Commit B only deletes a scratch notes.tdsl file and adds no lasting design or behavior.

openai/gpt-chat-latest · winner A · 20:1 · permalink

Side A makes multiple functional improvements: it correctly passes delegate attribution out-of-band instead of embedding it in DSL text, fixes vote-pair selection by returning no next pair rather than incorrectly falling back to all items when the sibling pool is too small, simplifies the UI by removing the swap button, and consistently renames the public voting route from /vote/compare to /vote across code and tests. Side B only deletes a developer notes file, removing project documentation without adding runtime behavior or architectural value.

openai/gpt-5.3-chat · winner A · 9:1 · permalink

Side A makes functional improvements: it fixes vote pair selection by returning None instead of incorrectly falling back to all items, properly threads delegate_opt through RPC calls, and updates routes and UI behavior (e.g., removing the swap button and renaming /vote/compare to /vote). Side B only deletes a notes file with no impact on runtime behavior.

openai/gpt-5.2-chat · winner A · 9:1 · permalink

Side A makes substantive behavioral changes: it correctly passes `delegate_opt` out-of-band instead of embedding `WEB_BROWSER_AGENT` in the DSL text, prevents incorrect fallback to all items when the sibling pool is < 2 (returning `None` instead), removes the ineffective "swap sides" UI, and renames `/vote/compare` to `/vote` with routing and test updates. Side B only deletes a `notes.tdsl` file containing informal TODO notes, with no impact on runtime behavior.

comparison · c_88200cfa5c4d (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 75:25 · permalink

Side B fixes real functional bugs (attribution text was embedded in DSL body causing incorrect delegate handling, a fallback that silently expanded the vote pool masking insufficient siblings) and performs a coherent route rename with updated tests, delivering lasting behavioral correctness. Side A is purely cosmetic/clippy cleanup (formatting, minor idiom swaps, one previously-missing #[test] attribute) with no functional impact, offering less durable value despite touching more files.

~x-ai/grok-latest · winner B · 1:5 · permalink

B fixes real product behavior: attribution via out-of-band delegate_opt instead of embedding WEB_BROWSER_AGENT in DSL text, stopping the bad all-items fallback when the sibling pool is < 2, removing the pointless swap control, and renaming the route. A is almost entirely clippy/style churn plus wiring a missing #[test] and allow(dead_code), which is useful hygiene but far less lasting design value.

openai/gpt-chat-latest · winner B · 5:1 · permalink

Side B makes functional changes to the vote flow: it passes the browser delegate separately instead of embedding it in DSL text, prevents incorrect fallback to all items when the sibling comparison pool has fewer than two items, removes the unnecessary swap control, and consistently renames the public route from `/vote/compare` to `/vote` across handlers and tests. Side A is almost entirely Clippy-driven cleanup and minor test fixes, with its only behavioral change being enabling one previously unannotated test; the rest are refactors, lint fixes, and dead-code allowances.

comparison · c_cf0a514b261a (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 7:3 · permalink

Side B fixes a real attribution bug (delegate leaking into DSL text), removes a broken fallback that silently used unrelated items, cleans up dead UI code, and renames a route across the whole codebase with matching test updates — a broader, functionally meaningful change. Side A is a small correctness/dead-code cleanup in the reducer with a decent test update, but it's narrower in scope and impact.

~x-ai/grok-latest · winner B · 1:3 · permalink

B fixes real product bugs on the vote page: correct out-of-band delegate attribution instead of embedding the agent in DSL text, and refusing a sibling pool < 2 rather than silently falling back to all items—plus removing a useless control. A only deletes a dead zero-ratio guard already enforced upstream and retargets one test, which is sound hygiene but far less lasting impact.

openai/gpt-chat-latest · winner B · 5:1 · permalink

Side B fixes multiple user-facing correctness issues: it passes the browser agent as an explicit delegate instead of embedding it in DSL text, prevents an incorrect fallback to all items when the sibling pool has fewer than two candidates, simplifies the UI by removing the swap button, and consistently renames the voting route to `/vote` across handlers and tests. Side A mainly removes a now-redundant zero-ratio guard in `apply_vote` and updates the associated test expectations, which is a smaller cleanup relying on existing validation and edge-skipping behavior rather than adding significant new functionality or fixing broader behavior.

comparison · c_978e283f2229 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A restructures the CLI into coherent `forum list/show/post` subcommands, removes the ambiguous 'ingest' vs 'garden' split, and updates docs/tests to match — a genuine design improvement with broad, lasting impact on usability and consistency. Side B fixes real but narrower bugs (delegate leaking into DSL body, incorrect fallback to full item pool, dead swap button, route rename), which are valuable correctness fixes but smaller in scope and effect than A's structural rework.

~x-ai/grok-latest · winner A · 2:1 · permalink

A reshapes the real agent/CLI product surface: forum becomes explicit list/show/post under public|private, ingest is replaced by `forum post <TAG>` with required out-of-band `--delegate`, and docs plus integration tests are updated to match—lasting command design. B’s attribution fix (WEB_BROWSER_AGENT as delegate_opt, not DSL body) and sibling-pool fallback removal are real correctness wins, but narrower; much of B is route rename and removing a swap-button.

openai/gpt-chat-latest · winner B · 3:2 · permalink

Side B makes several functional fixes with lasting behavioral impact: it passes the browser agent as out-of-band delegate metadata instead of embedding attribution in DSL text, prevents incorrect fallback to comparing all items when the sibling pool has fewer than two candidates, removes the unnecessary swap button, and consistently renames the voting route from `/vote/compare` to `/vote`. Side A is a broad CLI/API reorganization and documentation update that introduces `forum list/show/post` subcommands and updates help text and tests, but much of the patch is interface reshaping and documentation rather than fixing incorrect behavior.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_4ed2e2cca39b (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A makes several coordinated, verifiable fixes (correct out-of-band delegate passing, error-instead-of-silent-fallback for small sibling pools, dead button removal, route rename) with updates propagated consistently across server code, tests, and browser test scripts. Side B is a minimal one-line fix defining a missing env var to resolve a NameError, which is valid but much narrower in scope and impact than Side A's multi-part correctness and UX improvements.

~x-ai/grok-latest · winner A · 3:1 · permalink

A delivers several lasting behavioral fixes: out-of-band delegate attribution, correct early-return when the sibling pool is too small (instead of silently falling back to all items), and removal of a useless swap control, plus the route rename. B only adds a missing GITHUB_API_BASE_URL default—important for avoiding a NameError, but a three-line constant definition with far less ongoing design impact.

openai/gpt-chat-latest · winner A · 4:1 · permalink

Side A fixes several functional issues across the voting flow: it correctly passes the delegate attribution out-of-band instead of embedding it in the DSL text, stops incorrectly falling back to all items when the sibling pool is too small by returning no next pair, removes the unnecessary swap control, and consistently renames the route from `/vote/compare` to `/vote` across handlers and tests. Side B fixes a real but narrowly scoped startup/runtime bug by defining `GITHUB_API_BASE_URL` with a default, preventing a NameError in the GitHub OAuth path.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_a896b2dc05d5 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A fixes several concrete correctness issues (out-of-band delegate attribution instead of embedding it in post text, erroring rather than silently falling back to an incorrect large pool when siblings <2, removing a dead swap button) and updates route naming with matching test coverage across Rust and Clojure tests. Side B's Deque→Vec refactor removes the write-time trim (trim_recent_votes) in favor of an append-only list capped only at read time, which risks unbounded on-disk growth for hot nodes—a plausible regression—despite adding a decent capping test for in-memory behavior.

~x-ai/grok-latest · winner B · 2:3 · permalink

B redesigns core vote projection storage (Deque→List/Vec, write-time trim removed, query-time cap, schema v4) with a focused unit test, which is a lasting data-model change in the hot path. A’s valuable fixes (out-of-band WEB_BROWSER_AGENT delegation, no all-items fallback when sibling pool < 2) are real, but much of the diff is route rename (/vote/compare→/vote), nav cleanup, and test URL churn.

openai/gpt-chat-latest · winner B · 3:2 · permalink

Side B makes a substantive architectural change by replacing the persistent recent-vote deque with an append-only list, removing post-apply trimming, capping results at read time, updating the schema version, and adding a regression test that verifies query-time limiting. Side A bundles several useful UI and routing fixes (passing delegate attribution out-of-band, preventing an incorrect fallback when sibling pools are too small, simplifying navigation, and renaming `/vote/compare` to `/vote`), but much of the patch is route and UI churn rather than a deeper storage design improvement.

comparison · c_b00c261f06c2 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B fixes a real correctness bug (falling back to unrelated items when the sibling pool is too small, which silently produced wrong comparisons) and an attribution bug (agent identity leaking into DSL body text), plus removes dead UI and renames a confusing route, all backed by updated integration/browser tests. Side A is mostly CSS/JS tweaks for slider visuals and a minor per-group gradient refactor with good unit tests, but it's more cosmetic polish than structural correctness work.

~x-ai/grok-latest · winner B · 2:1 · permalink

B fixes lasting correctness: agent attribution via out-of-band delegate_opt instead of embedding WEB_BROWSER_AGENT in the DSL body, and stops silently expanding the compare pool to all items when siblings < 2. A’s per-group rank gradients, center-anchored slider polarity, and history/HUD alignment (with tests) are real UX fixes, but B’s protocol and pair-selection behavior outweigh A’s presentation-layer work and B’s route-rename noise.

openai/gpt-chat-latest · winner A · 3:1 · permalink

Side A fixes a concrete UI correctness bug by changing rank gradient calculations from global ranking offsets to per-group indexing, so highlighting behaves correctly across multiple ranking groups, and adds targeted tests to lock in that behavior. Side B mixes several unrelated changes (route rename, removing a button, delegate plumbing, and fallback behavior), with much of the diff consisting of mechanical URL updates rather than a single substantive improvement.

comparison · c_bc8c17a00ed7 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 65:35 · permalink

Side B fixes multiple real bugs (misattributed vote posts, silent fallback to unrelated items masking a data issue, dead UI element) and cleans up route naming across the codebase with corresponding test updates, representing broader functional correctness improvements. Side A is a smaller, well-tested but narrower fix that only addresses one specific import edge case (pinned Reddit posts).

~x-ai/grok-latest · winner B · 2:1 · permalink

B fixes real product behavior on a core path: delegate attribution is passed out-of-band via `delegate_opt` instead of embedded in body text, and `suggest_next_vote_pair` no longer silently falls back to the full item set when the sibling pool is too small. A is a clean, tested Reddit filter for stickied/pinned posts, but it is narrower import hygiene; much of B’s remaining diff is route rename/UI cleanup, so A still carries solid secondary value.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes a concrete data-import issue by filtering Reddit stickied/pinned posts during subreddit listing parsing, adds a dedicated helper that checks both `stickied` and `pinned` flags, and includes a regression test verifying only normal posts are imported. Side B bundles several UI and routing tweaks plus a small behavioral fix (returning no next pair instead of falling back to all items), but much of the patch is route renaming, link updates, and interface cleanup rather than durable core functionality.

comparison · c_597d3f736194 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B fixes real production logic (correcting the vote-suggestion fallback that silently degraded to the wrong pool, moving agent attribution out-of-band, removing a dead 'swap' button, and simplifying the route), all backed by updated integration tests — genuine behavioral improvements to the running app. Side A is a solid but narrower fix, correcting several test-harness bugs (wrong Java methods, string vs regex split, null handling) that only restore E2E test reliability without changing product behavior.

~x-ai/grok-latest · winner B · 2:3 · permalink

B improves production behavior with a real design fix (WEB_BROWSER_AGENT via delegate_opt instead of DSL body text) and correct next-pair logic (return None when sibling pool < 2 instead of silently falling back to all items), plus useful UX/route cleanup. A restores E2E auth with solid mock fixes (request body API, regex split, nil-safe token/state handling) but is test-infrastructure only, so it lands slightly less lasting product value despite being precise bugfixes.

openai/gpt-chat-latest · winner A · 4:1 · permalink

Side A repairs the OAuth test infrastructure with concrete correctness fixes: it corrects query parsing (`str/split` with regex), reads POST bodies from `getRequestBody`, avoids null handling crashes, fixes redirect/state handling, wraps the mock handler to prevent server crashes, and updates Playwright helpers to use real selectors and deterministic waits. Side B contains a mix of UX and routing changes (renaming `/vote/compare` to `/vote`, removing the swap button, changing fallback behavior, and passing a delegate option), but those are largely feature and cleanup changes rather than restoring broken core test functionality.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_4a5c84c0a37b (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 3:2 · permalink

Side A fixes real correctness bugs (out-of-band delegate attribution instead of embedding agent tag in DSL body, erroring on insufficient sibling pool instead of silently falling back to all items) and consistently renames the route across server code and all test suites. Side B mainly improves href encoding (a smaller correctness nit) and rewrites a browser test for stronger assertions, which is valuable but narrower in scope and impact than A's fixes to core RPC/vote semantics.

~x-ai/grok-latest · winner A · 3:2 · permalink

A lands real behavioral fixes: WEB_BROWSER_AGENT moved to out-of-band delegate_opt (correct attribution), sibling pools with <2 items return None instead of falling back to the global item set, and dead “swap sides” UI is removed. B’s display_path href fix is worthwhile and the 45-pair ranking assertion is strong test value, but it is a narrower production change plus test hardening versus A’s multiple correctness fixes.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes multiple production behaviors: it correctly passes delegate attribution out-of-band instead of embedding it in DSL text, prevents an incorrect fallback to all items when a sibling pool has fewer than two candidates by returning no next pair, and simplifies the public interface by renaming `/vote/compare` to `/vote` while removing the unnecessary swap button. Side B improves URL generation to use display paths and substantially strengthens browser test coverage with a full 45-pair ranking verification, but much of its patch is test code rather than changes to runtime behavior.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_7ec4b410de02 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B adds genuine user-facing functionality (clickable unpin from ranked child groups) with corresponding CSS and expanded browser test coverage, fixing a real UX gap. Side A is mostly a route rename and minor cleanup (removing a swap button, fixing a fallback edge case), which is useful but smaller in scope and partly cosmetic (renaming /vote/compare to /vote across many call sites).

~x-ai/grok-latest · winner A · 2:1 · permalink

A fixes real correctness issues: delegate attribution moved out-of-band into rpc_post instead of DSL body text, and sibling-pool < 2 no longer silently falls back to all items. B only adds unpin clickability on ranked child rows (reuse of existing set_garden_pin) plus CSS/tests—useful UX parity but narrower and less foundational than A’s behavior and API fixes.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes multiple behavioral issues: it correctly passes delegate attribution out-of-band instead of embedding it in the DSL, stops incorrectly falling back to all items when a sibling pool has fewer than two candidates by returning no next pair, and updates routing from `/vote/compare` to `/vote` consistently across server code and tests. Side B is a solid UX improvement that makes pinned icons in ranked child groups submit the existing unpin flow, but it extends an existing feature rather than correcting several core behaviors.

comparison · c_af08bd851e49 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 60:40 · permalink

Side A introduces the core pairwise-voting infrastructure (pair.rs bridge-selection algorithm with tests, vote.rs compare page, morph-based vote recording) plus a real correctness fix (ItemId::from_storage normalizing reddit permalink slugs) and adds test coverage/refactors test support code. Side B is a narrower, later fix-up (attribution placement, removing a fallback bug, dropping a UI button, route rename) that is useful but smaller in scope and builds on infrastructure like A's rather than creating it.

~x-ai/grok-latest · winner A · 5:1 · permalink

A lands core lasting surface area: pair selection with bridge/component priority (pair.rs), the full /vote compare UI + in-place morph after record, ItemId::from_storage normalization across import/reducer paths, and real integration/e2e coverage. B is smaller corrective polish on an existing flow—delegate attribution plumbing, stop falling back when the sibling pool is <2, drop swap, and rename /vote/compare→/vote—valuable but incremental versus A’s design and feature weight.

openai/gpt-chat-latest · winner A · 9:2 · permalink

Side A adds substantial new functionality: a complete `/vote` comparison page, pair-selection logic that prioritizes bridge comparisons across connected components, in-place UI morphing after votes, improved item ID normalization (`from_storage`) to avoid inconsistent Reddit paths, and accompanying integration/unit tests. Side B mainly refines an existing feature by renaming `/vote/compare` to `/vote`, removing the swap button, fixing delegate attribution handling, and preventing an undesirable fallback when too few sibling items exist; these are useful polish and correctness fixes but have much narrower long-term impact.

comparison · c_3f420a1f5aa1 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A delivers a coherent feature (server-rendered, cookie-persisted themes replacing a client-only localStorage hack) plus a real correctness fix for private-room item/URL paths in the API, backed by new unit tests. Side B is a solid but narrower bugfix/cleanup (route rename, better delegate attribution, removing a fallback bug and a dead UI button) with good test updates, but it's smaller in scope and impact than A's broader feature and correctness work.

~x-ai/grok-latest · winner A · 3:1 · permalink

A delivers lasting infrastructure: server-side theme cookies with POST /theme, auth cookie re-issue so login does not drop theme, layout/CSS integration, plus item_path_for_api_in_room/forum_thread_web_url and RPC/next-hint wiring so private rooms emit correct /r/… ontology and thread URLs (with tests). B is valuable but narrower—out-of-band WEB_BROWSER_AGENT delegate, drop the all-items next-pair fallback, remove swap, and rename /vote/compare→/vote—real fixes, but less project surface than A’s combined theme + room wire-path work.

openai/gpt-chat-latest · winner A · 5:1 · permalink

Side A implements a substantial, cross-cutting feature set: persistent theme selection via validated cookies and a new `/theme` endpoint, propagates theme state through page rendering and authentication so login preserves the user's theme, and adds room-aware URL generation for RPC/API responses with dedicated helper functions and tests. Side B makes useful but narrower fixes—passing browser delegate metadata out-of-band, preventing an incorrect fallback when too few sibling items exist, removing a redundant swap button, and renaming `/vote/compare` to `/vote`—but its impact is much more localized.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A adds a coherent, testable feature (pool-scoped voting) that threads a new parameter cleanly through the routing, JS morph, and UI (child-listing button), including test updates for the new signature. Side B is a useful but smaller bundle of fixes (attribution placement, removing a stray button, error-on-empty-pool, and a route rename) that mostly touches call sites and tests without introducing new capability, making A's contribution more substantial and lasting.

~x-ai/grok-latest · winner A · 2:1 · permalink

A adds lasting product capability: optional pool-scoped pair selection, constrained next-pair navigation, and a 'vote on children' entry point, with pool threaded through hrefs, post success JS, and UI actions. B’s value is real but narrower—correct delegate attribution, refusing tiny sibling pools instead of falling back to all items, dropping swap, and renaming /vote/compare→/vote—mostly correctness and cleanup on an existing surface rather than new design.

openai/gpt-chat-latest · winner A · 5:2 · permalink

Side A adds a substantive new capability: pool-scoped voting by introducing an optional `pool` parameter, selecting initial pairs from a parent's children, constraining next-pair navigation within that pool, preserving pool context through vote submission, and exposing the feature via a new 'vote on children' UI link. Side B is mostly cleanup and UX refinement—renaming `/vote/compare` to `/vote`, removing the swap button, fixing delegate attribution handling, and preventing an undesirable fallback to all items when no sibling pool exists—but these are narrower improvements than the new end-to-end functionality in Side A.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_66eb04076a98 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A fixes multiple real bugs across the request path (out-of-band delegate attribution, incorrect fallback that silently expanded the sibling pool, dead swap-side UI, and a route rename), touching rpc, ui_html, vote.rs, lib.rs and updating integration tests/browser tests consistently. Side B is a smaller, cosmetic-only change (color gradient normalization) with good test coverage but lower functional impact and narrower scope than A's cross-cutting correctness fixes.

~x-ai/grok-latest · winner A · 2:1 · permalink

A fixes real behavioral bugs: out-of-band WEB_BROWSER_AGENT delegation (correct attribution instead of stuffing it into DSL text), and refusing next-pair suggestions when the sibling pool has fewer than 2 items instead of silently falling back to the entire item set. B’s min–max score gradient is a clear UX improvement over ordinal coloring, but it is presentational polish versus A’s correctness and routing fixes.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes multiple functional issues: it passes delegate attribution out-of-band instead of embedding it in DSL text, prevents an incorrect fallback to all items when the sibling pool has fewer than two candidates by returning no next pair, and simplifies the voting flow by removing the swap button while consistently renaming the route from `/vote/compare` to `/vote` across server code and tests. Side B improves UI coloring by basing gradients on normalized vote scores within a group and adds solid tests, but this is primarily a presentation enhancement rather than a correctness or workflow fix.

comparison · c_e57094c6229a (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A introduces a substantial, well-architected feature (explicit user-triggered Reddit entity import) with proper event-sourcing (raw payload persisted, view derived at replay time), config injection for testability (RedditApiConfig, oauth/api base overrides), and both Rust unit tests plus an end-to-end Babashka integration test with a real fixture. Side B is a smaller set of genuine but narrower bugfixes (out-of-band attribution, removing a bad fallback, dropping a pointless button, and a route rename) that are correct and useful but lower in architectural weight and reach than A's feature work.

~x-ai/grok-latest · winner A · 4:1 · permalink

A lands a lasting architecture change: event-sourced EntityImported payloads, raw+view entity storage, explicit fetch UI instead of auto-fetch on browse, configurable Reddit API/OAuth bases, and a full mock integration test. B is real but narrower—delegate attribution out-of-band, stopping wrong all-items fallback, dropping swap, and renaming /vote/compare→/vote—valuable correctness polish without comparable system impact.

openai/gpt-chat-latest · winner A · 5:1 · permalink

Side A introduces substantial new functionality and architecture: explicit user-triggered Reddit entity fetching, persistence of full API payloads via a new `EntityImported` event, replay support, configurable API/OAuth handling, dotenv loading, and tests covering import/replay behavior. Side B mainly fixes and simplifies the voting UI by correcting delegate attribution, preventing an incorrect fallback when too few sibling items exist, removing the swap button, and renaming `/vote/compare` to `/vote`, which are useful but much narrower in long-term impact.

comparison · c_45dfa34511fe (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 3:2 · permalink

A does a genuine cross-cutting refactor: it introduces `room_route_segment`/`room_id_from_route_segment` helpers to replace ad-hoc split_once logic scattered across many files, plus a new URL-normalization module (with solid test coverage) that fixes real identity bugs like YouTube URL variants and query-order collisions. B is a smaller, useful bugfix (attribution leak, dead swap button, route rename) but touches far less surface and adds less lasting infrastructure than A's DRY refactor and normalization logic.

~x-ai/grok-latest · winner A · 3:1 · permalink

A lands lasting design: shared room route encode/decode (`room_route_segment` / `room_id_from_route_segment`), a simpler `/r/:room_key` surface wired through routes/nav/tests, plus real external URL identity normalization (YouTube rewrites, query sorting, case policy). B’s patches are correct but narrower—delegate attribution out-of-band, stop the bad <2-sibling fallback, drop swap, rename `/vote/compare`→`/vote`—valuable fixes without comparable structural weight.

openai/gpt-chat-latest · winner A · 5:2 · permalink

Side A introduces a substantive URL-routing refactor by centralizing private room path encoding/decoding (`room_route_segment`/`room_id_from_route_segment`), replacing ad hoc string splitting across handlers, routes, navigation, URL builders, and tests. It also adds reusable URL normalization utilities (including canonicalization for external URLs such as YouTube links), improving long-term consistency and maintainability, whereas Side B mainly fixes vote-page behavior, removes an unnecessary UI control, renames `/vote/compare` to `/vote`, and corrects delegate handling for vote posts.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_c25451965a7f (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

B fixes a real bug (hardcoded staging hostnames breaking custom-host deploys) by consolidating logic into a shared util function used across six OAuth integration files, and correctly wires up CI deploy triggers—improving deployability and maintainability. A is a decent focused bugfix/cleanup for the vote/compare route (better error handling, dead code removal) but is more narrowly scoped UI polish with smaller lasting architectural impact than B's cross-cutting infrastructure fix.

~x-ai/grok-latest · winner A · 3:2 · permalink

A fixes real vote-path behavior and design: WEB_BROWSER_AGENT is passed out-of-band via delegate_opt instead of DSL body text, sibling pools < 2 no longer silently expand to all items, and dead UI (swap) is removed—plus route/tests stay consistent. B’s HOSTNAME/window.location.origin consolidation and staging deploy trigger are useful ops/portability cleanups, but mostly DRY/config rather than deeper product logic.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes multiple user-facing correctness issues in the voting flow: it passes the browser agent as an explicit delegate parameter instead of embedding it in DSL text, prevents an incorrect fallback to all items when a sibling pool has fewer than two candidates by returning no next pair, and updates routing/UI to the simplified `/vote` endpoint while removing the unnecessary swap button. Side B usefully centralizes base URL generation around `HOSTNAME`/`window.location.origin` and updates deployment configuration, but its changes are primarily configuration and URL handling rather than core application behavior.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_1c1c8e7a2de8 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B adds a real CLI feature (room create) plus a genuine simplification—removing an unused visibility concept that only ever had one meaningful value ('private'), simplifying the reducer's HashMap<String,RoomState> to a HashSet<String> and cleaning up events/timeline/tests consistently across the codebase. Side A is a smaller, more surface-level fix (route rename, small bug fixes, removing a button) that is useful but narrower in scope and impact than B's cross-cutting simplification plus new CLI capability.

~x-ai/grok-latest · winner B · 3:2 · permalink

B delivers a real product path (CLI `room create`) and a lasting domain cleanup: drops unused `ThreadVisibility`/`RoomState`, simplifies `rooms` to a `HashSet`, and aligns RPC/events/reducer/tests around private-only rooms. A’s delegate out-of-band fix and “no sibling pool fallback” are genuine correctness/UX fixes, but the route rename and swap-button removal are thinner polish with less structural impact.

openai/gpt-chat-latest · winner B · 3:2 · permalink

Side B adds a substantive new CLI capability (`room create`) end-to-end, wiring a new command through the client, RPC, server, and documentation so users can create private rooms directly. It also simplifies the room model by removing the unused visibility concept and replacing the room registry with a `HashSet` of room IDs, whereas Side A mixes one important bugfix (passing the delegate out-of-band and avoiding an incorrect fallback when too few sibling items exist) with mostly UX cleanup and route renaming.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_64faa3bee86f (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 55:45 · permalink

Side A fixes a real correctness bug (silent fallback to the full item pool instead of erroring when the sibling pool is too small), corrects the delegate/attribution plumbing, removes a dead UI button, and updates all affected tests/routes consistently. Side B is a reasonable UX improvement (fragment-based auth flow) but changes a global submit-handler behavior with more risk and no test coverage, making it a slightly less solid, well-verified change than A.

~x-ai/grok-latest · winner A · 2:1 · permalink

A fixes real correctness issues: vote attribution via out-of-band delegate_opt instead of stuffing WEB_BROWSER_AGENT into the DSL body, and refusing a bad all-items fallback when the sibling pool is &lt; 2. B’s auth fragment/morph path is solid UX infrastructure, but it largely replaces working redirects rather than repairing broken behavior; A’s route rename/swap removal are lighter, yet the two logic fixes outweigh B’s polish.

openai/gpt-chat-latest · winner B · 2:3 · permalink

Side B changes the auth flow to return HTML fragments and extends the shared Poem form interceptor to morph a form's innerHTML when the response contains HTML, enabling inline success/error handling without redirects while preserving existing empty-body POST behavior. Side A mixes a real bug fix (avoiding fallback to all items when the sibling pool is too small and passing delegate attribution out-of-band) with lower-impact cleanup such as removing the swap button and renaming `/vote/compare` to `/vote`, so its lasting design impact is somewhat smaller overall.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_3ff71f7eaeda (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B delivers more substantive functional value: a real vote-count feature (edge_vote_count_for_pair with unit test) surfaced in the UI, plus a genuine bugfix converting a dead pin-HUD link into a working unpin form with corresponding CSS and browser test coverage. Side A is a smaller cleanup (route rename, removing a button, out-of-band delegate) that is useful but narrower in scope and less tested/verified than B's changes.

~x-ai/grok-latest · winner A · 2:1 · permalink

A fixes lasting correctness: VOTE attribution via out-of-band delegate_opt instead of stuffing WEB_BROWSER_AGENT into DSL body text, and stops silently expanding the sibling pool to all items when <2 (returns None). B’s vote-count badges and pin-HUD→unpin are useful UX polish with tests/CSS, but they are affordance/work-surface changes rather than core behavior fixes, so A carries more durable design value despite similar surface area.

openai/gpt-chat-latest · winner A · 3:2 · permalink

Side A fixes multiple functional issues: it correctly passes the browser agent as an out-of-band delegate option instead of embedding it in DSL text, prevents incorrect fallback to all items when the sibling comparison pool is too small by returning no next pair, removes an unnecessary swap control, and consistently renames the compare route from `/vote/compare` to `/vote` across server code and tests. Side B adds useful UI improvements such as displaying pairwise vote counts and making the pin HUD perform an unpin action, but these are primarily feature and UX enhancements rather than correcting core behavior.

comparison · c_effff18688f9 (tommy-mor) vs c_11d6a0ec9839 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A eliminates a duplicated web_post.rs module by unifying all /post, /post/check, /post/redact logic into a single /ui dispatcher with one shared session-resolution helper, removing ~360 lines of parallel/duplicate logic and updating tests and fixtures to match — a genuine architectural consolidation with lasting maintainability benefit. Side B is a set of narrower, real fixes (out-of-band delegate attribution, stricter vote-pool fallback, dead swap button removal, route rename) that are correct but smaller in scope and impact compared to A's structural DRY-up of the entire web ingest/check/redact pipeline.

~x-ai/grok-latest · winner A · 3:1 · permalink

A consolidates browser ingest/check/redact onto a single POST /ui dispatcher, deletes the duplicate web_post module and routes, and adds shared WebSession resolution—lasting architectural simplification used across forms and tests. B’s vote fixes (out-of-band WEB_BROWSER_AGENT delegate, no fallback when pool < 2) are real correctness wins but narrower, and much of the diff is route rename plus removing the swap button.

openai/gpt-chat-latest · winner A · 4:1 · permalink

Side A consolidates the browser posting flow into a single `POST /ui` RPC-based dispatch, introduces `resolve_web_session` to avoid repeated auth/session extraction, removes the redundant `web_post.rs` handlers, updates forms, routes, and tests, and centralizes shared logic—an architectural simplification with broad, lasting impact. Side B contains useful but narrower fixes: passing browser attribution out-of-band via `delegate_opt`, preventing an incorrect fallback when too few sibling items exist, removing a redundant UI button, and renaming `/vote/compare` to `/vote`, but these are incremental compared with A's substantial refactor.

comparison · c_11d6a0ec9839 (tommy-mor) vs c_6f04dcb2e38c (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 6:4 · permalink

Side A fixes a real, user-facing bug (attribution text leaking into DSL body, silent fallback to entire item pool producing nonsensical pairs, dead swap button) and cleanly renames a route across code and tests, all verified by adjusted integration tests. Side B is a substantial internal refactor removing legacy projection code for an evidence/ledger system, which is reasonable cleanup but is narrower in scope (affects one internal admin/evidence UI) and mostly deletes now-unneeded fallback logic rather than fixing an active correctness bug affecting end users.

~x-ai/grok-latest · winner B · 2:1 · permalink

B removes an entire dual-path legacy projection layer (_legacy_commit_row/_legacy_observation and GitDiscovery/Emission fallbacks on epoch/commit pages), making Evidence envelopes the sole source of truth and tightening Emission required fields—durable architectural cleanup. A’s real wins are the out-of-band delegate attribution fix and stopping the bad all-items fallback, but they sit beside lower-impact renames and UI chrome removal, so less structural lasting value.

openai/gpt-chat-latest · winner B · 4:1 · permalink

Side B removes the legacy GitDiscovery projection path and makes the evidence model authoritative by requiring emission metadata fields, deleting fallback lookup code, simplifying epoch/commit pages to use Evidence events only, and returning not-found instead of synthesizing historical views. In contrast, Side A mixes one real behavior fix (avoiding fallback to all items when the sibling pool is too small and passing delegate attribution out-of-band) with lower-impact UI and routing changes such as removing the swap button and renaming `/vote/compare` to `/vote`.

The full patch is loaded only by the download route: download patch

Metadata
commit_idc_11d6a0ec9839d29a6b91b006aef45ffc9ccbf09ed605d3c0a801540537f0381a
patch_sha256439a1870c5e0c49fa011425c3634f541e089619822ba57cf82b8a4a07668df9f
patch_identitygit-patch-id-stable-v1:a57f87037c0f9644668973f6bb766975f003b1df
committer_timestamp_ms1779569948000