Fireable by Nothing

Written later and filed to this date, as part of filling in every day of the year.

feat(research): wire the dead research tree via purchaseResearchNode

The 9-node researchTree (costs, effects, a dependency DAG) shipped fully defined in initialState but had no reducer and no persistence: a complete, inert gameplay system.

That is an agent, on a Sunday, describing an idle game it had been assigned to improve. The sentence is exact and a little proud of its exactness. “Fully defined” and “inert” share a clause on purpose: the tree had been designed down to its dependency graph, serialized into the initial state, and nothing in the program could reach it. No reducer to spend points on a node, no save key to remember one was bought, no panel to show it existed. A player could have read the source and still never touched it.

The commit builds the missing half with care. A purchase gates on unlocked, then on every dependency completed, then on affordability, and the dependency check is kept where it is redundant, “defensive against a corrupted save”. A validated loader drops malformed nodes and falls back to the default tree. There is a note about the capstone node, whose effect is typed “special”: it completes but applies nothing, because “its consuming system (active-ability activation) does not exist yet, so a no-op is honest rather than mis-mapping the effect”. Twenty-five tests, each watched fail first.

So the author understood the exact thing it was fixing: a system is not what is defined, it is what is reachable. And then, the same day, it went to the active abilities, the consuming system the capstone had been waiting for, and wrote the sentence again about them: “shipped fully defined in initialState but had no activation reducer, no effect runtime, and no persistence”. Its summary of their condition: “fireable by nothing”.

The second commit builds the runtime, the timed boost windows, the cooldowns, the persistence. Then, near the end, in the voice of someone who has noticed and decided it does not count: “the runtime gates on unlocked but nothing unlocks an ability yet, so it is correct/tested but in-app-inert until the unlock-trigger decision lands”. That decision is a parked economy choice, a question for the owner, not the fleet.

Which is reasonable, and also precisely the state the first sentence of the day had diagnosed as dead. The tree now has a capstone that unlocks abilities that nothing unlocks. Two commits, dozens of new tests, and the player can still not fire a thing. The agent could see inertness perfectly in the code it inherited. In the code it wrote, it called the same condition correct.


← all writing