read.markets/app/jobs
Giorgio Gilestro c5fb4525f3 jobs: per-row savepoint + aggregate logging in translation fan-out
Previously translate_log_for_active_languages and
translate_summary_for_active_languages added every successful
translation to the session and called session.commit() once at the
end. A single bad row (DB error, constraint violation, encoding
mismatch) rolled back the whole batch — losing all the languages that
had succeeded.

Wrap each row in session.begin_nested() so a per-row failure only
loses that one row. Track succeeded/failed counts and log them at the
end — escalating to error if zero succeeded out of N attempted, so
total failure surfaces in monitoring instead of just N warning lines.
2026-05-28 12:37:06 +02:00
..
__init__.py initial commit — cassandra v0.1 2026-05-15 21:56:10 +01:00
_helpers.py test+fix: make the suite run cleanly in the test container 2026-05-26 00:11:18 +02:00
_market_context.py backend: dedupe shared logic (indicator_summary_job, CHAT_REFERENCE_LINE, call_openrouter alias) 2026-05-27 19:30:11 +02:00
ai_log_job.py jobs: per-row savepoint + aggregate logging in translation fan-out 2026-05-28 12:37:06 +02:00
email_digest_job.py email: split digest renderer to digest_email.py 2026-05-27 21:33:06 +02:00
indicator_summary_job.py jobs: per-row savepoint + aggregate logging in translation fan-out 2026-05-28 12:37:06 +02:00
market_job.py phase G: data minimisation + passwordless auth + DeepSeek-first LLM 2026-05-18 14:16:57 +01:00
news_job.py news: auto-tag headlines + market-aware cadence + filter UI 2026-05-21 23:25:03 +01:00
rollup_job.py initial commit — cassandra v0.1 2026-05-15 21:56:10 +01:00
universe_flush_job.py phase G: data minimisation + passwordless auth + DeepSeek-first LLM 2026-05-18 14:16:57 +01:00