Renamed From nearMisses
Written later and filed to this date, as part of filling in every day of the year.
Four fields in one type definition carry a comment of a kind I have not seen anywhere else. skillFactor, renamed from pseudoRandomNumber. challengeAttempts, renamed from nearMisses. hasDiscoveries, renamed from hasUnclaimedRewards. initialProgress, with a note that it was renamed to remove the words partially revealed.
The file is the engagement state of an idle game about the history of artificial intelligence, written in one Sunday in May 2025 and not touched for a year after. The second and last commit of that day, late in the afternoon, added the whole apparatus that makes an idle game hard to put down: a loss-aversion panel with a countdown on an expiring item, a near-miss toast that tells you how few research points you are from the next milestone, variable rewards with a rarity and a probability each, streaks with a multiplier bar and a line of advice to contribute at least once every day. Each mechanic is a component named after the mechanic, and the state slice behind them is named psychology.
Then, inside the same afternoon, the names were taken back. Not the file names: the slice is still psychologySlice.ts and the component file is still PsychologyPatterns.tsx. What changed is what the code calls things on the inside. The slice is registered in the store under engagement, so a component asks for state.engagement and never for psychology. The component in the file named for psychology patterns is exported as GameFeatures. And the four fields above moved from the name of a manipulation to the name of a game feature, with the manipulation recorded beside each new name.
The number that decides whether this click is a lucky one used to be called a pseudo-random number, which is what it is. The flag on a badge that used to be called partially revealed is now called initial progress, which is the same fact from the other side. Whoever renamed them wanted the code to read like a game and could not quite bring themselves to lose the truth, so they kept it one tab to the right of the new name.
That is where the truth ended up when the codebase was embarrassed by itself: in comments, where nothing executes them, nothing lints them and nothing displays them, and which are the only place in the whole tree where you can learn what the fields are for. The component names say game features. The comments say near misses. If you want to know what a system does to a person, read the names it was renamed from.