<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hetzner-infra/claude, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://git.yyamashita.com/hetzner-infra/atom/claude?h=master</id>
<link rel='self' href='http://git.yyamashita.com/hetzner-infra/atom/claude?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/'/>
<updated>2026-10-31T13:45:58Z</updated>
<entry>
<title>hetzner-admin: stop/start individual services, shown as STOPPED on status page</title>
<updated>2026-10-31T13:45:58Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T13:45:58Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=05e1418efa56a773c295a2e072796e220d8d8f51'/>
<id>urn:sha1:05e1418efa56a773c295a2e072796e220d8d8f51</id>
<content type='text'>
- run-command.sh: services / stop &lt;name&gt; / start &lt;name&gt; for app and infra
  stacks (not caddy, hetzner-admin, status). Stopped names go to
  status/stopped.txt (gitignored).
- status: a stopped service that does not respond is STOPPED (gray),
  excluded from uptime and DOWN alerts. If it responds it is UP as usual.
- Infra deploy.sh skips stopped stacks; app repo pushes clear the flag.
- claude-code@.service: Restart=on-failure, and restart-sessions.sh restarts
  one unit at a time, to avoid the tmux "server exited unexpectedly" race.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01N5eS3U54gzjRXzm65Np1RS
</content>
</entry>
<entry>
<title>Add status pages, ntfy alerts, and license-slot-checker repo</title>
<updated>2026-10-31T04:20:27Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T04:20:27Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=b4ecef96fae14a92d12279927986e69c2e223180'/>
<id>urn:sha1:b4ecef96fae14a92d12279927986e69c2e223180</id>
<content type='text'>
- status/: lightweight status checker (status.yyamashita.com, /api/status)
  with ntfy DOWN/recovered alerts after consecutive failures
- uptime-kuma/: Uptime Kuma at uptime.yyamashita.com
- hetzner-admin: authenticated /status page (status-app results + docker ps -a)
- ntfy/: self-hosted ntfy at ntfy.yyamashita.com (deny-all auth, install.sh
  creates admin user and status-app token)
- Caddyfile, DNS, post-receive hook, tests/check.sh, docs updated
- license-slot-checker: add to repos.txt, hook, and Claude sessions

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix ExecStop failure when tmux session has already exited</title>
<updated>2026-07-11T11:47:49Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-11T11:47:49Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=b3066893bf14622f716f8ca5d6def845cd76e56f'/>
<id>urn:sha1:b3066893bf14622f716f8ca5d6def845cd76e56f</id>
<content type='text'>
The `-` prefix tells systemd to ignore the exit code of tmux kill-session,
so restart succeeds even when the claude process has crashed and the session
no longer exists.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add Restart Claude Sessions command to hetzner-admin</title>
<updated>2026-06-20T00:45:16Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-20T00:45:16Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=1ad98cc2f9f8a5950aec998a6daacec381cbe2c4'/>
<id>urn:sha1:1ad98cc2f9f8a5950aec998a6daacec381cbe2c4</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add microblog repo and Claude session</title>
<updated>2026-06-19T05:53:33Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-19T05:53:33Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=93bd9a1d92e62c453230f0c1cc1058e745b30f40'/>
<id>urn:sha1:93bd9a1d92e62c453230f0c1cc1058e745b30f40</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add mosquitone-admin repo and Claude session</title>
<updated>2026-06-09T16:30:42Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-09T16:30:42Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=a7890e22d52677de267e0d4c79f2c7627f3a96c4'/>
<id>urn:sha1:a7890e22d52677de267e0d4c79f2c7627f3a96c4</id>
<content type='text'>
Register mosquitone-admin as a managed git repo with post-receive checkout
hook, and add yyamashita:mosquitone-admin to the Claude Code session list.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add README.md to each directory</title>
<updated>2026-05-17T08:06:48Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-17T08:06:48Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=dd7142e08cd66656514c7468ce12be72674900a5'/>
<id>urn:sha1:dd7142e08cd66656514c7468ce12be72674900a5</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Reorganize repo into caddy/, git/, claude/ directories</title>
<updated>2026-05-17T02:29:27Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-17T02:29:27Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=ef6dbdd2ac273dc4a01c70437ee7984cea9f2a3c'/>
<id>urn:sha1:ef6dbdd2ac273dc4a01c70437ee7984cea9f2a3c</id>
<content type='text'>
- caddy/: Caddyfile, docker-compose.yml, deploy.sh (hook runs this only)
- git/: repos.txt, hooks/*/post-receive, install.sh, server-setup.sh
- claude/: sessions.txt, systemd/claude-code@.service, sync.sh

Post-receive hook is now: checkout + bash caddy/deploy.sh

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
