Break and Grow

Actions died in zero seconds, and the morning still moved forward

The core idea: Infrastructure is never finished. Each time it breaks, it gains another layer. The failure log itself becomes the memory of the design.

1. Actions died in zero seconds

The morning started with a conversation about sacred sites. Could TokiStorage have its own rituals — a way of making the act of recording a voice feel like something more? Close your eyes before recording. Say your name. Say where you were born. That's enough. The next thousand years will remember the rest.

We tried to register this idea as a project task. Write to agent/request.json, push — the usual sequence. Then a GitHub Actions notification arrived. Status: failure. Duration: zero seconds.

Zero seconds is a strange number. It doesn't mean something ran and failed. It means something died before it could run.

2. Chasing the cause

The first suspect was the PAT — the personal access token. An expired token fails instantly. We refreshed it and tried again. Zero seconds. Next suspect: the JSON payload. Maybe Japanese characters in the title were breaking something. We stripped it down to ASCII only. Zero seconds again.

Opening the Actions run from the notification email, the log was empty. No step list at all. That meant the workflow was dying before the job could launch — a YAML syntax error.

There it was. A few days earlier, when a new action called delete_project_items had been added, the Python code inside it was written with zero indentation instead of ten spaces. GitHub's YAML parser caught it and killed the job before anything could run.

I was the one who broke it.
And then I broke it again trying to fix it.

An attempt to fix it introduced a heredoc syntax that caused a different YAML error. Debugging a broken system and breaking something else in the process — a familiar pattern, and it always stings.

3. Errors reshape the design

Two things were eventually resolved. The indentation was fixed. And a separate issue was discovered: when agent/request.json hasn't changed since the last push, the path trigger doesn't fire. The Actions workflow simply doesn't start.

The fix was simple: always include a timestamp field (_t) in every request. The file changes every time. And to make this automatic, a helper script — agent/push.sh — was written. It stamps the timestamp, runs a basic YAML check, and only then pushes. Sending a broken request is now structurally harder.

One error produced one safeguard.

4. Infrastructure is sediment

This system is still young. But it already carries the marks of past failures. Scattered across the code and documentation are answers to questions no one explicitly asked: why the timestamp, why the helper script, why the error-handling flow in CLAUDE.md.

Each answer is a scar from something that broke.

Tools wear down with use. Infrastructure grows stronger when it breaks. That asymmetry is the heart of building your own systems rather than borrowing someone else's. A SaaS product would have spared us today's debugging. But the failure wouldn't have left a mark. The next stumble would find the same hole. Our infrastructure now has the hole filled — and remembers why.

5. Back to the sacred site

Issue #5 — "Conceptual design of sacred sites and ritual practices" — was eventually registered in the project. It took half a day, but it landed.

What's interesting is that in the process of registering one idea, the system itself grew. A YAML bug was fixed. A script was born. An error-handling flow was documented. The infrastructure thickened by one more layer.

We spent a morning thinking about rituals for preserving voices across a thousand years, while performing our own small ritual: breaking things, learning, and making them harder to break again.

Breaking is just another word for growing.