From d4eacbd72b253ec5c3437d86f27dc6d0d0697775 Mon Sep 17 00:00:00 2001 From: jaxperro Date: Thu, 9 Jul 2026 00:50:08 -0400 Subject: [PATCH] =?UTF-8?q?publish=5Ffeed:=20publish=20untracked=20(first-?= =?UTF-8?q?ever)=20feed=20files=20=E2=80=94=20real-money=20feed=20was=20st?= =?UTF-8?q?uck=20at=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- copybot.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/copybot.py b/copybot.py index 4cf7f1ed..21071b7f 100644 --- a/copybot.py +++ b/copybot.py @@ -822,8 +822,16 @@ class Copybot: # publish only when the FEED itself changed (a bet placed/settled) — # the state file churns bookkeeping every cycle and would otherwise # commit every FEED_PUSH_MIN_S forever. - if subprocess.run(["git", "-C", repo, "diff", "--quiet", "--", self.feed_path], - capture_output=True).returncode == 0: + unchanged = subprocess.run( + ["git", "-C", repo, "diff", "--quiet", "--", self.feed_path], + capture_output=True).returncode == 0 + # a brand-new feed path is UNTRACKED — git diff reports no change + # for it, which silently suppressed the real-money feed's first + # publish forever (found 2026-07-09, /live stuck at 404) + untracked = subprocess.run( + ["git", "-C", repo, "ls-files", "--error-unmatch", self.feed_path], + capture_output=True).returncode != 0 + if unchanged and not untracked: return paths = [p for p in (self.feed_path, self.engine.state_path, self.fill_log) if os.path.exists(os.path.join(repo, p))]