19 Commits
Author SHA1 Message Date
lorenzozanee ed2ba90fcf docs: add option evidence to broker bring-up checklist
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-10-10 05:16:55 +08:00
lorenzozanee f740e906f0 fix(providers): expire cached Copilot CLI token
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-27 22:32:53 +08:00
lorenzozanee c28209f4d1 feat(backtest): warn about model training exposure
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-27 18:20:21 +08:00
lorenzozanee d25d9f93c6 feat(backtest): add hash-only run card traces
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-27 07:40:58 +08:00
lorenzozanee 7ada7acd66 fix(mt5): resolve broker symbols in symbol search
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-25 22:33:34 +08:00
lorenzozanee 8845b722f7 fix(robinhood): gate unsupported option orders
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-25 10:37:16 +08:00
lorenzozanee 62174a1277 docs(readme): clarify Telegram polling ownership
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-25 00:30:04 +08:00
lorenzozanee 0fff715f80 fix(robinhood): reject malformed portfolio buying power
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-20 21:35:26 +08:00
lorenzozanee 657f79c4ec fix(tools): repair lockup expiry report handling
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-20 01:54:30 +08:00
lorenzozanee 9cb8f063e7 fix(tools): restore dragon-tiger seat reports
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-20 01:41:52 +08:00
lorenzozanee 8bfda9b758 fix(qveris): avoid end-date parameter collisions
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-19 13:25:22 +08:00
lorenzozanee e1a0932f48 fix(loaders): serve adjusted prices on FMP and Tiingo paths
FMP and Tiingo both returned raw OHLC, so dividend gaps booked as fake
losses and momentum was computed on the wrong caliber. Yahoo and
yfinance were already moved to qfq in #1287; this brings the remaining
us_equity loaders to the same caliber: Tiingo now prefers adjOpen/adjClose
(and falls back to adjClose/close ratio when only adjClose is present), FMP
switches to the Stable historical-price-eod/full endpoint and scales OHLC
by adjClose/close when available, keeping volume raw. The FMP parser also
accepts the Stable top-level array while retaining legacy {historical: [...]}
compatibility.

Fixes #1296.

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-09-01 19:22:05 +08:00
lorenzozanee 75bdf0c390 fix(desktop): correctly handle EPERM in updater shutdown checks
isProcessAlive treated every kill error as not alive, so EPERM
(process exists but no permission) was misclassified as exited.
This made shutdown evidence report backendExited and watchdogExited
true while the PID was still alive, allowing stopForUpdate to
succeed prematurely and risk installer launch while the backend
still held the loopback listener.

Distinguish EPERM (alive) from ESRCH (not alive) in both
backend-manager.ts and backend-watchdog.ts, matching Node.js
process.kill semantics.

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-31 11:05:28 +08:00
lorenzozanee c6ff4d233e fix(fmp): use Stable endpoint and prevent silent fallback for explicit source
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-31 00:58:01 +08:00
lorenzozanee 56c5d1047b feat(backtest): add USD-M tolerance calibration from recorded comparisons
Derive a versioned ReconciliationTolerance from recorded
local-versus-exchange comparison samples and verify that a tolerance
bounds a recorded sample set. Calibration is pure and offline, fails
closed on invalid or under-sampled input, and leaves the merged
reconciliation and drift-evidence contracts unchanged.

Progresses #1030.

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-29 06:38:16 +08:00
lorenzozanee 6a3b0b590e fix(agent): escalate stream retry delays and honor Retry-After
The single stream retry slept a fixed constant at both call sites, so a
sustained provider overload burned the retry budget at a flat 1s per
iteration. Each site now doubles the delay across consecutive retryable
failures (capped, exponent clamped like the worker-level backoff) and
honors a provider-suggested Retry-After on 429/529, bounded by the new
SWARM_STREAM_RETRY_MAX_DELAY_S / VT_STREAM_RETRY_MAX_DELAY_S knobs.
Retry-After is extracted once on ProviderStreamError so every retry site
benefits. Retry counts and first-failure timing are unchanged.

Closes #1208

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-29 05:14:21 +08:00
lorenzozanee e339d91ff7 fix(providers): self-heal temperature rejection on the OpenAI-compatible path
Next-generation Claude models reject any request carrying `temperature`
with HTTP 400 "`temperature` is deprecated for this model." (issue
#1223). The native Anthropic Messages path already classifies the error,
retries once without the field and remembers the model, but the generic
OpenAI-compatible branch still sent `temperature` unconditionally, so
LANGCHAIN_PROVIDER=openai with OPENAI_BASE_URL pointed at Anthropic's
compatibility endpoint failed on every call.

Extend the same self-heal to ChatOpenAIWithReasoning: reuse
_is_anthropic_temperature_unsupported_error and the process-wide
_ANTHROPIC_TEMPERATURE_UNSUPPORTED set, retry sync/async generate and
both stream paths once without the field, and omit temperature up front
for remembered models in _get_request_payload. _astream's stream_usage
fallback moves to a named _astream_with_usage_fallback to mirror the
sync layering; behavior is unchanged.

Models that accept `temperature` are unaffected. Regression tests feed
the verbatim 400 body through mocked endpoints and fail on the
pre-fix code.

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-29 04:51:39 +08:00
lorenzozanee 252c92fe8c feat(backtest): surface silent order-plan rejections via an _on_plan_rejected hook
_plan_open_order returns None for seven distinct reasons and callers
cannot tell "nothing to do" from "wanted but unfillable". Split the
combined guard into labelled branches that pass a machine-readable
reason (no_target_weight, already_held, no_data, no_bar,
execution_blocked, invalid_price, zero_size) to a new no-op
_on_plan_rejected hook that engine subclasses can override. No
behavior change; the default hook does nothing.

Closes #1235

Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-29 01:51:59 +08:00
lorenzozanee 82bcc5adbb fix(tests): sandbox the suite's config root before collection on Windows
Signed-off-by: lorenzozanee <wyz0707@proton.me>
2026-08-16 22:51:01 +08:00