Skip to content

Updating planning/TEAM_CONTRACT - #198

Closed
henrylau96 wants to merge 26 commits into
ed-donner:mainfrom
henrylau96:main
Closed

henrylau96 wants to merge 26 commits into
ed-donner:mainfrom
henrylau96:main

Conversation

@henrylau96

Copy link
Copy Markdown

updating planning/TEAM_CONTRACT.md since "No .env exists yet"

henrylau96 and others added 26 commits October 18, 2026 00:47
MassiveDataSource read snap.last_trade.timestamp, which does not exist on
the SDK's LastTrade model (it is sip_timestamp, in nanoseconds), so every
snapshot was skipped and the cache never filled. MagicMock-based tests
hid this.

- Extract price via fallback chain: last_trade -> min -> day -> prev_day
  (Starter plans have no lastTrade; day.close is 0 pre-market)
- Fall back to end-of-day grouped daily bars when the plan is not
  entitled to snapshots (free tier returns NOT_AUTHORIZED)
- Rewrite tests using real SDK models (TickerSnapshot.from_dict)
- Add planning/MASSIVE_API.md, MARKET_INTERFACE.md, MARKET_SIMULATOR.md
- Correct free tier description in PLAN.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows checkouts converted files to CRLF, making WSL git report every
file as modified. Pin all text files to LF regardless of client settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix Massive data source for all plan tiers; add market data docs
Live testing with a free-tier key found two bugs that mocked tests missed:

- get_snapshot_all(SnapshotMarketType.STOCKS) built the URL
  /locale/global/markets/SnapshotMarketType.STOCKS/tickers -> 404, because
  the SDK enum is a plain Enum. Pass the string "stocks" instead.
- latest_eod_closes used the local date. East of New York, local
  "yesterday" can still be the current market date, which free plans
  reject (NOT_AUTHORIZED). Use the America/New_York date.

Adds a test that runs the real SDK URL building with only the HTTP layer
stubbed, and a test pinning the New York date. Verified live: free key
falls back to EOD mode and prices all watched tickers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix Massive snapshot URL and EOD date; verified against live API
The conftest event_loop_policy fixture used asyncio.DefaultEventLoopPolicy,
deprecated in Python 3.14 (removal in 3.16), emitting a DeprecationWarning
on every test. It only returned the default policy, so it is removed.

Pin Python 3.14 via backend/.python-version and update the Docker stage in
PLAN.md to match, so local runs and the container use the same version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pin Python 3.14 and drop deprecated event loop fixture
Grounds the unified API, simulator and Massive client design in the
existing backend/app/market code, lists gaps against PLAN.md (daily
change %, held-ticker tracking, SSE keep-alive, router factory, fresh
prices on add) and gives code and tests for each proposed change.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEdio2mjEyHsN5RmV7eLrX
The review step fails with is_error:true and no usage, but the action
hides the real error. Printing full output makes the cause visible.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEdio2mjEyHsN5RmV7eLrX
Show full Claude output in the review workflow
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEdio2mjEyHsN5RmV7eLrX
The token issue it was added to diagnose is fixed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KEdio2mjEyHsN5RmV7eLrX
Add detailed market data backend design (planning/MARKET_DATA_DESIGN.md)
Database layer, portfolio/watchlist API, LLM chat (LiteLLM via OpenRouter
with mock mode), Next.js static frontend, Docker image with start/stop
scripts, and Playwright E2E suite. Also fixes the Massive snapshot 404
(enum passed as market_type) and adds an end-of-day fallback for free-tier
keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps main's reviewed Massive client and tests (snapshot fix + EOD mode),
replacing the duplicate fix made on this branch. Moves the Docker image to
Python 3.14 to match backend/.python-version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build full FinAlly platform with agent team
Grant pull-requests: write and allow the gh commands and inline-comment
tool the code-review plugin uses; previously its comments were blocked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The root .gitignore's lib/ rule ignored frontend/src/lib, so the API
client, types and helpers were never committed and fresh clones failed
to build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Chat runs watchlist changes before trades, so "add X and buy X" works.
- transaction() takes the write lock up front (BEGIN IMMEDIATE), fixing a
  lost-update race where concurrent buys could spend the same cash.
- execute_trade rejects NaN/inf quantities with a 400 instead of a 500.
- Removing the selected ticker moves the chart and trade bar to the next one.

Each fix has a test that failed before the change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Commit frontend/src/lib hidden by the lib/ ignore rule
Let the review workflow post PR comments
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Update team contract to match the built project
@henrylau96 henrylau96 closed this Oct 19, 2026
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.

2 participants