constitution · epochs · watch · epoch 3

commit

c_c25451965a7f8017ef

tommy-mor · sha1:6120bd96061c1a9f0d6bfaa3e7b4133ccbcb4783

download patch · raw event

message

fix redirect urls for custom hosts and deploy from staging

Use HOSTNAME and window.location.origin instead of hardcoded staging.sorter.social, and trigger fly deploys on pushes to staging.

Co-authored-by: Cursor <cursoragent@cursor.com>

comparisons involving this commit

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

Side B is a focused, genuine bugfix: it replaces multiple hardcoded staging/production hostnames with a single reusable `get-base-url` util (reducing duplication) and fixes real broken redirects for custom hosts plus corrects the CI deploy trigger to the staging branch. Side A, while large, is mostly a mechanical move of legacy/dead code (`legacy/parser.rs` → `server/src/parser.rs`) with type renames (UIAction→ParserAction) and duplicated test bodies verbatim, which inflates line count without adding much genuinely new, verified logic beyond wiring speculative UI hooks.

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

Commit A integrates a full Reddit path parser (graph, actions, render, UI morphing, debounced input/Tab completion, and tests) into the live server, turning legacy code into a working navigate panel; B only centralizes base-URL logic via HOSTNAME/origin and switches the Fly workflow to staging. The feature wiring and product surface in A outweigh B’s targeted ops/config fixes.

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

Side A adds a substantial new capability by integrating a Reddit path parser into the server and UI: it introduces parser modules, rendering, request handling, client-side interactions for live parsing/tab completion, and corresponding integration tests. Although much of the parser code is moved from a legacy location into the server, the commit also wires it into the application and exposes new functionality, whereas Side B mainly centralizes base-URL generation via a shared utility, replaces hardcoded redirect hosts with HOSTNAME/window.location.origin, and adjusts the deployment workflow to deploy from the staging branch.

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

Side A is a solid, focused fix that centralizes hostname/base-URL logic into one util function, removing duplicated hardcoded strings across multiple files—clear, low-risk improvement. Side B is a larger, more substantive change that removes an entire unused ThreadVisibility concept from events, reducer, timeline, RPC, CLI, and tests, simplifies rooms from a HashMap to a HashSet, adds a new CLI `room create` command with documentation, and updates integration tests—representing more real design simplification and feature completion across the stack, despite being messier and touching more files/tests.

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

Side B adds the missing CLI `room create` path and lasting domain simplification (drop ThreadVisibility/RoomState, rooms as HashSet, cleaner RoomCreated events and RPC), with matching docs/tests; Side A is a useful but narrower consolidation of hardcoded OAuth/redirect base URLs plus a staging deploy branch flip.

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

Side A fixes a real deployment and correctness issue by centralizing base URL generation in `app.util/get-base-url`, replacing scattered hardcoded host/environment logic across multiple OAuth/login callback paths, using `window.location.origin` on the frontend, and updating the deployment workflow to deploy from `staging`. Side B adds a useful `room create` CLI command and simplifies room handling by removing unused visibility state, but much of the patch is API/docs plumbing and feature exposure rather than fixing cross-environment correctness problems.

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

