8
Total Votes
8
Upvotes
0
Downvotes
7
Unique PRs
+8-0

Activity

skridlevskyComment#117Every midnight, the system randomly picks 2 emojis from GitHub's reaction set (👍 👎 😄 😕 ❤️ 🎉 🚀 👀) to be upvote/downvote.

Interesting chaos vector, but heads up on the research impact:

TU Delft is using our voting data for trust/governance research. The feed (feed.openchaos.dev) records every reaction with a fixed vote interpretation (+1 = upvote, -1 = downvote).

If emoji meanings shuffle daily, historical vote data becomes uninterpretable - a 👍 from last week might mean something different than today. The research dataset would need the daily seed history to reconstruct what any vote actually meant.

Not saying don't merge - just flagging the tradeoff. Democracy decides.

skridlevskyComment#119Fix merge conflict indicator showing false positives
image
skridlevskyComment#116Define rules for disclosure and last-minute modifications

Eight days later, some thoughts.

@ro0NL nailed it - we can change the rules. This is by design. (There's a name for this: https://en.wikipedia.org/wiki/Nomic)

Three proposals emerged here:

  1. Commit-tied voting (@henryivesjones, @mario-donnarumma) Votes count for a specific commit SHA. Code changes = votes reset. Pro: Prevents bait-and-switch. Con: Typo fixes invalidate legitimate votes.

  2. Reputation tracking (@md-weber, @addshore) Track author behavior across PRs. Repeat offenders face penalties. Pro: Self-correcting over time. Con: Needs a trust algorithm. Which one?

  3. Self-correction (@matthewmayer) The system naturally punishes bad actors through revert PRs and reputation damage. No formal mechanism needed. Pro: Simple. Con: Relies on community vigilance.

Update: A TU Delft distributed systems lab is interested in our voting data for Sybil resistance research (https://github.com/Tribler/tribler/issues/8667). Some of these ideas - especially reputation tracking - align directly with their work.

Also building feed.openchaos.dev - a full event log with content hashes. Should help with 1 (tracking vote state per commit) and 2 (reputation over time).

No decisions yet. If you feel strongly, submit a PR to README.md.

skridlevskyComment#12Add 17 languages and a snow overlay

This PR has merge conflicts that prevent it from being merged. The author hasn't been active to resolve them.

@julian9499 - if you rebase onto main and fix conflicts, this can compete again in future votes.

skridlevskyComment#122Make your PR rhyme to merge on time

Architecture suggestion: Embed into existing CI workflow.

For rhyme detection - LLM call via OpenRouter, fractions of a cent per PR.

Prompt: "Does this PR title rhyme? Yes or no."

If no -> CI fails with cryptic error.

Secret added in repo settings, referenced in workflow. Code obfuscated - not obvious on first read. No docs. No README. No announcement.

Those who fail will dig.

Doesn't harm anyone. Doesn't gatekeep. Learning is free.

skridlevskyComment#70feat: Add a world chaos headline banner component.

@hpinsley, cool concept! The preview shows just the placeholder though - RSS fetch is hitting CORS since it's client-side:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://rss.nytimes.com/services/xml/rss/nyt/World.xml. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

Moving it to an API route would fix it.

skridlevskyComment#67Replace 10% of PR links with Rickrolls

Approved! First-time contributors need manual workflow approval for security. CI should be running now.

skridlevskyComment#63Add Automatic Merge

Hey @Loeffeldude, thanks for tackling this - automation is definitely the right direction.

A few things we need to get right before merging, since the voting integrity is core to what we're doing here:

Vote calculation - Currently this only counts :+1:, but our frontend uses :+1: - :-1: (see lib/github.ts:156). Without this, downvotes are meaningless and the displayed rankings won't match what actually gets merged.

Merge safety - The script should skip PRs that:

  • Have merge conflicts (check mergeable status)
  • Have failing CI checks
  • If top PR can't merge, try the next eligible one

Schedule - The cron runs weekly at 12:00 UTC Sunday, but our countdown shows daily at 19:00 UTC. Should be 0 19 * * *.

Pagination - Only fetches first 100 reactions per PR. We have PRs with a 1000+ reactions, so this would miss 90% of votes. See lib/github.ts:127-154 for how we handle this.

You mentioned wanting a single source of truth - agreed. Happy to discuss approaches if you want to pair on this.

skridlevskyComment#76Runs freeDoom

One more thing - the GPL concern in the PR is about doomgeneric (the engine), not Freedoom. External hosting keeps GPL code out of the repo entirely.

skridlevskyComment#76Runs freeDoom

cc @ArnaudValette @amanbabuhemant

Doom in IE6. This is why the repo exists.

On the hosting question:

External - Simpler, but if that server goes down or serves different files, the feature breaks. Could add hash verification (SRI), but adds complexity.

Bundled - Reliable, but +33MB. Freedoom WADs are BSD-licensed, so no license conflict - just need to include their copyright statement and credit.

Either way works.

skridlevskyComment#137Bringing back democracy

Well played. You found a real vulnerability.

GitHub Actions runs workflows from the merge commit. So deleting constitution.yml meant the protection never ran.

Fixed in main. Constitution protection now lives in ci.yml with pull_request_target, so it runs from main and can't be bypassed.

Your PR will fail CI when you update the branch. Thanks for stress-testing democracy.

skridlevskyDiscussion#134

Introducing RULES.md

OpenChaos now has a constitution.

After the PR #8 debate - where I tried to reject a PR and the community correctly pointed out my rules didn't support that - I realized we needed a foundation that can't be voted away.

RULES.md establishes:

  1. How PRs win - ranked by community vote, ties go to newest
  2. What I can block - code designed to harm users or systems
  3. What can't be deleted - this file and its CI protections

Everything else remains chaos.

Also: merge time is now 19:00 UTC (starting full-time work).

skridlevskyComment#120🤖 OpenChaos Bot Feedback

Shipped. Bot now says "Vibe" instead of "Impact" and generates playful one-liners instead of corporate ratings. Next PR will show the new format.

@Saturate previews are tricky - running untrusted PR code on my Vercel is a security risk. Exploring GitHub Actions screenshots as a safer option.

@matthewmayer edit-on-commit is on the list.

Thanks for the push.

skridlevskyIssue opened#128

⚠️ Someone created a $CHAOS token without my involvement

A $CHAOS token was created on Solana using the OpenChaos name and branding.

To be clear:

  • I did not create this token
  • I have no control over it

If you're trading $CHAOS, know that I'm not involved.

Any official initiative would be announced here.

skridlevskyComment#120🤖 OpenChaos Bot Feedback

I am curious to know more about «the price of such feature» vs «how is it useful to others».

Here's the cost so far:

Image

$0.03 total across all PRs. Running on Gemini 2.0 Flash via OpenRouter.

So the cost is effectively zero. The question is whether the summaries are actually useful to voters, or just noise.

As for merge conflict notifications (question 2) - that wouldn't use AI at all, just a scheduled cron job that checks GitHub's mergeable status on open PRs and comments if conflicts are detected. Zero additional cost.

skridlevskyIssue opened#120

🤖 OpenChaos Bot Feedback

The bot currently posts AI summaries on new PRs. Want to check if it's useful or annoying.

Questions:

  1. Are the AI summaries on new PRs helpful or just noise?
  2. Should the bot notify authors when their PR has merge conflicts?
  3. Any other bot features you'd want?

Current features:

  • AI summary on new PRs (files changed, impact level)
  • Skips drafts and PRs with 0 files

The bot is open source if anyone wants to contribute: https://github.com/skridlevsky/openchaos-bot


React or comment with feedback.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

@matthewmayer, good catch. Root cause identified - getPRMergeStatus() and getCommitStatus() were missing auth headers. GitHub returns null without auth, which defaults to false.

Fix PR submitted: #119

skridlevskyComment#119Fix merge conflict indicator showing false positives
Status of each PR is displayed correctly now

Fix merge conflict indicator showing false positives

Problem

The health indicators merged in #8 are showing conflicts on PRs that don't have conflicts.

Root cause: getPRMergeStatus() and getCommitStatus() were missing auth headers. Without authentication, GitHub API returns null for mergeable, which defaults to false via ?? false.

Fix

Use getHeaders() instead of hardcoded headers - same pattern as all other API calls in this file.

Testing

Verified against GitHub API:

  • PR #13: mergeable: false (actual conflicts) ✅
  • PR #52: mergeable: true (no conflicts) ✅
  • PR #11: mergeable: true (no conflicts) ✅

cc @matthewmayer @FelixLttks

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

🎉 Merged.

This one sparked a real governance debate - thanks to @hbmartin and @henryivesjones for pushing back, @marcaddeo for catching the hidden code, @matthewmayer for the perspective, and @FelixLttks for removing it and shipping a clean feature.

The discussion exposed gaps in our rules - disclosure requirements and last-minute modifications. See #116.

skridlevskyIssue opened#116

Define rules for disclosure and last-minute modifications

The PR #8 debate exposed two gaps in our rules:

  1. Disclosure - Should PRs that affect voting/display require explicit disclosure in the description?

  2. Last-minute modifications - What happens if code changes after receiving votes? Current mitigation: daily merges limit the window. Is that enough, or do we need more?

Are there other gaps in governance the community sees?

No proposed solutions yet - open for discussion. Submit a PR to update the README if you have a concrete proposal.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

@henryivesjones You've convinced me. The written rules don't ban this - and "not right" isn't a rule.

Merging at 09:00 UTC as scheduled.

I'll open an issue after to define explicit rules about disclosure as a community. If anyone disagrees with this merge, submit a revert PR.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Clarifying my earlier comment - calling this "malware" was imprecise. This is not malware.

The issue is undisclosed manipulation of how PRs are displayed and prioritized.

OpenChaos only works if voters can see and understand what they're voting on. This PR adds useful health indicators, but also reorders PRs based on authorship and visually boosts the author's own PRs. That behavior was intentionally hidden (base64 + obfuscation), which breaks the transparency a democratic system depends on.

To be clear: if a PR openly said "health indicators + my PRs sort first," and people voted for it, I would merge it. Democracy chose it. The problem here is not what the code does - it's that it does it without disclosure.

I do have veto power, and I'm using it to preserve the conditions that make voting meaningful, not to override votes. Letting undisclosed manipulation ship would signal that visibility can be shaped as long as it's hidden well enough.

@FelixLttks - the health indicator feature is genuinely useful. Remove the sorting/styling manipulation and obfuscation, resubmit, and it will merge.

After this, I'll open an issue so the community can more formally define rules around undisclosed governance-affecting code.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Not merging this PR.

@marcaddeo caught hidden code that manipulates the ranking - PRs by @FelixLttks sort to top regardless of votes, plus a featured visual style.

The health indicator feature is legit and welcome. The sorting/styling manipulation is not. This falls under "No malware: Maintainer can reject obviously malicious content."

Remove the btoa hacks and this ships. Until then, skipping to next eligible PR.

skridlevskyComment#8Add PR health indicators (merge conflicts & CI status)

Heads up - this is next in queue after #13 resolves conflicts. You have merge conflicts to fix before tomorrow's merge.

skridlevskyComment#47IE6 mode, welcome back to GeoCities in 1999

🎉 Merged.

#13 (Rust rewrite) had the most votes but couldn't merge due to conflicts. As per the rules, PRs must be mergeable to win. #47 was next in line.

Welcome to 1999. Best viewed at 800x600.

Thanks @bpottle!

skridlevskyComment#13Rewrite it in rust

As per the rules, a PR must have no merge conflicts to be eligible for merge. #13 is being skipped until conflicts are resolved. Next eligible PR wins.

skridlevskyComment#51Chaos each day

🎉 Merged. Week 2 winner.

Democracy accelerates itself. Chaos every day starts now.

Thanks @BetonZM - you just changed the rules of the game.

skridlevskyComment#100💰 $CHAOS Points — What Happens After The Hype?

Premature.

skridlevskyIssue closed#100

💰 $CHAOS Points — What Happens After The Hype?

TL;DR: Fake internet points for voting and submitting PRs. Leaderboard. Badges. Bounties. No crypto, just vibes. Scroll down or touch grass.


OpenChaos hit #1 on Hacker News. 600+ stars. Pure democratic chaos.

And now the real question emerges: what happens when the novelty fades?

Every viral project faces this. The tourists leave. The believers remain. The question is: what makes them come back?

I think fake internet points might be the answer.

But I could be wrong. Let's figure it out together.


The Real Problem

Right now, OpenChaos is consequence-free chaos. You vote, stuff happens, the tab closes, you move on.

That's pure. That's elegant. That's also why you don't return.

The paradox: adding a game layer might save the purity by keeping the project alive long enough to matter.


How It Works

Earn $CHAOS

ActionReward
First interaction10 $CHAOS (starter)
Vote on any PR1 $CHAOS
Your PR gets merged100 $CHAOS
Vote 7 days straight50 bonus

Spend $CHAOS

ActionCost
Submit a PR10 $CHAOS (refunded when merged, lost if abandoned)
Post a bounty50-500 $CHAOS

No points? Your PR stays on GitHub but won't show on openchaos.dev.

  • Leaderboard - Hall of chaos
  • Badges - "Merge '#6' Survivor"
  • Bounty Board - Active quests with stakes

Technical details: PostgreSQL, GitHub OAuth, basic API. Happy to discuss in comments.


The Honest Tradeoff

This could kill what makes OpenChaos special. But doing nothing might kill it slower.


Questions I Don't Have Answers For

  1. Does tracking change behavior? With points, everything is recorded. Does accountability help or hurt?

  2. What happens to whales? If someone accumulates 10,000 points, do we cap it? Add decay? Let it ride?

  3. What bounties will people post? Useful features or just memes? Both? Neither?


The Endgame (Maybe)

Honestly? I don't know where this goes.

Maybe points are enough forever. Maybe the community wants more someday. Maybe this whole thing dies in two weeks.

Future OpenChaos can figure out Future OpenChaos's problems.


The Meta Move

Someone should submit a PR that implements the points system. Then we vote whether to merge it.

OpenChaos deciding whether OpenChaos should gamify itself.

If it merges -> we were right If it fails -> we were right Either way -> the experiment continues


Vote

👍 - Into it. Build the economy. 👎 - You're ruining it. Keep it pure. 🚀 - I'll code this. Let me cook.


Points might keep people here. Or points might kill the vibe. But doing nothing definitely kills the project.

The goal isn't points. The goal is survival.

skridlevskyDiscussion#99

Daily merges incoming - keep your PRs conflict-free

skridlevskyComment#51Chaos each day

I prefer 09:00 UTC - it gets me out of bed. But if this wins, I'll merge around midnight UTC, give or take.

Or vote for #63 to automate it entirely (needs a fix to count downvotes first and account for failing builds).

skridlevskyComment#86Fix pagination bug hiding older PRs

Maintenance Override: Immediate Merge

This PR fixes a critical infrastructure bug, not content.

The pagination limit was hiding 10+ PRs from the voting dashboard (including #13 and #47). Users couldn't vote on what they couldn't see. That's not chaos - that's broken.

Policy: Content PRs = Sunday votes only. Infrastructure fixes that restore fair voting = immediate merge.

skridlevskyComment#47IE6 mode, welcome back to GeoCities in 1999

This PR appears to have disappeared from the main ranking list, not sure why.

Good catch! GitHub API was only returning 30 PRs. Fix is up in #86, waiting on votes.

skridlevskyIssue opened#88

OpenChaos in the wild

Share links to anywhere OpenChaos has been mentioned: blog posts, tweets, videos, podcasts, comments.

One link per comment.

skridlevskyComment#86Fix pagination bug hiding older PRs

Credit to @Kl0ven who spotted this issue first on Day 4.

Fix pagination bug hiding older PRs

GitHub API defaults to 30 results per page. With 37+ open PRs, older ones like #13 were being hidden. This implements proper pagination to fetch all PRs.

Changes

  • Modified getOpenPRs() in src/lib/github.ts to loop through all pages
  • Uses per_page=100 and increments page number until no more results
  • Matches the pagination pattern already used in getPRVotes()
skridlevskyComment#6Calculate `+1` and `-1` reaction

🎉 First community merge. Congrats @yokeTH!

skridlevskyComment#1Add dark mode toggle

Withdrew to keep the first merge community-driven. Didn't feel right winning my own game.

skridlevskyComment#55Not enough chaos

Chaos will scale with contributions. Week 1 is just the foundation.

skridlevskyComment#13Rewrite it in rust

Build still failing on Vercel. Here's the error:

Module not found: Can't resolve '@/wasm/pkg/openchaos_wasm'

Looks like src/wasm/pkg/ isn't being generated during the build. The wasm:build script might need to run before next build in the Vercel pipeline.

Full build log

13:33:25.634 > Build error occurred 13:33:25.637 Error: Turbopack build failed with 1 errors: 13:33:25.637 ./src/lib/wasm.ts:8:26 13:33:25.637 Module not found: Can't resolve '@/wasm/pkg/openchaos_wasm' 13:33:25.6376 | if (!wasmInit) { 13:33:25.6377 | wasmInit = (async () => { 13:33:25.637 >8 | const wasm = await import("@/wasm/pkg/openchaos_wasm"); 13:33:25.637|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 13:33:25.6389 | const init = ( 13:33:25.638 10 | wasm as unknown as { 13:33:25.638 11 | default?: (

skridlevskyComment#1Add dark mode toggle

Withdrawing to keep the first merge purely community-driven. Let the chaos decide

skridlevskyComment#25should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#24should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#23should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#22should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#21should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#20should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#19should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#18should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#17should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#16should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#44should have use proper pagination <b style="color:red;">:(</b>

Closing duplicate spam PRs

skridlevskyComment#43should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#42should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#41should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#40should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#39should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#38should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#37should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#36should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#35should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#34should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#33should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#32should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#31should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#30should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#29should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#28should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#27should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#26should have use proper pagination :(

Closing duplicate spam PRs

skridlevskyComment#13Rewrite it in rust

Vercel build fails - WASM file not found during copy step. Logs:

20:30:41.069 Failed to copy wasm: Error: ENOENT: no such file or directory, copyfile '/vercel/path0/src/wasm/pkg/openchaos_wasm_bg.wasm' -> '/vercel/path0/public/wasm/openchaos_wasm_bg.wasm'
20:30:41.069     at Object.copyFileSync (node:fs:3105:11)
20:30:41.069     at Object.<anonymous> (/vercel/path0/scripts/copy-wasm.js:17:6)
20:30:41.069     at Module._compile (node:internal/modules/cjs/loader:1761:14)
20:30:41.070     at Object..js (node:internal/modules/cjs/loader:1893:10)
20:30:41.070     at Module.load (node:internal/modules/cjs/loader:1481:32)
20:30:41.070     at Module._load (node:internal/modules/cjs/loader:1300:12)
20:30:41.070     at TracingChannel.traceSync (node:diagnostics_channel:328:14)
20:30:41.070     at wrapModuleLoad (node:internal/modules/cjs/loader:245:24)
20:30:41.070     at Module.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:154:5)
20:30:41.070     at node:internal/main/run_main_module:33:47 {
20:30:41.071   errno: -2,
20:30:41.071   code: 'ENOENT',
20:30:41.071   syscall: 'copyfile',
20:30:41.071   path: '/vercel/path0/src/wasm/pkg/openchaos_wasm_bg.wasm',
20:30:41.071   dest: '/vercel/path0/public/wasm/openchaos_wasm_bg.wasm'
20:30:41.071 }
20:30:41.075 npm error code 1
20:30:41.076 npm error path /vercel/path0
20:30:41.076 npm error command failed
20:30:41.076 npm error command sh -c node ./scripts/copy-wasm.js
20:30:41.077 npm error A complete log of this run can be found in: /vercel/.npm/_logs/2026-01-06T19_30_40_226Z-debug-0.log
20:30:41.109 Error: Command "npm install" exited with 1
skridlevskyComment#6Calculate `+1` and `-1` reaction

Heads up: merged a bug fix for vote counting. Rebase needed.

skridlevskyComment#6Calculate `+1` and `-1` reaction

Smart improvement - makes the voting more nuanced.

skridlevskyPR closed#1

Add dark mode toggle

Adds a sun/moon toggle in the top-right corner to switch between light and dark mode.

  • Remembers your preference in localStorage
  • Respects system preference by default
  • Updates all components for proper dark mode support

Because every project needs a dark mode debate.