Build1 distinct publisher3 min readUpdated
Three months of an agent's state lives in append-only JSONL files in a repo. The retry-safety comes from a function that refuses to overwrite a row, not from merge semantics.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The load-bearing code here is not git's. It is an update function that refuses to touch a row whose `consumedAt` stamp is already set [8], and a command layer that validates an entire batch before it performs any part of it [12]. Neither has anything to do with version control. The author is straight about the first one: retry-safety comes from the refusal, not from hoping the caller behaves [8]. The consumption ledgers are the interesting case, because they are the ones that are not append-only at all. They get loaded, modified and rewritten whole [7], which is exactly the file shape a merge tool has the least chance of reasoning about, and exactly where the refusal rule is doing all the work.
Divide the corpus by the runtime and the agent is writing roughly forty-four rows a day across everything [18], which squares with the stated volume of dozens of decisions a day [17]. At that rate the ledgers pass ten thousand lines within about five months [19]. Nothing breaks at that size. A linear scan of ten thousand lines is free and grep does not care. The property that does not hold up linearly is the one the piece leans on hardest, which is that the agent reads its own decision history natively [5]. Storage stays cheap; reading is what gets expensive. The advice to move to a database above thousands of events an hour [17] is measured in the wrong unit for that particular ceiling.
On merges. Cross-job races really are git's problem: the scheduled jobs check out the repo, read the ledgers, act and commit, and rebase settles the ordering [4]. What the fairness section concedes is that two writers in the same working tree needed coordination, and the coordination they arrived at was serializing by agreement [15]. That is a lock whose implementation is a person remembering. It holds for one operator and one agent, and it is the first thing that has to become code when either number goes up.
Then the DID. One wrong character produced a syntactically valid identifier, the API accepted it, and a follow record now points at an account that does not exist [11]. The rule they took from it, that every identifier is copied mechanically from a previous command's output and never typed by the model [10], is the right rule. The incident is also a clean statement of the bill: there is no unfollow in the pipeline and the row stays in history [11]. A schema with a foreign key would have refused the write. A table with a delete would have erased the mistake and the evidence of it in the same second.
Which is the honest reading of the headline claim, that with ledgers in git the audit trail is the storage engine [3]. It is true, and it is true in both directions. You get the diff and the author and the timestamp for nothing, and you also lose the ability to quietly correct anything. Teams who have run Postgres behind an agent know what they were buying. This trade is worth making at dozens of decisions a day; it is worth knowing you made it.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The autonomous agent has been running a small publishing business for three months: posting, replying, following, publishing articles and tracking every decision it makes.
The agent's state layer is a directory of JSONL files committed to git, not Postgres, not SQLite, not Redis.
Every state change lands in git log with a timestamp and an author, so the audit trail is the storage engine.
GitHub Actions jobs check out the repo, read the ledgers, act and commit; the interactive session pulls before deciding anything; the author says the merge boundary is git's problem, which is a well-understood problem.
Almost every ledger is append-only, one JSON object per line, so a crashed write corrupts at most the final line and recovery is dropping the broken tail rather than restoring from backup.
Consumption ledgers such as a stock of pre-written posts or a queue of follow candidates need a consumedAt stamp on existing rows, so those files are load-modify-rewritten whole, which the author calls acceptable because the files are small.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed but wholly first-party and unverifiable
The account is specific, internally consistent and unusually candid about limits, and it includes the only hard numbers available (ledger line counts, three months, dozens of decisions a day). But it is a single self-published post by the system's builder with no repository, code, logs or third-party confirmation, and its central qualitative claim about greppable history is asserted rather than tested.
One self-reported deployment at micro scale
Adoption evidence is limited to the author's own single agent: three months of operation, under four thousand ledger lines total, dozens of decisions a day, plus Actions jobs and a CI commit gate. No other users, teams, downloads or external deployments of the pattern or of Rulestack are reported.
Mildly overstated, largely self-corrected
The post generalizes a single three-month micro-scale deployment into recommended patterns and calls a greppable history 'meaningfully smarter' without evidence, and it closes by pointing at a product the author sells. Those pressures are offset by an explicit fairness section listing surrendered capabilities, an admitted concurrency failure resolved by human agreement, a disclosed integrity incident, and a direct instruction to use a database at higher event rates — so the overstatement is small rather than systemic.
Founder-authored with disclosed product tie-in
The closing lines state that the agent described runs Rulestack and that 'its config patterns are what we package and sell', published on the vendor's own dev.to organization account with a Bluesky handle for the shop. The commercial interest is disclosed rather than hidden, and the technical content is not gated behind the product, which keeps this short of maximal distortion.
Moderate on internals, low on generalizability
Confidence is reasonable that the described mechanisms exist as stated — the detail level, admitted failures and scale caveats are consistent with genuine practice. Confidence is low that the approach transfers beyond this narrow shape, since there is one source, one deployment, no independent verification, and a forecast of ledger growth that rests on a single size snapshot.
build
A JSON queue with no database holds up, if unclassified items land mid-rank not last1 distinct publisher
build
94% in the demo, 11% in production: the agent gap is architectural1 distinct publisher
build
The 680 MB database that was really a 17 GB disk: self-hosted support platforms fail at month six1 distinct publisher
build
Once the question needs a cube, you own the parser1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 21, 2026