<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tokyo-livehouse-events/scripts, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/'/>
<entry>
<title>Fix day-of-week bug in recap mail: getDay()→getUTCDay() on noon UTC</title>
<updated>2026-07-11T11:34:45+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-11T11:34:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=c0f61ba314bb2ed0503ec1a00cda0e8e15f89e2d'/>
<id>c0f61ba314bb2ed0503ec1a00cda0e8e15f89e2d</id>
<content type='text'>
+09:00 midnight をパースすると内部では前日15:00UTCになり、
getDay()がシステムタイムゾーン(UTC)で前日の曜日を返していた。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
+09:00 midnight をパースすると内部では前日15:00UTCになり、
getDay()がシステムタイムゾーン(UTC)で前日の曜日を返していた。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>recap mail: remove price column, make title a link</title>
<updated>2026-07-11T11:27:16+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-11T11:27:16+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=baf91fb9f8ce918c3c10e89710605176539136ed'/>
<id>baf91fb9f8ce918c3c10e89710605176539136ed</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix scraper restart loop: MARZ 500 on unpublished month + set -e</title>
<updated>2026-07-11T07:47:37+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-11T07:47:37+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=55bb044b7deadd1fe5055078274651ce6402589f'/>
<id>55bb044b7deadd1fe5055078274651ce6402589f</id>
<content type='text'>
新宿MARZ翌月スケジュールのHTTP 500がスクレイパー全体を失敗させ、
set -e によりentrypointがcron起動前に終了→再起動ループを引き起こしていた。

- marz-shinjuku: 404/500は未掲載扱いで空配列を返すよう変更
- scraper-entrypoint.sh: set -e を削除し初回スクレイプ失敗でもcronを起動

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
新宿MARZ翌月スケジュールのHTTP 500がスクレイパー全体を失敗させ、
set -e によりentrypointがcron起動前に終了→再起動ループを引き起こしていた。

- marz-shinjuku: 404/500は未掲載扱いで空配列を返すよう変更
- scraper-entrypoint.sh: set -e を削除し初回スクレイプ失敗でもcronを起動

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Use Postfix container for recap mail; add Message-ID header</title>
<updated>2026-06-08T16:34:07+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-08T16:34:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=b323ad4824cc62cf54a9bfa4f9f68dda4b783323'/>
<id>b323ad4824cc62cf54a9bfa4f9f68dda4b783323</id>
<content type='text'>
Port 25 outbound unblocked: send-recap.ts now routes through the
mail container (Postfix + OpenDKIM) for direct MX delivery with
DKIM signing. Removes inline MX lookup logic added in the previous
workaround. Also adds Message-ID header (required by Gmail) and
updates default RECAP_TO to mazideyabai@gmail.com.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Port 25 outbound unblocked: send-recap.ts now routes through the
mail container (Postfix + OpenDKIM) for direct MX delivery with
DKIM signing. Removes inline MX lookup logic added in the previous
workaround. Also adds Message-ID header (required by Gmail) and
updates default RECAP_TO to mazideyabai@gmail.com.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix double JST offset in send-recap date calculation</title>
<updated>2026-06-02T10:45:35+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-02T10:45:35+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=e998e12aa5c07d923d91ff8e3d48867ec66d5b48'/>
<id>e998e12aa5c07d923d91ff8e3d48867ec66d5b48</id>
<content type='text'>
isoDate() already adds JST_MS; calling it with nowJST() (which also
adds JST_MS) shifted the date +18h, showing tomorrow's date instead
of today's.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
isoDate() already adds JST_MS; calling it with nowJST() (which also
adds JST_MS) shifted the date +18h, showing tomorrow's date instead
of today's.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Show today's (JST) events only, add link to by-date page</title>
<updated>2026-06-01T13:13:23+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T13:13:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=d99e57c263c63b77f4d297261450e62325957c68'/>
<id>d99e57c263c63b77f4d297261450e62325957c68</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add daily recap email job via Postfix MTA container</title>
<updated>2026-06-01T13:07:33+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T13:07:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=694694e67936ccabb0f51edad7023c965850e310'/>
<id>694694e67936ccabb0f51edad7023c965850e310</id>
<content type='text'>
Sends an HTML digest of the next 7 days' events to
efemeraladdress+golive@gmail.com at 08:00 JST daily (23:00 UTC cron).
Adds scraper to the web Docker network so it can reach mail:25.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Sends an HTML digest of the next 7 days' events to
efemeraladdress+golive@gmail.com at 08:00 JST daily (23:00 UTC cron).
Adds scraper to the web Docker network so it can reach mail:25.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Defer repo/hook setup to hetzner-infra/scripts/install.sh</title>
<updated>2026-05-17T02:22:46+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-17T02:18:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=fd4ea38bd52a8aa8a31dbb3fd9c7fdfe5d960ec4'/>
<id>fd4ea38bd52a8aa8a31dbb3fd9c7fdfe5d960ec4</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove inline hook from server-setup.sh; hooks managed by hetzner-infra</title>
<updated>2026-05-17T02:22:46+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-05-17T02:13:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=adacc4c7783a47cb75239c67cc0746e6edb70775'/>
<id>adacc4c7783a47cb75239c67cc0746e6edb70775</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix multi-month scrape coverage and add duo MUSIC EXCHANGE</title>
<updated>2026-05-10T14:22:17+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@mosquit.one</email>
</author>
<published>2026-05-10T14:22:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/tokyo-livehouse-events/commit/?id=b56e79b5b288b7c9e2fef396b303afc32c9baf5d'/>
<id>b56e79b5b288b7c9e2fef396b303afc32c9baf5d</id>
<content type='text'>
- Extend 8 scrapers (liquid-room, shibuya-o, club-quattro, meets-otsuka,
  nishieifuku-jam, fever-shindaita, fad-yokohama, and new duo-music-exchange)
  to fetch 3 calendar months instead of 1-2, covering the full 65-day window
- Add duo MUSIC EXCHANGE scraper (渋谷, ~700 cap, /schedule/YYYY/index_YYYY-MM.html)
- Add npm test: Node.js built-in test runner verifies each scraper fetches
  all required month URLs via mocked fetch (10 tests, no extra deps)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Extend 8 scrapers (liquid-room, shibuya-o, club-quattro, meets-otsuka,
  nishieifuku-jam, fever-shindaita, fad-yokohama, and new duo-music-exchange)
  to fetch 3 calendar months instead of 1-2, covering the full 65-day window
- Add duo MUSIC EXCHANGE scraper (渋谷, ~700 cap, /schedule/YYYY/index_YYYY-MM.html)
- Add npm test: Node.js built-in test runner verifies each scraper fetches
  all required month URLs via mocked fetch (10 tests, no extra deps)

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