Skip to content

Series build: a partial refusal exits 2, so a wrapper can still deliver - #35

Merged
mspinola merged 1 commit into
mainfrom
claude/series-partial-refusal-exit
Sep 25, 2026
Merged

mspinola merged 1 commit into
mainfrom
claude/series-partial-refusal-exit

Conversation

@mspinola

@mspinola mspinola commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

The failure this fixes

TradingView restated two put/call closes. The build refused those two symbols exactly as designed, and because the only signal it gave was "non-zero", run-series.cmd exited before its replica syncs. Thirteen breadth series sat correct on the producer box and five sessions stale on both replicas until someone went looking.

A refusal has to stop the symbol, not the delivery of every other symbol.

The change

The build now says which kind of non-zero it is:

code meaning wrapper should
0 nothing refused sync
2 (EXIT_PARTIAL) some refused, others did not sync, and surface the refusal
1 nothing usable: every target refused, a defer, a hard error stop

The result dict carries partial beside ok, and the CLI prints a line telling a wrapper to run its syncs anyway.

A symbol that was already current counts as succeeding. The flag answers "did every symbol refuse", not "did this run write rows". Keying it on rows written would have left the live case blocked, because the thirteen good series were already current by the time the two bad ones began refusing. There is a test for exactly that.

Test plan

  • Four new tests: partial exits 2 and prints the instruction; every-symbol-refusing stays 1; an already-current symbol still counts as succeeding; the flag is on the result dict. The refusal they trigger is the real one, a raw bar disagreeing with a stored bar.
  • Full suite 308 passed, 14 skipped. Ruff clean.
  • One existing test updated: it pinned the empty-targets result dict exactly, which now carries partial.

Wrapper side: mspinola/cotdata#119.

🤖 Generated with Claude Code

TradingView restated two put/call closes on 2026-09-25. The build refused those
two symbols exactly as designed, and because the only signal it gave was
"non-zero", run-series.cmd exited before its replica syncs. Thirteen breadth
series sat correct on the producer and five sessions stale on both replicas
until someone went looking. A refusal has to stop the symbol, not the delivery
of every other symbol.

The build now says which kind of non-zero it is. EXIT_PARTIAL (2) means some
targets refused and others did not; 1 keeps its old meaning of nothing usable
coming of the run (every target refused, a defer, a hard error); 0 still means
nothing refused. The result dict carries a `partial` flag beside `ok`, and the
CLI prints a line telling a wrapper to run its syncs anyway.

A symbol that was already current counts as succeeding. The flag answers "did
every symbol refuse", not "did this run write rows" -- keying it on rows written
would have left the live case blocked, because the thirteen good series were
already current by the time the two bad ones started refusing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mspinola
mspinola merged commit 9c5096d into main Sep 25, 2026
5 checks passed
@mspinola
mspinola deleted the claude/series-partial-refusal-exit branch September 25, 2026 18:13
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