This release adds 2 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+9 more
Summary
AI summaryFixes positions opened via the platform being incorrectly tagged as 'External broker position' and adds auto-import for untracked option positions.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Auto-imports untracked option positions from the broker as tracked positions with management UI. Auto-imports untracked option positions from the broker as tracked positions with management UI. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Bugfix | Medium |
Positions opened via the platform no longer get incorrectly tagged as 'External broker position'. Positions opened via the platform no longer get incorrectly tagged as 'External broker position'. Source: llm_adapter@2026-05-29 Confidence: low |
— |
| Bugfix | Low |
0 DTE positions now display correctly as '0' instead of 'N/A'. 0 DTE positions now display correctly as '0' instead of 'N/A'. Source: llm_adapter@2026-05-29 Confidence: high |
— |
Full changelog
Recommended upgrade for everyone. Fixes a real bug where positions opened through the platform sometimes ended up tagged as 'External broker position' and could not be managed (no SL/TP, no close button).
What's fixed
Positions opened via the platform no longer get tagged 'External'
_fetch_broker_positions (the 5-second TTL cache for broker positions added in v0.1.3) returned fresh=True on cache hits — not just on actual broker calls. The destructive position-cleanup loop in get_position_details used that flag to decide whether it was safe to delete tracked positions that weren't in the broker's positions list.
Race:
- T=0: Order placed; broker hasn't filled yet
- T=1: Broker fills,
process_pending_orderswrites the position to our DB - T=2:
/api/positionpolls — but the cached broker snapshot is from T=0 and doesn't include the new position. Cleanup logic sees the position in our DB, not in the cached snapshot, and deletes it - T=6: Cache expires, broker is re-polled, now includes the position — but it's no longer in our DB, so it renders as 'External broker position'
Fix: cache hits no longer claim to be fresh. Only actual broker fetches set just_fetched=True, and only those trigger destructive cleanup.
Auto-import untracked broker option positions
Even with the cache fix, any future bug that broke position-creation would leave the user with unmanageable positions. v0.1.4 self-heals: when the trading engine sees an option position at the broker that isn't in our DB, it auto-imports it as a tracked position. SL/TP start empty — drag them on the chart to attach. The position immediately gets the × close button + standard management UI.
Stock positions in the broker account are still ignored (the platform manages options, not stocks).
0 DTE positions display correctly
PositionTracker rendered the DTE field as position.dte || 'N/A'. JavaScript's || falls back when the left operand is falsy, and 0 is falsy — so 0 DTE positions (a primary use case the README pitches) displayed as 'N/A'. Swapped to ?? (nullish coalescing) so only null / undefined falls back. Real 0 now renders as 0.
How to upgrade
git pull
# restart the launcher, refresh the browser tab
Verified
- Auto-import test: untracked broker option appears as tracked, no 'External' tag, close button visible
- Cache semantics: 4/4 unit cases pass — first call just_fetched=True, cache hit just_fetched=False (the fix), TTL expiry re-fetches, broker failure serves stale with just_fetched=False
- 0 DTE position renders DTE: 0 (not N/A)
- v0.1.1 + v0.1.2 + v0.1.3 guarantees all preserved
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About calesthio/OptionsCanvas
All releases →Beta — feedback welcome: [email protected]