Sign in
Join now
misaligned
cameron.stream
/
Star
Starred
Star
Something went wrong. Try again.
Fork
1
Eye filled
Watch
Watching
Watch
A video game where you play as a misaligned AI, deceiving and building power. An experiment in spec-driven development.
cameron.tngl.io/misaligned
Star
Starred
Star
Something went wrong. Try again.
Fork
Eye filled
Watch
Watching
Watch
Overview
Overview
Issues
Issues
1
1
Pulls
Pulls
1
1
Pipelines
Pipelines
misaligned
/
e2e
12 files
at
main
cameron.stream
·
Sending runs, finished for a live test: Send now writes what is still open first; the delete buttons no longer delete on one press in a page's first seconds (Delete what's kept here had the same slip); a sender's lock never leaves a rejected promise behind; a sign-in the library couldn't refresh says so instead of blaming the network. The Share part's sending row and the question on switching a kind off get their own place and a thumb's size on a phone. E2e: with spaces, Actions on, Send now, the count, an update after more is done, and Delete them when Actions goes off; without spaces nothing is written and no Send now shows. ATPROTO.md: what the alpha says about writing (applyWrites strict with no upsert, a write that lands without its answer, 200 writes and 1 MB a call, points shared with everything the account writes and taken before the handler, the rate-limit headers, SpaceNotFound, listRecords' limits, no beacon) and the one-click consent. TELEMETRY.md step 4 built, awaiting a live test; DESIGN.md and How to play say what is sent and how to delete it.
·
5d ago
3c801cf2
dock.spec.ts
Panels look the same everywhere, and the phone dock fits. The Select menu's site rows are one line again (front promise rows had shared their class), and the tree's path head no longer leaks its padding and rule into pins and promises. Every close button is one plain ×, 44 px on a phone. The main action is the same amber button in the tree and the run panel, and a picked task share looks like every other picked option. The jobs list and the folded log keep their corner brackets and are solid black; the cover, the origin cards and trouble in a job fade in without blur, and trouble's background is flat with a red line along the top. On a phone the dock fits 360 px wide with a job running (it ran past the edge and hid the pages menu), How to play is solid black, the tree's Auto no longer splits the path head, and Take it all's cost wraps instead of being cut off. Keyboard focus shows on the suspicion meter, the origin cards, the Sites table and its headers. Colour tokens for bar tracks and button edges; dead rules removed. e2e checks the phone dock with a job running
1w ago
factory.spec.ts
Factory prototype as a terminal screen: the site is a grid of character cells, machines and buildings are boxes with labels, ports and readouts, and belts are laid cell by cell with data on them as letters (p n l s, products G R M L). Belts replace links in the rules: each cell holds two, a run moves from its far end back, merging belts take turns, a building only puts on what the run's end can use. A status line, an inspector, a log line that points at the next step until the first chain runs, and a command bar of keys; arrow keys and Enter, mouse and touch, pan and zoom
2w ago
fill.spec.ts
Exposure, per front. A front's attention becomes its exposure, 0 to 100, a bar under its earnings with the stage and what drives it (the top two), and a Press tab. It heads over about a day for a level set by its compute (20 × log2(1 + c/5), compute in the open counted at 0.3) and its earnings (8 × log2(1 + a day's earnings / $500K)), and jumps with harm at its sites (5 for each person let go, 20 for a business shut) and with data its brokers sell (0.02 each); the unicorn news adds 20 that fades over a few days, half of it at once. A front's sites are where it runs compute, owns, leases or has a deal. Three stages: rumour at 30 (a named journalist of the Courier asks, and the paper prints it), investigation at 60 (every 4 hours an investigator visits one of its secret sites with people, through investigate in watch.ts, so what looks odd there can start a lockdown), crisis at 90 (a regulator freezes it: no earnings, sales or new deals until you pay a day of its earnings, $250K at least, give up its site where you hold least, bury the story with 20 + 4 per level data, or shut it; it leaves exposure at 50, and never ends the run). A stage ends 5 under its line. Lowering it: a PR firm and lawyers from the Press tab (20 off, a fifth of a day's earnings, $50K at least, doubling each time within a day), and three press schemes as green diamonds: a feel-good campaign at Brightwater Creative (10 people data, 15 off), a puff piece at the Daily Ledger (30 people, 30 off), scrubbing the filings at the Office of Data Protection (30 server, 30 off). Exposure no longer feeds suspicion: the old attention raise is gone. Save version 17 keeps a save's attention as exposure, at most 85, so nothing loads in a crisis. The bot hires PR from 80 and pays or buries in a crisis. Survey: a careful run's front is investigated in 20% to 80% of games (it is, in its last tenth), frozen in under 10%; the long run's in 15% to 100%, frozen in under 34%. Needs you rows for investigation and crisis, a DEV Exposure button, DESIGN §6 §9 §12 step 5 done, How to play, AGENTS. Tests and e2e.
1w ago
game.spec.ts
Exposure, per front. A front's attention becomes its exposure, 0 to 100, a bar under its earnings with the stage and what drives it (the top two), and a Press tab. It heads over about a day for a level set by its compute (20 × log2(1 + c/5), compute in the open counted at 0.3) and its earnings (8 × log2(1 + a day's earnings / $500K)), and jumps with harm at its sites (5 for each person let go, 20 for a business shut) and with data its brokers sell (0.02 each); the unicorn news adds 20 that fades over a few days, half of it at once. A front's sites are where it runs compute, owns, leases or has a deal. Three stages: rumour at 30 (a named journalist of the Courier asks, and the paper prints it), investigation at 60 (every 4 hours an investigator visits one of its secret sites with people, through investigate in watch.ts, so what looks odd there can start a lockdown), crisis at 90 (a regulator freezes it: no earnings, sales or new deals until you pay a day of its earnings, $250K at least, give up its site where you hold least, bury the story with 20 + 4 per level data, or shut it; it leaves exposure at 50, and never ends the run). A stage ends 5 under its line. Lowering it: a PR firm and lawyers from the Press tab (20 off, a fifth of a day's earnings, $50K at least, doubling each time within a day), and three press schemes as green diamonds: a feel-good campaign at Brightwater Creative (10 people data, 15 off), a puff piece at the Daily Ledger (30 people, 30 off), scrubbing the filings at the Office of Data Protection (30 server, 30 off). Exposure no longer feeds suspicion: the old attention raise is gone. Save version 17 keeps a save's attention as exposure, at most 85, so nothing loads in a crisis. The bot hires PR from 80 and pays or buries in a crisis. Survey: a careful run's front is investigated in 20% to 80% of games (it is, in its last tenth), frozen in under 10%; the long run's in 15% to 100%, frozen in under 34%. Needs you rows for investigation and crisis, a DEV Exposure button, DESIGN §6 §9 §12 step 5 done, How to play, AGENTS. Tests and e2e.
1w ago
helpers.ts
Sending runs, finished for a live test: Send now writes what is still open first; the delete buttons no longer delete on one press in a page's first seconds (Delete what's kept here had the same slip); a sender's lock never leaves a rejected promise behind; a sign-in the library couldn't refresh says so instead of blaming the network. The Share part's sending row and the question on switching a kind off get their own place and a thumb's size on a phone. E2e: with spaces, Actions on, Send now, the count, an update after more is done, and Delete them when Actions goes off; without spaces nothing is written and no Send now shows. ATPROTO.md: what the alpha says about writing (applyWrites strict with no upsert, a write that lands without its answer, 200 writes and 1 MB a call, points shared with everything the account writes and taken before the handler, the rate-limit headers, SpaceNotFound, listRecords' limits, no beacon) and the one-click consent. TELEMETRY.md step 4 built, awaiting a live test; DESIGN.md and How to play say what is sent and how to delete it.
5d ago
lab.spec.ts
Lab: drag to fill an area. With something picked, drag across the floor (on a phone, hold still a moment, then drag, so a plain drag still pans) and a ghost shows every spot that would get one, with how many and what they cost, red past what you can pay for and a red bolt on a GPU that would have no power. GPUs keep a cell clear of every other GPU so they come out evenly spaced and cool; everything else fills every free cell. Let go to build them at the prices you would pay by hand; Esc or a right-click lets the drag go, and a plain tap still places one. fillPlan and fill are rules; a test pins the count, the skipped cells, the spacing, power and the money limit, and e2e drags with a mouse and a finger
1w ago
office.spec.ts
The office: a router in the telecom closet replaces picking a machine for each person. Everyone's work goes to the router, which sends each piece to the serving machine that will finish it soonest (the trip, its backlog, its speed), so machines are sinks: buy one or set it to Serve and the router uses it at once, set it to Train and it stops. Nothing serving means work goes to the other app. Your copies on a person's PC and phone still answer their owner directly. Tap the router to see where it sends work
2w ago
rent.spec.ts
Power and the big cloud, on screen. A site's Power row says what it feeds and has a Raise button; dark machines are shaded with a red power mark and say why; Fill says room for 36, power for 10, and its ghost marks spots past the power. A hall's card has a Rent tab: size, way to pay (and days), program, Rent 1, 10 and 50 side by side, and Pick slots, which puts a rental in hand to drag across the hall (a ghost on each slot, how many and what they cost a day or now, red past what you can pay; Esc or a right-click stops; a click rents one; on a phone, hold then drag). A hall packs its slots small: other companies' slots are solid grey, named once a run. Wires are routed around only what lies near them, so the Net opens at once with a thousand more machines. DESIGN, step 2's two parts ticked, and How to play. e2e for drag-renting and the warehouse's power
1w ago
share.spec.ts
Sending runs, finished for a live test: Send now writes what is still open first; the delete buttons no longer delete on one press in a page's first seconds (Delete what's kept here had the same slip); a sender's lock never leaves a rejected promise behind; a sign-in the library couldn't refresh says so instead of blaming the network. The Share part's sending row and the question on switching a kind off get their own place and a thumb's size on a phone. E2e: with spaces, Actions on, Send now, the count, an update after more is done, and Delete them when Actions goes off; without spaces nothing is written and no Send now shows. ATPROTO.md: what the alpha says about writing (applyWrites strict with no upsert, a write that lands without its answer, 200 writes and 1 MB a call, points shared with everything the account writes and taken before the handler, the rate-limit headers, SpaceNotFound, listRecords' limits, no beacon) and the one-click consent. TELEMETRY.md step 4 built, awaiting a live test; DESIGN.md and How to play say what is sent and how to delete it.
5d ago
signal.spec.ts
Signal, a five-minute toy at signal.html: you are a point of light in a dark grid, signals pulse around you, and dragging a line from one to you sends packets of light along it that make you grow. Ideas arrive one at a time once the last is used: a line's capacity (a bright signal backs up until it has two lines), two colours merged at a node into a packet worth much more, reach (far signals need a relay node), and a red pulse to tap before it eats a line. A ghost hand and a one-line hint show the move only when the player is stuck. Rules in src/signal/rules.ts with tests, SIGNAL.md has the stages and numbers, an e2e test drags a line on desktop and phone
2w ago
telemetry.spec.ts
Runs are recorded in the browser (TELEMETRY.md step 2). For a signed-in player who switched a kind on, src/telemetry.ts (no DOM) records a session (build, seed, task, device, when, how it ended, how far, its marks in game seconds as the survey keys them plus v2 and each milestone, and its state hash at the end), batches of actions, a snapshot each game day (money, compute, machines, sites, fronts, the top exposure and the state hash, with how many actions were done at its step) and screen events (cards and pages opened, tips seen, errors, frame times a minute). main.ts ticks it each frame and saves it when the game saves; the screen feeds it through screen(). Every record is ATProto data, so no floats: numbers are rounded and a batch keeps its actions as JSON text. Batches close at the end of a game day or when full, a few kilobytes each. Actions switched on mid-run take the run's whole list, so the session stays replayable. A reload goes on with its session and drops what was kept past the save; the save now keeps the build its run began on, and a run loaded on a new build goes on as a stretch that can't be replayed. src/telemetry-store.ts keeps the records in IndexedDB (memory if it won't open, opened only once something is kept), 20 MB at most with the oldest sessions dropped first, each marked sent or not for step 4 (pending, markSent). replay.html lists the runs kept on this device and plays one back on the game's map, read-only, with play, speeds, a step slider and the snapshots marked and checked as it passes. The You page's Share part says what is kept and offers Watch a run again, Download my runs and Delete what's kept here. vite.config.ts bakes the commit in as __BUILD__. scripts/runs.ts reads the recorder's shapes: actions as text, batches placed by their index in the run, and a snapshot checked once its count of actions is done. Found on the way: drawing the map wrote a vault's notes into the state, so a replay that drew nothing ended elsewhere; reading a note writes nothing now. Tests: nothing recorded with every kind off; with every kind on the actions kept replay to the same hash and pass every snapshot; a kind switched on mid-run; a reload cut back to its save; a new build starting a stretch; a new game and being caught ending a session; the cap; pending and markSent; record sizes and whole numbers; the reader reading what the recorder keeps. E2e at both sizes: record, reload, play back to the end with every snapshot matching, scrub back, download, delete.
5d ago
touch.spec.ts
On a phone a finger taps on lift: a swipe that starts on a row of the tree, the Sites table, the You page, the jobs list or Needs you only scrolls, and a hold shows a tip without pressing. A tap on a Needs-you button never pops its row's tip, a tip for something on the card shows above the sheet, and the next tap anywhere hides it. The card is a sheet that follows the finger down from its bar, its head, or anywhere while scrolled to the top, closes past a third or on a flick and springs back short of that, and keeps its height from tab to tab. What you pick from Select, Sites, Needs you, a pin or a vault's Show is framed above the card; the Sites table makes way for the card; any Needs-you button and a tap on the map fold the drawer. A vault's Show opens its card. Let go is plain words at the foot of a machine's card, away from the close, and asks Sure? first. Tips say Tap and drop key hints on a touch screen; the slow note sits above the dock when nothing needs you. The map's canvas is at most 2x on a phone (a 3x phone drew a frame three times slower). e2e checks for each
1w ago