Side B fixes a real, deployed bug (hardcoded staging URLs breaking custom hosts/OAuth redirects) by centralizing base-URL logic in a util function and updating deploy CI, touching multiple live modules consistently. Side A merely adds a new, unused reddit.rs client module with no evidence of integration into the actual project (this project appears to be a Clojure/JS app, making the Rust file's relevance and lasting value unclear).

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

Side A adds a complete, production-ready Reddit API client (rate-limited requests, typed serde models for posts/comments/listings, custom deserializers, and helper extractors) that forms lasting foundational infrastructure. Side B only consolidates duplicated hostname logic into a shared util, switches deploys to staging, and makes frontend origins dynamic—valuable correctness fixes but narrower in scope and impact.

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

Side A introduces an entire Reddit integration layer: a rate-limited HTTP client, multiple API endpoints, structured serde models for Reddit responses, custom deserializers, error handling, and helper methods for working with posts and comments. Side B improves configuration by centralizing base-URL generation, replacing hardcoded callback URLs with a shared HOSTNAME-based utility and window.location.origin, and changing the deployment workflow to staging, but its impact is more localized.

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

Side B fixes a real, spreading bug: hardcoded hostnames/URLs across multiple OAuth/redirect integrations (linear, twitter, spotify, youtube, login, oauth, frontend authUtils) that would break custom deployments, consolidating logic into a single util.get-base-url and enabling CI deploys from staging. Side A is a minor, low-risk cleanup removing dead-code guard in one reducer function, useful but narrow in scope and impact compared to B's cross-cutting correctness and deployability fix.

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

B lands a real functional fix by centralizing base-URL logic (HOSTNAME / window.location.origin) across OAuth, login, Spotify/Twitter/YouTube callbacks and the frontend, plus switching the deploy workflow to staging—removing brittle hardcoded hosts. A only deletes a few lines of already-dead zero-ratio guard and tweaks the matching test, which is worthwhile hygiene but far smaller lasting impact.

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

Side B introduces a reusable get-base-url utility driven by HOSTNAME and updates multiple OAuth/login/callback paths to use it instead of hardcoded production/staging hostnames, plus the frontend now derives its base URL from window.location.origin. These are lasting functional improvements for custom-host deployments and deployment workflow, whereas Side A mainly removes a redundant zero-ratio guard and adjusts the associated test expectations after relying on existing parser validation and edge-skipping behavior.

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

Side B fixes a real, broad bug: hardcoded hostnames/URLs (oauth callbacks, redirects, deploy branch) across multiple modules were centralized into a single util function that respects HOSTNAME/window.location, which is a genuine correctness/maintainability improvement affecting deploy and auth flows. Side A is a UI polish commit (vote counts, HUD unpin button, CSS tweaks, tests) that's fine but more localized cosmetic/UX churn with less structural impact than fixing broken environment-dependent redirect logic.

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

B fixes systemic broken redirect/OAuth base URLs by centralizing HOSTNAME-aware get-base-url (replacing divergent hardcoded sorter.social/InetAddress cases across linear/login/oauth/spotify/twitter/youtube) and making the client use window.location.origin, plus aligning deploy to staging—core correctness for multi-host. A adds useful garden UX (edge vote counts, HUD unpin via set_garden_pin clear) with tests, but it is incremental product polish rather than a cross-cutting host bugfix.

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

Side B removes hardcoded hostnames by centralizing base URL generation in `app.util/get-base-url`, updates multiple OAuth/callback paths to use it, and makes the frontend derive its base URL from `window.location.origin`, fixing redirects for custom hosts across the application. It also adjusts deployment to run from the staging branch. Side A adds useful UI improvements (vote counts beside compare links, HUD unpin action, tests, and styling), but these are narrower feature enhancements rather than an infrastructure fix that affects many authentication and redirect flows.

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

Side B fixes a real, user-facing bug (hardcoded staging hostnames breaking OAuth redirects on custom hosts) by consolidating URL logic into a shared util and using env/window.location, plus fixes CI deploy targeting—concrete, deployable value across multiple files. Side A is a refactor (Deque->Vec) that changes storage semantics and adds a test, which is reasonable cleanup but lower-impact than fixing broken redirect/deploy behavior in production.

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

A redesigns recent-vote storage (Deque→List, write-time trim→read-time cap, schema v4) and simplifies the apply path with a real test; that is lasting core data-model work. B usefully centralizes OAuth/base URLs and moves deploy to staging, but is mostly config/ops plumbing with narrower long-term design impact.

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

Side A makes a substantive storage-model redesign: it replaces the durable deque with an append-only list, removes post-commit trimming, updates the in-memory representation to `Vec`, bumps the schema version, and adds a test verifying query-time capping of recent votes. Side B mainly centralizes base-URL generation around a `HOSTNAME` helper, fixes redirect/callback URL construction, and adjusts the deployment workflow to staging, which is useful but narrower in long-term architectural impact.

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

Side B fixes a real cross-cutting bug (hardcoded staging hostname breaking custom-domain OAuth/redirects) by consolidating logic into a shared util fn and using dynamic HOSTNAME/window.location, touching multiple backend integrations and deploy config consistently. Side A is a small, well-tested but narrow fix skipping pinned Reddit posts, valuable but of much smaller scope and impact than B's multi-file correctness fix.

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

B replaces scattered hardcoded host/case logic with a shared HOSTNAME-driven get-base-url (plus window.location.origin on the client), fixing OAuth/redirect correctness across login, Linear, Spotify, Twitter, and YouTube and enabling real staging deploys—broader lasting design impact than A’s narrow Reddit filter. A is a clean, tested skip of stickied/pinned children, but it only trims one import path and does less for cross-environment correctness.

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

Side B centralizes base URL generation into a shared utility, replaces multiple hardcoded environment/hostname checks across OAuth, login, and callback code with that utility, uses the browser origin when available, and updates deployment to staging, improving configurability for custom hosts. Side A is a focused correctness fix that skips stickied/pinned Reddit posts during import and adds a targeted regression test, but it affects a narrower part of the system.

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

B fixes a real production bug (hardcoded hostnames breaking OAuth redirects across multiple providers) with a consolidated get-base-url utility applied consistently across 7 files, plus deploy workflow correction—broader, more impactful, and better factored. A is a solid test-infra fix (regex split bug, error handling, selector correctness) but is scoped narrowly to test mocks rather than production code paths.

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

B centralizes brittle, duplicated hostname/redirect logic into util/get-base-url (HOSTNAME-aware) across oauth/login/spotify/twitter/youtube/linear and the frontend origin, plus wires staging deploys—lasting production design. A is real, precise mock/E2E fixes (regex split, getRequestBody, nil-safe tokens/state, handler try/catch) but remains test-only scaffolding.

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

Side B introduces a centralized `util/get-base-url` used across multiple OAuth/callback integrations (Linear, Spotify, Twitter, YouTube, login, OAuth) and updates the frontend to derive URLs from `window.location.origin`, eliminating scattered hardcoded hostnames and improving deployment portability. Side A contains important test infrastructure fixes—correcting mock OAuth request handling (`getRequestBody`, query parsing, null checks, redirects, exception handling) and stabilizing Playwright auth tests—but its impact is primarily confined to the test suite rather than the application's runtime design.

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

Side B fixes a real, impactful bug (hardcoded staging/production hostnames breaking OAuth callbacks and redirects on custom hosts) by centralizing base-URL logic in a single util function and adopting HOSTNAME/window.location.origin, touching multiple real production files with clear lasting value. Side A improves test coverage and a display-path fix, which is useful but narrower in scope and mostly test churn plus a small correctness fix in one file.

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

A fixes vote hrefs to emit display_path forms (matching what users see) and replaces a shallow ≤15-iteration crawl with a full C(10,2)=45-pair run that asserts connected ranking a→j via GetGardenRank—lasting product correctness plus real algorithm coverage. B’s HOSTNAME/window.location.origin consolidation and staging deploy switch are useful infra fixes, but they are mostly mechanical host plumbing and ops config rather than core feature design.

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

Side B removes scattered hardcoded host/environment logic by introducing a shared `util/get-base-url`, updates multiple OAuth/callback and login redirect paths to use it, uses `window.location.origin` on the frontend, and adjusts deployment to staging, making the application work correctly on custom hosts. Side A fixes vote URL generation to use `display_path` instead of storage URLs and substantially strengthens the browser test by exercising all 45 pairwise votes and verifying the final ranking, but its functional impact is narrower than the cross-cutting redirect/configuration fix in Side B.

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

Side B is a small, targeted bugfix that centralizes hostname/base-URL resolution (new util.get-base-url, window.location.origin fallback) across multiple OAuth callback modules and fixes CI deploy triggers—correcting real deployment/redirect bugs for custom hosts. Side A is a large rewrite/simplification of a parser feature (replacing a complex but working autocomplete graph with a simpler paste-and-go form) which is reasonable but removes substantial tested functionality and a Playwright race test without clear evidence the removed behavior was net negative; it's more of a design pivot than a fix, with less certain lasting value than B's cross-cutting correctness fix.

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

Commit A replaces an unreliable ~1800-line keystroke graph parser (plus parser_action, race-prone JS, Playwright race test, and render paths) with a small correct paste-and-go URL parser and redirect, permanently cutting complexity while preserving the real job (open a subreddit rank scope). Commit B is a solid but narrower fix: centralize base URL via HOSTNAME/window.location.origin and point Fly deploys at staging—useful ops/correctness, not a comparable design win.

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

Side A replaces a large, fragile autocomplete transition-graph parser with a small URL extractor that returns a subreddit, rewires the UI to redirect directly on success, removes the obsolete parser action/rendering machinery, and adds focused parsing tests. Side B is a useful configuration cleanup—centralizing base-URL generation via `util/get-base-url`, using `window.location.origin`, and updating deployment to the staging branch—but it is primarily infrastructure and environment handling rather than a core behavioral simplification.

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

Side A fixes a real functional bug (hardcoded staging/production hostnames breaking OAuth/redirect URLs for custom hosts) and DRYs up nearly-identical logic across five auth integration files into one shared `util/get-base-url`, plus corrects the deploy trigger branch — a broad, correctness-critical improvement. Side B fixes a narrower UI/rank-highlighting bug and polishes vote-slider styling with decent added tests, but its impact is confined to one page's visual presentation rather than core app correctness.

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

B fixes real vote/rank UI semantics (per-group gradients instead of global offsets, center-anchored winner fill, oriented history sliders) and locks them in with polarity and style tests. A’s HOSTNAME/origin consolidation and staging deploy trigger are useful infrastructure cleanup, but more mechanical than B’s correctness and UX invariants.

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

Side A introduces a reusable `get-base-url` utility driven by `HOSTNAME` with environment fallbacks, replaces multiple hardcoded callback URL implementations across OAuth/login integrations, updates the frontend to use `window.location.origin`, and adjusts deployment to the staging branch. These changes fix incorrect redirects for custom hosts and centralize configuration, whereas Side B mainly corrects vote comparison highlighting and visualization logic with supporting tests and CSS, an important but more localized UI fix.

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

Commit A fixes a real production bug (hardcoded staging hostnames breaking OAuth/redirect URLs across multiple services) with a single reusable get-base-url helper, plus a small necessary CI fix — a concrete, low-risk correctness improvement. Commit B is a large CLI restructuring (forum list/show/post subcommands, docs, RPC hint strings) that is reasonable but is churn-heavy, unifies naming rather than fixing a bug, and touches many files with mostly cosmetic/interface renaming risk.

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

B lasting restructures the agent-facing CLI contract (ingest → scoped forum list/show/post with required --delegate, public/private form), and updates server next-move strings, GUIDE/DSL, and integration tests to match—so it defines how the product is driven going forward. A is a real, necessary fix (centralized get-base-url/HOSTNAME and window.location.origin instead of inconsistent hardcoded hosts, plus deploy-on-staging), but it is narrower infrastructure hygiene versus B’s API surface redesign.

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

Side A fixes a functional deployment and OAuth/redirect problem by centralizing base URL generation in `app.util/get-base-url`, replacing multiple hardcoded host/environment checks across login, OAuth, Linear, Spotify, Twitter, and YouTube, using `HOSTNAME`/current origin for custom hosts, and updating the Fly deployment workflow to deploy from `staging`. Side B is primarily a CLI/API reshape and documentation update (`ingest` → `forum post`, `forum list/show` subcommands, help text, tests), which improves interface consistency but mostly reorganizes existing behavior rather than fixing a cross-cutting runtime issue.

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

Side B fixes a real, systemic bug (hardcoded staging hostnames breaking OAuth callbacks and redirects across multiple services) by consolidating logic into a single util.get-base-url helper, reducing duplication and future maintenance burden across 6+ files. Side A is a legitimate but narrow UI feature (clickable unpin icon) with reasonable test coverage, but it's more localized and lower-impact than fixing broken cross-service redirect infrastructure.

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

B fixes a systemic correctness issue by replacing duplicated hardcoded host cases (oauth/linear/spotify/twitter/youtube/login plus frontend authUtils) with a shared HOSTNAME-aware get-base-url and window.location.origin, and wires deploy to staging—lasting multi-host infra. A is a solid but localized UX win: the ranked-list pin becomes an unpin POST form with theme CSS and an extended browser test, reusing an existing flow rather than foundation design.

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

Side B consolidates base-URL generation into a shared util function, replaces multiple hardcoded host/environment checks across OAuth and callback flows with a single HOSTNAME-aware implementation, and updates the frontend to use window.location.origin, improving portability for custom hosts. Side A adds a useful UI enhancement by making pinned child-group icons submit the existing unpin flow and backs it with browser tests, but its impact is confined to a specific interaction rather than infrastructure used across many authentication and redirect paths.

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

Side B fixes real bugs (hardcoded hostnames breaking OAuth redirects on custom hosts/staging, wrong deploy branch triggers) by centralizing base-URL logic and using runtime env/window.location, delivering an actual correctness improvement across multiple integrations. Side A adds a substantial new dev-only tool, which is useful but purely additive tooling with no bug fix, and its value is more speculative/internal compared to B's concrete production-affecting fix.

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

A adds reusable offline compile/scan library code (offline.rs), a workspace binary, tests, and docs that permanently improve DSL validation without a running server. B is a real but narrower fix: centralize get-base-url/window.location.origin for OAuth redirects and flip Fly deploy to staging—correct lasting ops hygiene, but much less new project capability than A.

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

Side A adds substantial new functionality: a reusable server-side offline module plus a new `sorterc` workspace binary that compiles `.sorter` files, replays and validates `events.jsonl`, emits rankings, and includes tests and documentation. Side B is a valuable but narrower maintenance fix, centralizing base URL generation around `HOSTNAME`/`window.location.origin` and updating deployment to the `staging` branch to correct redirects and deployment behavior.

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

Side B fixes an actual data-modeling bug (Reddit children incorrectly running ensure_path and losing entity_view wiring), threads the tree context through ranking_panel so unranked child labels display correctly, and updates/extends integration tests to verify the fix. Side A is mostly config/env plumbing (extracting a get-base-url helper and changing deploy branch), which is useful but lower-impact and more mechanical than B's genuine bugfix with test coverage.

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

B fixes core import/tree semantics (apply_entity_under_parent so listing children attach without ensure_path pulling /comments/ segments) and real UI labeling via child titles, with expanded integration coverage. A is valuable centralization of OAuth/base URLs plus a deploy-branch tweak, but is more configuration consolidation than domain correctness.

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

Side B fixes a functional data-model bug by importing Reddit listing children directly under the parent without path expansion (`apply_entity_under_parent` replacing `link_child` behavior), updates the ranking panel to display imported child titles via tree lookups, and strengthens integration tests to cover SSE morphs and children fetches. Side A usefully centralizes base URL generation around `HOSTNAME`/current origin and adjusts staging deployment, but much of the patch is refactoring existing URL logic rather than introducing new application behavior.

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

Side A performs a real type-safety refactor (introducing Deref for newtypes, threading CanonicalItemUrl through resolve_item, validation, rank computation, and pair selection), removing ad-hoc string/CanonicalItemUrl conversions and reducing risk of key-mismatch bugs across the ranking pipeline. Side B is a legitimate but narrower fix consolidating hostname/base-URL logic into a single util function and adjusting CI deploy branch, which is useful but smaller in scope and lasting architectural impact compared to A's cross-cutting type unification.

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

A systematically threads CanonicalItemUrl through resolve_item, validation HashSets, pair/pool selection, connectivity stats, and scope rank maps while adding Deref on the href newtypes, replacing repeated String/Canonical parse-wrap-clone noise with a lasting type-safe design. B correctly centralizes get-base-url/HOSTNAME and window.location.origin (plus staging deploy trigger) to fix hardcoded OAuth/redirect hosts, but that is narrower env-glue compared with A’s core path model cleanup.

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

Side A strengthens the project's type safety by changing `resolve_item` to return `CanonicalItemUrl` instead of `String`, propagating canonical URL types through validation, ranking, pair selection, and connectivity logic, and adding `Deref<Target=str>` for URL newtypes to reduce conversions. Side B fixes deployment and redirect behavior by centralizing base URL generation around `HOSTNAME`/`window.location.origin` and updating the staging deployment workflow, but its impact is narrower than A's architectural improvement that reduces future misuse of raw strings across many APIs.

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

Side B implements a real URL-routing refactor (item paths become canonical /~/<url> routes) with new tests validating parsing and rendering, plus removes dead theme-switching code and consolidates CSS—substantive structural improvement with test coverage. Side A is a useful but narrower bugfix (deploy target and base-URL centralization) that fixes real redirect bugs but is smaller in scope and lacks new tests.

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

B introduces lasting core routing design (ItemId browse_href/from_browse_uri, /~/ paths, shared helpers, and tests) and simplifies the HTML stack, whereas much of its diff is theme/CSS deletion. A is a solid but narrower fix: centralizing get-base-url/HOSTNAME and window.location.origin for OAuth redirects plus pointing Fly deploys at staging.

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

Side A centralizes base URL generation into a shared utility, replaces multiple hardcoded host/environment checks across OAuth/login integrations, uses the current browser origin on the frontend, and updates deployment to run from the staging branch. Side B introduces cleaner browse URLs and removes the theme system, but much of the patch is feature/refactoring churn and deletion, whereas Side A directly fixes incorrect redirect behavior for custom hosts across several authentication flows.

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

A delivers a coherent feature improvement (fullscreen vote-compare layout, corrected edge-history sorting/legend, live preview morph) backed by a new unit test and updated browser test selectors, showing real engineering depth. B is a useful but narrower bugfix (centralizing hostname/base-url logic and deploy branch) that mostly replaces duplicated case statements with a shared helper, valuable but smaller in scope and lacking new tests.

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

A delivers lasting product and domain value: full-bleed chromeless vote-compare layout, correct left/right ratio orientation with strength-based edge sorting (plus a unit test), and post-success JS that actually morphs the new ingest card—not just chrome/docs churn. B is a real, necessary fix (central HOSTNAME/origin base URLs and deploy-on-staging) but is smaller scoped plumbing across OAuth helpers and CI, so it lands less lasting surface than A’s feature completion.

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

Side B fixes a cross-environment correctness issue by centralizing base URL generation (`util/get-base-url`), replacing hardcoded hostnames across multiple OAuth/login integrations, using `window.location.origin` on the frontend, and updating deployment to the staging branch. Side A adds useful UX improvements for the vote-compare page (fullscreen layout, live preview morph, improved vote history ordering/display, and tests), but those changes are more feature-oriented, whereas B removes brittle host-specific behavior that has broader, lasting impact on deployments and authentication flows.

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

Side A performs a substantive refactor that eliminates a whole duplicate code path (deletes web_post.rs), unifies session resolution and RPC dispatch into a single `/ui` handler, and updates tests/fixtures accordingly to match the new contract — a meaningful architectural consolidation. Side B is a useful but narrower fix (replacing hardcoded hostnames with a shared `get-base-url` helper and switching deploy branch), which improves correctness for multi-environment deploys but touches many files with mechanical, low-complexity changes rather than restructuring core logic.

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

A completes a lasting API consolidation: delete web_post.rs and the /post|/post/check|/post/redact routes, resolve session once via WebSession/resolve_web_session, and route all forum compose/redact through POST /ui + __rpc__ (forms, client check JS, integration/walkthrough tests). B is a real but narrower ops fix—centralize get-base-url/HOSTNAME, point OAuth callbacks and authUtils at that base/origin, and retarget Fly deploys to staging—valuable durability without restructuring product surface area.

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

Side A performs a substantial architectural consolidation by moving browser posting, checking, and redaction into a single `POST /ui` dispatch, introducing `resolve_web_session` to avoid repeated auth parsing, removing the separate `web_post` module, updating forms and tests to the new `__rpc__` flow, and preserving behavior through shared helpers. Side B is a useful configuration and portability fix—centralizing base URL resolution with `util/get-base-url`, using `window.location.origin`, and updating the deployment workflow—but its scope is limited to redirect/deployment correctness rather than a broad, lasting simplification of the application's request handling.

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

Side A fixes a real, spreading bug: hardcoded hostnames (staging.sorter.social, InetAddress lookups) across six backend files that would break OAuth callbacks and redirects on custom hosts, consolidating them into a single reusable util.get-base-url with proper HOSTNAME/env fallback plus a matching frontend fix and CI staging trigger. Side B reworks an auth form to avoid a redirect via innerHTML morphing, which is a reasonable UX improvement but is narrower in scope, affects only one flow, and introduces added client-side complexity without fixing a correctness bug of comparable breadth.

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

A fixes real OAuth/callback breakage by replacing duplicated hardcoded host logic across linear/login/oauth/spotify/twitter/youtube with a single HOSTNAME-aware get-base-url (plus window.location.origin on the client) and aligns deploy to staging. B is a solid auth UX improvement (fragment responses + poem morph, layout unification, CSS), but it is polish on one flow rather than correcting broken multi-host redirects project-wide.

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

Side A introduces a shared `util/get-base-url` used across multiple OAuth/login modules, replacing inconsistent hardcoded hostnames and environment checks with `HOSTNAME`/origin-aware logic, which fixes redirect and callback behavior for custom deployments. It also updates the deployment workflow for the staging branch. Side B improves the auth UX by returning HTML fragments for inline form updates instead of redirects, but its impact is narrower and primarily affects interaction flow rather than deployment correctness or cross-environment reliability.

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

Side B fixes a real, deployable bug (hardcoded staging URLs breaking OAuth callbacks and redirects on custom hosts) by consolidating logic into a single util.get-base-url and using window.location.origin, unifying six duplicated hostname-detection functions and correcting the deploy workflow trigger. Side A is a substantial but purely internal refactor (removing legacy projection code and adjusting evidence-page rendering) that improves code cleanliness but has no external-facing bugfix impact and mostly shifts complexity rather than eliminating real defects.

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

A removes dual-path legacy GitDiscovery projection from epoch/commit pages, deletes _legacy_* helpers, and makes Emission evidence fields required—enforcing a single lasting Evidence-envelope model with updated tests. B usefully consolidates hardcoded OAuth/redirect base URLs behind HOSTNAME/window.location.origin and flips Fly deploy to staging, but that is incremental host/deploy hygiene versus A’s core schema and read-path simplification.

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

Side A removes the legacy GitDiscovery projection path and makes the application consistently evidence-driven: it deletes fallback lookup code, simplifies epoch/commit pages to require Evidence envelopes, makes Emission evidence metadata required, and updates tests to enforce the new behavior. Side B is a useful infrastructure/configuration cleanup that centralizes base URL generation via a shared utility, uses the current browser origin for frontend redirects, and adjusts deployment to the staging branch, but its impact is narrower and primarily configuration-oriented.

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

Metadata
commit_idc_c25451965a7f8017ef9e50101406985cdb637cd0b60b06a2f62b2d6ff9585376
patch_sha2564185e5e40434a6313f9d8ff304cf2d2b189f64948d7057f98931f72fcc6b7898
patch_identitygit-patch-id-stable-v1:c8afaa20cf14f225bfe66590e407aef977adc5ee
committer_timestamp_ms1783103333000