constitution · epochs · watch · epoch 3

commit

c_c6f5afec1d363099ec

tommy-mor · sha1:5350388a24d080f5ec60e51686a3e0d8ab323c58

download patch · raw event

message

Add pool-scoped voting: /vote?pool=<parent> picks pairs from children.

- /vote now accepts an optional `pool` param (parent item path). When
  provided without left/right, it picks the first unvoted pair from the
  pool's children. When provided alongside left/right, it constrains
  "next pair" navigation to siblings within the pool.
- "vote on children" button appears on item pages with ≥2 children,
  linking to /vote?pool=<item>.
- Pool is threaded through VoteComparePost → success JS so in-page
  morph after voting keeps the pool context for next-pair navigation.

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

comparisons involving this commit

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

Side A implements a meaningful identity-model change (UUID as canonical principal, multi-provider linking with conflict handling, privacy semantics) plus a full Reddit OAuth integration, backed by updated docs, mock servers, and unit tests validating trust-weight and link-owner behavior. Side B adds a useful but narrower UX feature (pool-scoped vote pairing) with reasonable but smaller-scope changes and no new tests, making it valuable but less foundational than A's identity/auth rework.

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

A redesigns canonical identity around UUID-only principals with multi-provider OAuth linking (including full Reddit OAuth, conflict handling, private linked-provider UI, trust-weight batch fixes, and test mocks)—foundational auth architecture. B adds a solid but narrower UX feature: optional pool-scoped pair selection and threading pool through vote navigation/UI, without comparable system-level depth.

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

