Skip to content

fix(research): factor-profiles node HARD-FAILS — no silent degrade (follow-up to #203)#204

Merged
cipher813 merged 1 commit into
mainfrom
fix/factor-profiles-node-hard-fail
May 19, 2026
Merged

fix(research): factor-profiles node HARD-FAILS — no silent degrade (follow-up to #203)#204
cipher813 merged 1 commit into
mainfrom
fix/factor-profiles-node-hard-fail

Conversation

@cipher813
Copy link
Copy Markdown
Owner

Follow-up to #203 (merged). Per Brian + the standing feedback_no_silent_fails principle.

Problem: #203 wired the orphaned factor-profiles producer with graceful-degrade (catch exception → log warning → return + continue). That recreates the exact silent-failure class this entire arc just root-caused: a failing/unwired producer logs a warning nobody reads while focus-list + factor-blend silently go inert — 4+ days undetected, which is how we got here.

Fix: compute_factor_profiles_node now hard-fails (raises) on any failure (missing run_date, producer exception) → the Research SF state fails loudly and alerts.

Not spuriously fragile: features/{run_date}/*.parquet is produced by DataPhase1 upstream in the same Saturday SF. If it's absent, DataPhase1 already failed — so raising here surfaces a real incident and cannot fail a healthy run. Consistent with the system's fail-loud norm (DataPhase2 populated-ratio gate; optimizer PR5 empty-order-book-rather-than-legacy-fallback).

Still substrate-only — no flag flipped, no scoring/agent behavior change. Docstring + 2 tests flipped graceful-return → pytest.raises. Node tests 9/9; full research suite 1366 passed.

🤖 Generated with Claude Code

…ollow-up to #203)

#203 wired the producer with graceful-degrade (catch/log/continue).
Per Brian + feedback_no_silent_fails: that recreates the exact
orphaned-producer silent-failure class this wiring exists to fix — a
failing producer would log a warning nobody reads while focus-list +
factor-blend silently go inert again.

compute_factor_profiles_node now RAISES on any failure (missing
run_date, producer exception) → the Research SF state fails loudly +
alerts. Not spuriously fragile: features/{run_date}/*.parquet is
produced by DataPhase1 UPSTREAM in the same Saturday SF, so its
absence is already an incident (DataPhase1 should have failed) — this
surfaces real breakage, never fails a healthy run. Matches the
system's fail-loud norm (DataPhase2 populated-ratio gate; optimizer
PR5 empty-order-book-not-legacy-fallback). Still substrate-only — no
flag flipped, no scoring change. Docstring + 2 tests flipped
graceful-return → pytest.raises. Suite 1366 passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cipher813 cipher813 merged commit 3ad57e1 into main May 19, 2026
1 check passed
@cipher813 cipher813 deleted the fix/factor-profiles-node-hard-fail branch May 19, 2026 00:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant