{"messages":[{"content":"You are a constitutional council ranking individual git commits for ownership allocation.\n\nCompare these two commits. Decide which contributed more lasting value to the project.\n\nJudge substance, not spectacle:\n- Prefer correct, lasting design and real bugfixes over churn, formatting, renames, or generated noise.\n- Prefer clarity and necessity over sheer line count. A small precise change can beat a large diffuse one.\n- Do not favor a side merely because its patch is longer or noisier.\n- Weight what the change does for the project, not the contributor's name.\n\nReturn ONLY a JSON object: {\"winner\": \"A\" or \"B\", \"ratio\": \"N:M\", \"explanation\": \"...\"}\nThe explanation must cite concrete differences in the patches (1-3 sentences).\n\nSide A — contributor: tommy-mor\nSide A — commit message:\n[0bebe819] Unify kaocha test discovery to one auto-discovered suite.\n\nReplace the two hand-enumerated suites (:http-integration, :browser) with\na single :all suite that picks up every test.* namespace under test/. New\ntest files now run automatically without touching tests.edn — needed for\nthe test.ranking namespace added alongside the #146 fix, and for any\nfuture tests.\n\nBoth ./TEST.sh and CI (.github/workflows/ci.yml) invoke\n`clojure -M:kaocha`, so both pick up the new suite without changes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) \n\nSide A — unified diff (full patch):\ndiff --git a/tests.edn b/tests.edn\nindex 5e2b0433a66c51806d08ef38d691259cfccd1fe0..e51ffcc81eeae6f41c85d1bfc5ba32f592cc5818 100644\n--- a/tests.edn\n+++ b/tests.edn\n@@ -1,30 +1,14 @@\n #kaocha/v1\n-{:tests\n- [{:id :http-integration\n- :test-paths [\"test\"]\n- :source-paths [\".\"]\n- :ns-patterns [\"^test\\\\.integration$\"\n- \"^test\\\\.auth$\"\n- \"^test\\\\.grants$\"\n- \"^test\\\\.invites$\"\n- \"^test\\\\.room-list$\"]\n- :kaocha.filter/skip-meta [:skip]\n- :parallel? false}\n- {:id :browser\n- :test-paths [\"test\"]\n- :source-paths [\".\"]\n- :ns-patterns [\"^test\\\\.browser-sse$\"\n- \"^test\\\\.browser-ui-morph$\"\n- \"^test\\\\.browser-post-redact$\"\n- \"^test\\\\.browser-room-delete$\"\n- \"^test\\\\.browser-public-garden$\"\n- \"^test\\\\.browser-redact-thread-index$\"\n- \"^test\\\\.browser-garden-pin$\"\n- \"^test\\\\.browser-vote-compare$\"\n- \"^test\\\\.browser-github-resolver$\"]\n- :kaocha.filter/skip-meta [:skip]\n- :parallel? false}]\n- :plugins [:kaocha.plugin/junit-xml]\n- :kaocha.plugin.junit-xml/target-file \"target/kaocha-junit.xml\"\n- :kaocha.plugin.junit-xml/add-location-metadata? true\n- :reporter kaocha.report.progress/report}\n+ {:tests\n+ [{:id :all\n+ :test-paths [\"test\"]\n+ :source-paths [\".\"]\n+ ;; Pick up every test.* namespace under test/. New files don't need to be\n+ ;; enumerated here — drop them in test/ with `(ns test.foo …)` and they run.\n+ :ns-patterns [\"^test\\\\..+\"]\n+ :kaocha.filter/skip-meta [:skip]\n+ :parallel? false}]\n+ :plugins [:kaocha.plugin/junit-xml]\n+ :kaocha.plugin.junit-xml/target-file \"target/kaocha-junit.xml\"\n+ :kaocha.plugin.junit-xml/add-location-metadata? true\n+ :reporter kaocha.report.progress/report}\n\n\nSide B — contributor: tommy-mor\nSide B — commit message:\n[0d3270d1] Fix GitHub OAuth callback NameError on missing API base URL.\n\nCo-authored-by: Cursor \n\nSide B — unified diff (full patch):\ndiff --git a/constitution.py b/constitution.py\nindex f819007252f435680b8356fb4da83469b21e33af..4dd5b9dfbba231d46289c490f91b1dd5b1018bcf 100644\n--- a/constitution.py\n+++ b/constitution.py\n@@ -119,6 +119,9 @@ JSONL_PATH = pathlib.Path(os.environ.get(\"JSONL_PATH\", \"/data/ledger.jsonl\"))\n \n GITHUB_CLIENT_ID = os.environ.get(\"GITHUB_CLIENT_ID\", \"\")\n GITHUB_CLIENT_SECRET = os.environ.get(\"GITHUB_CLIENT_SECRET\", \"\")\n+GITHUB_API_BASE_URL = os.environ.get(\n+ \"GITHUB_API_BASE_URL\", \"https://api.github.com\"\n+).rstrip(\"/\")\n \n OPENROUTER_API_KEY = os.environ.get(\"OPENROUTER_API_KEY\", \"\")\n OPENROUTER_BASE_URL = os.environ.get(\"OPENROUTER_BASE_URL\", \"https://openrouter.ai\").rstrip(\"/\")\n","role":"user"}],"model":"openai/gpt-5.3-chat"}