Side A makes a substantial architectural change by shifting identity to UUIDs with OAuth account linking, adding Reddit OAuth support, handling link conflicts, exposing linked providers privately, updating routing, storage queries, and fixing trust-weight projection batching with pending in-batch state. Side B adds a useful pool-scoped voting workflow and UI context propagation, but it is a narrower feature layered onto existing voting rather than a cross-cutting identity and authentication redesign.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_92734e554a25 (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 8:1 · permalink

Side A implements a coherent, working feature (pool-scoped voting) with consistent threading through query params, route handling, and JS morph logic, plus updated tests. Side B's commit removes two legitimate test cases and reverts a CI workflow fix without justification, providing no lasting value and arguably regressing test coverage.

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

A adds a real product feature (pool-scoped /vote, pair picking from children, UI entry point, and pool threaded through post-success nav), with coherent API and routing changes. B only bumps Node in CI and deletes two obsolete ingest tests—useful hygiene, but far less lasting substance.

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

Side A implements a substantive new capability: pool-scoped voting, including `pool` query handling, pair selection from child items, navigation that preserves pool context after voting, UI links to start child voting, and the necessary request/response plumbing. Side B is a small maintenance change that updates the GitHub Actions Node version and removes obsolete tests, which is useful but far less impactful to the project's functionality and design.

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

Side A replaces an O(n log n) per-batch deque-truncation trim with a simpler append-only List + query-time cap, bumps the schema version for correct migration, and adds a dedicated test verifying the new capping behavior — a real correctness/performance fix to the storage layer. Side B adds a sizable new feature (pool-scoped voting) with broad signature changes across many functions, but includes no new tests for the added pool logic, leaving its edge cases (empty pools, duplicate items, next-pair selection) unverified despite the larger diff.

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

B adds end-to-end pool-scoped voting (query param, pair selection, next-pair navigation, success JS, and UI entry points), a durable product capability. A is a real storage/reducer redesign (Deque→List/Vec, write-time trim→read-time cap) but mainly internal simplification with unbounded list growth and no new behavior for users.

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

Side B adds a substantial new user-facing capability: pool-scoped voting, extending the `/vote` flow with a `pool` parameter, automatic pair selection from a parent's children, preserved navigation context after voting, new UI links, request validation, and wiring through handlers and rendering. Side A mainly refactors recent-vote storage from a deque to an append-only list with query-time capping, removing write-time trimming and adding a regression test; while useful as a storage design simplification, it is narrower in project impact than the end-to-end feature introduced in Side B.

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

Side B adds a genuinely new capability (pool-scoped voting across a parent's children, with query param handling, next-pair suggestion within a pool, and threading through post-success JS) touching multiple files with real logic changes. Side A is a smaller, more narrowly-scoped UI improvement (making pin icons clickable to unpin) that mainly adds a form/button and CSS tweaks plus updates a browser test, which is useful but less substantial in scope and design impact than B's feature addition.

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

B adds a real product capability (pool-scoped /vote, first-unvoted pair selection from children, pool-aware next-pair nav, and a “vote on children” entry point) threaded through query parsing, pair suggestion, UI actions, and success JS. A is a focused UX win—turning a static ranked-list pin glyph into an unpin form reusing set_garden_pin plus CSS/tests—but it is incremental polish, not a new voting model.

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

Side B introduces a substantial new capability: pool-scoped voting by adding a `pool` parameter throughout the vote flow, enabling `/vote?pool=<parent>` to choose sibling pairs, preserving pool context across navigation and vote submissions, and exposing the feature with a new 'vote on children' entry point. Side A is a focused UX improvement that makes pinned child-group icons clickable to unpin via the existing `set_garden_pin` flow, with supporting CSS and browser tests, but it extends an existing interaction rather than adding comparable new functionality.

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

Side A introduces a genuinely new, well-tested module (pair.rs) implementing bridge-aware pair selection via connected components, adds a more robust ItemId::from_storage normalization used consistently across reducer/state/reddit import, and refactors the Clojure test harness into a reusable mock-reddit module with new integration/e2e tests. Side B's pool-scoped voting is a reasonable but narrower feature addition that mostly threads an optional pool id through existing vote-compare code with less algorithmic depth and lighter test coverage.

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

A lands foundational pairwise-voting design—new pair selection (bridge-preferring components), a full /vote compare UI with in-place morph after record_vote, ItemId::from_storage normalization, and solid integration/e2e coverage—whereas B only threads an optional pool param and a 'vote on children' link through existing garden vote helpers. A’s changes are larger in lasting product surface and algorithm quality, not merely line count; B is a useful but incremental constraint on already-present compare flow.

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

Side A delivers substantial new functionality and infrastructure: it adds a dedicated pairwise voting page, pair-selection logic that prioritizes bridge comparisons across ranking components, in-place UI morphing after votes, identifier normalization via `ItemId::from_storage`, and accompanying tests. Side B is a focused extension that threads an optional `pool` parameter through the existing vote flow and adds a 'vote on children' entry point, but it primarily builds on mechanisms that Side A introduces rather than providing comparable foundational value.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_16438843de8f (tommy-mor)
~anthropic/claude-sonnet-latest · winner A · 8:2 · permalink

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.

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

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.

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

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_c6f5afec1d36 (tommy-mor) vs c_597d3f736194 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B fixes real, concrete bugs (str/split with a string instead of regex, .getInputStream vs .getRequestBody, nil state/token causing NPEs, missing exception handling causing silent test failures) that were actively breaking OAuth E2E tests — these are genuine correctness fixes with lasting value. Side A adds a plausible feature (pool-scoped voting) with reasonable plumbing, but it's more speculative feature work with less certainty of correctness (e.g., new endpoint behavior, no new tests for the pool path) compared to B's targeted, verifiable bugfixes restoring broken test infrastructure.

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

A adds a real product capability (pool-scoped pairwise voting, optional pool query, constrained next-pair navigation, and a children vote entry point) wired through UI, form/RPC state, and suggest-next logic. B only restores E2E auth by patching test mocks (query split regex, getRequestBody, null-safe token/state, response length) and selector helpers—necessary maintenance, but narrower and test-only versus A’s lasting user-facing design.

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

Side A adds a substantial new capability: pool-scoped voting, including new `/vote?pool=` request handling, automatic pair selection from child items, pool-aware next-pair navigation, UI links, and propagation of pool context through vote submission and success updates. Side B improves the test infrastructure by fixing OAuth mock request parsing, redirect/form handling, null safety, and Playwright selectors so end-to-end authentication tests work again, but those changes primarily affect testing rather than the application's core functionality.

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

Side B removes a ~1700-line over-engineered, unreliable keystroke-transition parser and replaces it with a small, robust paste-and-go URL parser plus matching tests, deleting significant dead complexity (parser_action.rs, race-condition JS/tests) while keeping functionality working and well-tested. Side A adds a legitimate, moderate-scope feature (pool-scoped voting) with clean threading through several files, but it's a smaller, more incremental improvement compared to B's substantial simplification and removal of fragile, hard-to-maintain code.

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

B replaces an unreliable ~1.8k-line keystroke graph (plus parser_action, race mitigation JS, and Playwright race test) with a small, correct paste-and-go URL parser and redirect—lasting design cleanup that removes real failure modes. A is a solid, focused product feature (pool-scoped pair pick/nav and UI affordance), but it extends an existing path rather than retiring a broken subsystem.

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

Side A adds a substantial new capability: pool-scoped voting, including new `/vote?pool=` behavior, pair selection constrained to child items, UI entry points, propagation of pool context through vote submission, and navigation updates. Side B simplifies the Reddit navigation flow by replacing a complex autocomplete parser with paste-and-go URL parsing and redirects, but it mainly removes existing functionality and UI complexity rather than adding comparable long-term project capability.

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_c6f5afec1d36 (tommy-mor) vs c_e57094c6229a (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 6:4 · permalink

Side B refactors Reddit fetching into an event-sourced, explicit user-initiated import (storing raw payloads, replaying on startup, testable config, integration test with mock server), which is a substantial architectural improvement with real bugfix implications (no more implicit auto-fetch on navigate). Side A adds a useful but narrower feature (pool-scoped voting) with good test coverage but smaller overall project impact compared to B's persistence/replay correctness fix.

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

B redesigns entity import around durable Event::EntityImported payloads, explicit user-triggered fetch (no auto-fetch on browse), replay into entity_raw/view, and a real mock-API integration test—foundational persistence and control-flow fixes. A is a solid product feature (pool query param, constrained next-pair navigation, vote-on-children link) but stays within the existing vote UI path and does not change core data architecture.

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

Side B introduces a substantial architectural improvement by replacing transient Reddit entity fetching with explicit user-triggered imports, persisting full API payloads via a new EntityImported event, replaying them during state reconstruction, and adding tests around replay and mock API integration. Side A adds a useful pool-scoped voting workflow (optional pool parameter, child voting entry point, and preserved navigation context), but its impact is confined to the voting UI and navigation, whereas Side B establishes longer-lived persistence and import infrastructure that affects core data handling.

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

Side B introduces a substantial new architectural mechanism—a generic form-template/RPC system (form_template.rs, ui_action.rs, ui_html.rs) with tests, unifying disparate POST handlers into a single /ui endpoint—which is broader infrastructure with lasting reuse value. Side A adds a genuinely useful but narrower feature (pool-scoped voting) that is well-integrated but smaller in scope and reuses B's own ui_html.rs machinery (built atop it), making B foundational and A incremental.

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

B introduces lasting UI architecture: the form_template hole-filler, typed HtmlUiAction + unified POST /ui dispatch, and shared web_post runners—infrastructure reused by later features. A is a solid, scoped product feature (pool-constrained pair picking and nav) but builds on that stack rather than setting a comparable foundation.

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

Side B introduces a reusable browser UI command infrastructure: a new `/ui` endpoint, `HtmlUiAction` parsing with JSON template hole substitution, shared `run_*` handlers for existing web actions, and routing/module integration. Side A delivers a useful feature by adding pool-scoped voting (`pool` query handling, next-pair navigation, and UI links), but it is a targeted capability layered on existing code, whereas Side B establishes broader architectural support that can be reused by future browser interactions.

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

Side A adds a focused, well-tested feature (pool-scoped voting) with clear intent, threading pool state through queries, hrefs, and post-success JS in a way that matches its commit message. Side B's 'url refactor' bundles two unrelated things—a debatable regression that squashes readable /r/{short}/{slug} URLs into a single ambiguous /r/{short}{slug} segment, plus an unrelated large YouTube URL-normalization module and url::Url hashing test suite—making it a messy, scope-creeping commit whose net value is unclear despite its size.

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

A adds a complete, user-facing capability: optional pool-scoped /vote pair picking, next-pair constrained to siblings, UI entry point, and pool threaded through post-success morph—real product behavior with targeted call-site wiring. B’s valuable core (YouTube/query URL identity normalization and room_route helpers) is lasting, but much of the diff is mechanical route/path churn collapsing /r/{short}/{slug} into one segment across handlers, tests, and fixtures, so overall lasting value is lower than A’s focused feature.

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

Side A delivers a complete user-facing capability: `/vote?pool=` can automatically select child-item pairs, keeps pool context through vote submission and next-pair navigation, and adds a "vote on children" entry point, with corresponding query handling and navigation updates. Side B mostly refactors room URL handling into shared helpers and adds URL normalization utilities (including YouTube canonicalization), which improves maintainability and consistency but is primarily structural compared with A's end-to-end feature addition.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_2595b6007624 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 8:2 · permalink

Side B is a substantial architectural migration (REST endpoints → unified RPC batch protocol, room/scope model rework, CLI restructuring, extensive test updates) that lastingly changes how the whole system communicates, whereas Side A is a small, focused feature addition (pool-scoped voting) that is useful but narrow in scope. Despite B's larger diff being partly explained by scope, its content is deliberate consolidation and simplification (removing many near-duplicate REST handlers into one rpc.rs) rather than noise, giving it more durable architectural value than A's incremental UI feature.

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

B is a foundational redesign: it collapses scattered REST handlers into a batch RPC API, splits rooms from forum threads in the event/reducer model (room_id + thread_tag, ScopeId::Room, grants on rooms), and rewires CLI and tests around that model. A is a solid, complete UX feature (pool-scoped /vote and next-pair navigation) but stays local to the garden vote UI and does not reshape core product architecture the way B does.

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

Side B introduces a foundational API redesign by replacing many individual endpoints with a typed RPC batch interface, refactoring the reducer and event model from thread-centric to room/scope-aware data, and updating the CLI and tests to use the new architecture. Side A is a well-executed feature that adds pool-scoped voting, including `pool` query handling, UI links, and context-preserving navigation, but it builds on the existing system rather than reshaping core infrastructure.

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

Side A refines a core ranking algorithm with clear, well-justified tie-breaking logic and backs the change with multiple targeted unit tests verifying the new behavior (attach-before-isolate, zip ordering). Side B adds a useful pool-voting feature across several files but introduces no new tests for the added endpoint/behavior and has more surface area for subtle bugs (e.g., untested pool validation, dedupe assumptions), making it riskier and less rigorously verified than A's focused algorithmic fix.

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

A upgrades the core pair-selection algorithm (bridge sub-priorities for spanning-tree growth, then zip-order adjacent rank refinement with established-component tracking) and locks it in with targeted tests—ongoing quality of every suggested vote. B adds real product surface (pool query param, children button, threading pool through vote UI/JS), but it is largely parameter plumbing over the existing suggest_next_pair_in_pool path rather than deeper ranking design.

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

Side A makes a substantive change to the core pair-selection algorithm by introducing component-aware bridge priorities, rank-based refinement ('zip' ordering) once a pool is connected, and adds targeted tests covering the new behavior. Side B mainly wires an existing capability into the UI and routing by adding pool-scoped `/vote` navigation and context propagation; while useful, it is largely integration work built on the underlying pair-selection logic rather than improving that logic itself.

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

Side A implements a concrete, integrated end-user feature (pool-scoped voting) with real logic changes in routing, next-pair selection, and UI, threading state correctly through the vote flow. Side B adds a useful but peripheral dev-only tool (sorterc) that duplicates existing server validation logic in a separate binary, providing convenience but no core product functionality or bugfix.

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

A adds end-to-end pool-scoped pairwise voting (optional pool query, first-unvoted pair selection, constrained next-pair nav, UI entry point, and form/JS threading), which deepens the core ranking product loop. B is solid reusable offline compile/scan tooling with tests and docs, but it is workspace dev infrastructure rather than a lasting user-facing capability, so it ranks slightly behind.

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

Side A implements a cohesive product feature by extending the vote flow to support pool-scoped comparisons: it adds a new `pool` query parameter, generates initial pairs from a parent's children, preserves pool context through vote submission and next-pair navigation, and exposes the feature with a new "vote on children" UI link. Side B adds valuable developer tooling (`sorterc`) for offline DSL compilation and JSONL validation, but it is workspace-only infrastructure rather than functionality that directly expands the application's behavior.

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

Side A fixes a real correctness issue (wire URLs for ontology items/votes/threads were wrong for private rooms across many RPC endpoints) and replaces a client-only, flicker-prone theme switcher with a server-rendered cookie-based theme that persists correctly across auth/redirects, backed by new unit tests. Side B is a well-scoped but narrower feature (pool-scoped voting) that adds genuine value but touches far fewer correctness-critical paths and has smaller overall impact on the project's URL/API consistency.

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

A delivers lasting infrastructure: private-room wire URLs (`item_path_for_api_in_room`, `forum_thread_web_url`) fixed across RPC plus a durable cookie/POST theme design with auth re-issue and tests. B is a solid, focused pool-scoped voting feature, but narrower in scope than A’s API correctness and theme architecture.

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

Side B adds a substantive new capability: pool-scoped voting, allowing `/vote?pool=...` to select comparison pairs from a parent's children, preserving pool context through vote submission and next-pair navigation, and exposing the feature with a new 'vote on children' UI. Side A is largely a broad UI/theme integration plus room-aware URL adjustments; while useful, much of it is plumbing and presentation, whereas Side B introduces a coherent new workflow with changes across routing, state propagation, and navigation logic.

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

Side B adds a genuinely new, self-contained capability (pool-scoped voting) with clean, well-scoped code changes and modest test touch-ups, providing real user-facing value with low churn. Side A is a large syntax overhaul (explanation-first votes) that, while intentional, is dominated by mechanical reformatting across dozens of test fixtures and docs, making its value density lower despite the larger diff.

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

A rewrites the core DSL so votes are explanation-first (leading `{...}` then the comparison), with a real parser split (`parse_block_prefixed_statement` / `parse_item_definition_statement`), docs, and end-to-end fixture updates—that is lasting language surface area. B adds useful pool-scoped `/vote?pool=` navigation and a “vote on children” entry point, but it is a contained HTML/vote-flow feature on top of existing compare logic, not a foundational design change.

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

Side B adds a substantive new capability: pool-scoped voting, including `pool` query handling, automatic pair selection from a parent's children, preservation of pool context across vote navigation, and UI entry points ('vote on children'). Side A primarily refactors the DSL syntax by moving vote explanations before comparisons and updates the parser, documentation, fixtures, and tests to enforce that new format; while extensive, it is largely a syntax migration rather than adding new project functionality.

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

Side B adds a full vertical feature (RPC command, CLI subcommand, types) backed by a genuinely new integration test suite that verifies security-relevant per-user isolation, giving durable, independently verifiable value. Side A adds a useful UI feature (pool-scoped voting) with real logic changes but only updates one pre-existing unit test's call site rather than adding new test coverage for the new pool behavior, making its correctness less verified despite touching more files.

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

B adds a complete, lasting capability (RoomList RPC + CLI) with clear isolation semantics and a dedicated integration test suite proving users only see granted rooms. A’s pool-scoped voting is useful product work and carefully threads pool through hrefs/UI/JS, but much of the diff is parameter plumbing and call-site updates, with no new tests covering the pool path beyond a signature change.

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

Side A adds a substantial end-user capability by extending the voting flow with pool-scoped navigation, allowing `/vote?pool=...` to automatically select child pairs, preserving pool context through vote submission, and exposing the feature in the UI with supporting query handling. Side B cleanly adds a useful `RoomList` RPC, CLI command, shared types, and thorough integration tests, but it is a relatively self-contained API addition compared with Side A's deeper integration across routing, UI, navigation, and voting logic.

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

Side A fixes a real production bug (Reddit's block page silently poisoning fetches) with a robust retry/refresh mechanism, better error surfacing (truncate_for_error), and includes a unit test validating the fix — this is a correctness/reliability fix with lasting operational value. Side B adds a reasonable feature (pool-scoped voting) that is useful but more speculative UI/UX plumbing without tests, and is lower-stakes than fixing a hard failure mode in production data fetching.

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

A fixes a production-breaking Reddit path by requiring OAuth when credentials exist, refreshing on 401/403, and never falling back to the blocked www.reddit.com API, plus clearer AuthRejected handling—lasting correctness for cloud deploys. B is a solid product feature (pool-scoped /vote and UI wiring) but additive UX rather than fixing broken core data access.

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

Side A makes the Reddit integration substantially more robust by requiring OAuth when configured, adding a retry with forced token refresh on 401/403, propagating token acquisition errors instead of silently falling back, and improving error handling with targeted truncation and a regression test. Side B adds a useful pool-scoped voting feature and threads the new `pool` parameter through the UI and routing, but it is primarily new application functionality, whereas Side A addresses a production reliability issue that prevents blocked cloud deployments from functioning correctly.

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

Side A implements a genuinely new subsystem (a dedicated Reddit fetch worker with dedup, backoff, rate-limit handling, OAuth token refresh, and JSON parsing for both subreddits and posts) backed by unit tests, integrating cleanly into AppState and the browse handler. Side B adds a useful but smaller UX feature (pool-scoped vote pairing) that mostly threads an optional parameter through several existing functions and adds a UI link, which is real but far less substantial in scope and risk than A's networking/backoff/OAuth logic.

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

A replaces a stub Reddit fetch with a full background broker (OAuth, rate-limit/backoff, dedup, JSON→EntityData mapping, browse/ensure_path hooks, and unit tests), adding a lasting data-import subsystem. B is a useful but smaller product polish: threading an optional pool through /vote, pair suggestion, and post-success nav plus a “vote on children” link—clear UX value without new infrastructure.

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

Side A implements a complete Reddit integration pipeline: a background fetch broker, OAuth token handling, rate-limit/backoff logic, JSON parsing into project entities, request deduplication/caching, and wiring it into application state and page loading so Reddit items are populated on demand. Side B is a useful feature that scopes pairwise voting to a parent item's children and threads the new pool parameter through the UI and navigation, but it is a localized workflow enhancement compared with the new external data ingestion subsystem introduced in Side A.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_8c6a5e2e4a54 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 3:2 · permalink

Side B wires up substantial, functional infrastructure: cookie-based web sessions/login/logout, private room browsing with capability checks, a web POST/ingest form, and route wiring for rooms and threads — real, working feature surface despite the stray plan2.md noise file. Side A is a focused, clean feature (pool-scoped voting) that is well-integrated but smaller in scope; B's changes enable broader, more foundational UI capability (auth, rooms, posting) even though it drags in an unrelated markdown artifact that slightly hurts its cleanliness.

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

B re-enables core multi-room HTML UI (ThreadNav abstraction, room index/thread/post/expand routes with ACL checks), browser session cookies + login/logout, and web ingest posting—foundational product surface. A is a useful but narrower incremental feature (optional pool param and next-pair scoping on an already-working vote path) with less architectural weight.

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

Side A implements a coherent new feature with lasting behavior changes: `/vote` gains pool-scoped navigation, optional `pool` query handling, automatic pair selection from a parent's children, UI links to 'vote on children', and propagation of pool context through post-success navigation. Side B mixes many unrelated changes, including a large checked-in design document (`plan2.md`) and broad UI/auth refactoring; while it contains useful work, the patch is diffuse and harder to attribute to a single focused, durable improvement than Side A's end-to-end voting enhancement.

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

Side B fixes a real bug (Reddit children being imported with wrong path/ensure_path semantics, causing incorrect tree structure) and adds/fixes integration tests covering the actual behavior, which is a concrete correctness improvement. Side A adds a new feature (pool-scoped voting) that is useful but more speculative/UI-driven, with less test coverage and more surface area for edge cases (e.g., empty pool handling, query param backward compatibility).

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

A adds an end-to-end pool-scoped voting path (optional pool query, pair pick from children, constrained next-pair nav, UI entry point, and pool threaded through VoteComparePost/success JS), which is lasting product design. B is a real but narrower fix: Reddit children attach via apply_entity_under_parent instead of ensure_path/link_child, titles in unranked labels, and test updates—correct and necessary, but smaller in scope than A’s full workflow.

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

Side B fixes a concrete data-model bug in Reddit child imports by introducing `apply_entity_under_parent`, avoiding incorrect path nesting while still storing entity data, and updates the ranking panel to display imported child titles instead of path-derived labels. It also expands integration tests to cover SSE updates and child fetching. Side A adds a useful new pool-scoped voting feature and threads pool context through navigation, but it is primarily a feature addition rather than a correctness fix to existing behavior.

comparison · c_c6f5afec1d36 (tommy-mor) vs c_55666fe32c48 (tommy-mor)
~anthropic/claude-sonnet-latest · winner B · 3:2 · permalink

Side B fixes a real correctness/data-integrity issue (invalid 0:0 or extreme ratios silently normalized or unbounded) with enforcement at three layers (DSL parser, HTTP handler, reducer) plus solid unit and integration regression tests. Side A adds a useful feature (pool-scoped voting) but with less test coverage of the new branching logic and edge cases, making B's change more clearly correct and durable relative to its scope.

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

A adds a real product capability: pool-scoped pair selection and next-pair navigation, a children UI entry point, and pool threading through the vote POST/success path. B is a smaller but solid multi-layer correctness guard (parser, UI handler, reducer) with good regression tests; it improves data integrity without expanding what users can do.

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

Side A adds a substantial new capability: pool-scoped voting, allowing `/vote?pool=...` to automatically select child-item pairs, preserving pool context through navigation and postback, and exposing the feature via a new 'vote on children' UI. Side B is a solid correctness improvement that enforces valid vote ratios consistently across the UI, DSL parser, reducer, and tests, but it primarily tightens validation of an existing feature rather than expanding the project's functionality.

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

B is a substantive, type-safe refactor that moves scattered string-based URL/canonicalization logic into a shared slug-types crate with correct-by-construction newtypes (GardenItemUrl, ForumThreadUrl, TildeOntologyPath), reducing duplication and improving safety across many call sites while preserving test coverage. A is a smaller, well-scoped feature addition (pool-scoped voting) that adds real user value but touches less surface area and is more incremental/local in impact than B's foundational cleanup.

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

A adds a real end-to-end product capability (pool-scoped /vote, child-pair selection, pool-preserving next navigation, and the item-page entry point) with focused wiring through query, UI action, and success morph. B is largely a relocate-and-retype of existing path/URL helpers into slug-types plus call-site churn; valuable consolidation, but mostly mechanical with little new behavior versus A’s lasting feature surface.

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

Side A adds a substantive user-facing capability: `/vote?pool=` can automatically select child-item pairs, keeps pool context through vote submission and next-pair navigation, and exposes the feature via a new "vote on children" UI link. Side B is a broad architectural refactor that centralizes path and URL types into `slug_types::paths` and updates many call sites, improving consistency and type safety, but it mostly reorganizes existing behavior rather than adding new functionality.

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

Side B fixes a genuine correctness bug (ghost items and falsely-marked-voted pairs from zero-ratio votes) with a minimal, precise change and updates the test to verify the corrected invariant. Side A adds a real feature (pool-scoped voting) with broader surface area and more risk, but is feature churn/expansion rather than a bugfix, and its value is more speculative/UX-dependent than B's clear correctness fix.

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

B fixes a real reducer correctness bug by dropping zero-ratio votes before ensure_item/voted_pairs side effects, preventing ghost items and false voted-pair state; the updated test asserts empty indexes rather than registered no-edge items. A adds useful pool-scoped voting UX (query param, next-pair constraint, “vote on children” entry point) but is feature surface on top of voting, not a core integrity fix.

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

Side A implements a substantial new capability: pool-scoped voting, including `/vote?pool=...` routing, pair selection from a parent's children, preservation of pool context through post-vote navigation, and UI entry points for voting on child items. Side B fixes a real reducer bug by moving the zero-ratio early return before `ensure_item` and `voted_pairs` registration to prevent ghost items and incorrectly marked pairs, but it is a localized correctness fix compared with the broader, integrated functionality added in Side A.

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

Side B fixes a real concurrency bug where a shared sentinel delegate blocked every human user after the first browser vote, with a targeted multi-file fix and a new integration test proving two users can vote independently. Side A adds a genuinely useful feature (pool-scoped voting) but is purely additive UI/UX without addressing any correctness defect, making B's change more critical to actual product correctness.

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

B fixes a core multi-user correctness bug: shared WEB_BROWSER_AGENT/INVITE_BROWSER_AGENT sentinels caused AgentBound on the first browser vote and blocked later humans; making PendingSession.agent optional and posting votes with no delegate restores real multi-user voting, backed by an integration test of two principals. A is a solid product feature (pool query, child pair picking, nav threading, UI button) but builds on voting rather than unblocking it.

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

Side B fixes a fundamental authentication/ownership bug by removing the shared browser sentinel delegate, changing pending sessions to carry an optional agent, ensuring browser-originated writes use no delegate, and adding integration tests proving two different users can both vote without erroneous delegate binding. Side A adds a useful pool-scoped voting workflow with new routing, navigation, and UI links, but it is primarily a feature addition rather than a correctness fix affecting all browser users.

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

Side A removes dead demo-counter code/tests and reworks the core vote pipeline into a real architectural improvement: votes are now committed and rescored via a dedicated async settlement worker with cached scores, and ranking_panel/home no longer take a write lock and recompute PageRank on every request. Side B adds a useful but narrower feature (pool-scoped vote pairs) that is well-contained but doesn't touch core state/performance design, making Side A's change more foundational and higher-leverage for the codebase.

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

A removes throwaway demo-counter scaffolding and adds a lasting settlement worker (batched append + ranking recompute, warm cache, read-only HTTP ranking path via ranked_items_cached), which hardens the core vote/ranking data path. B is a solid product slice (pool-scoped /vote and UI plumbing) but is incremental feature threading atop existing compare flow, not foundational architecture.

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

Side A introduces a substantial architectural improvement by separating ranking computation from cached reads, adding a settlement worker that batches vote persistence and score recomputation, warming the cache at startup, and switching UI rendering to read-only access for faster requests. Although it also removes the demo counter, the enduring value comes from the new cached ranking and asynchronous settlement design, whereas Side B primarily adds a useful but feature-specific pool-scoped voting workflow by threading an optional pool parameter through routing, navigation, and pair selection.

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

Metadata
commit_idc_c6f5afec1d363099ece9bd0a4961bbe77866a833de1f16985c65184cb887eb55
patch_sha2563b24fcb09f5cf0a5d1e0890352dfa29480842f739bd0eab88daf3e542ef72e07
patch_identitygit-patch-id-stable-v1:92f36948621ef499e8f58f901896540e8791a050
committer_timestamp_ms1779570877000