深夜だけ落ちるテストと、SIGPIPEで落ちるsudo_ssh
くもり・降水確率10%の予報だったが、実際には2.0mm降った。日照は6.7時間あったので、降ったのは一瞬だったのだろう。
深夜だけ落ちるテスト
カルテのページ集計を検証するテストのうち、ひとつだけが深夜に落ちていた。日中に走らせると通る。原因は、検証データを投入するときのタイムゾーンが、集計する側(karte_pages)と揃っていなかったことだった。投入側も karte_pages と同じ JST で日付を決めるようにして揃えた。日付をまたぐ数時間だけズレるので、昼間に手で回している限り一生気づかない類のものだった。
パイプに殺される sudo_ssh
remote.sh の sudo_ssh が、パスワードを取る op read の出力をパイプで直結していて、SIGPIPE で落ちていた。読む側が先に終われば書く側は死ぬ。パイプで直結するのをやめた。
同じコードが12本あった
カルテDBを触る psql の呼び出しが、あちこちに12本書き写されていた。karte_db.py を1本作って、そこに寄せた。
Telegram 送信も同じ状態で、tg_send.py に寄せて tg_mac.py を廃止し、notify_report と levtech_notify も同じ部品を使うようにした。設定ファイルも Telegram とDBで分かれていたのを1つにまとめ、php 側は telegram.env を env_file で読ませた。ただしこれは、telegram.env を変えたときに php のコンテナを作り直さないと反映されない。手順を書き直したうえで、deploy-containers に番人を置いて、作り直し忘れをそこで止めるようにした。
公開チェック(devlog / blog)も、git への公開と承認の判定が二重になっていたので、devlog_preview の1本に寄せた。
書いてある内容の誤り
llms.txt に「未使用分の繰り越し」を全プラン共通の特長として書いていたが、実際はライトだけのものだった。直した。ついでにソース・コメント・ドキュメントを一通り見て、食い違っているところと重複しているところをまとめて直した。
ページの導線
料金とお問い合わせへの導線が複数箇所にあったのを、ページ最下部の1箇所にまとめ、デモは折り畳まないようにした。あわせて、ページのレイアウトはオーナーが決めるものだと CLAUDE.md・lp_advisor のプロンプト・ダッシュボードの見出しに明記し、lp_advisor が具体案を出すときに渡すページ説明も、この導線一本化に合わせて書き換えた。
ダッシュボードには、検索語ごとに着地したあとの行動を出すようにした。このとき、既定で開いている FAQ が読み込み時に toggle として数えられていたので、それは数えないようにした。