8.7 KiB
398/400/401 Integration Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Implement #398, #400, #401 as three isolated PRs targeting feature/398-400-401, merge only when CI passes and self-review has zero minor issues, then run and monitor overnight script without stopping the process.
Architecture: Create one integration base branch from origin/main, branch per issue, and ship in strict sequence (398 -> 400 -> 401) to keep diffs isolated. Use TDD per issue (fail-first tests, minimal fix, regression checks), then perform PR self-review and CI gate before merge. After all merges, run overnight in background and monitor logs/process health while leaving runtime active.
Tech Stack: Python 3, pytest, asyncio runtime loop, Git/Gitea (tea), shell scripts (scripts/run_overnight.sh).
Task 1: Prepare Integration Branch Topology
Files:
- Modify:
.gitrefs only (branch operations)
Step 1: Sync base branch
Run: git fetch origin && git checkout main && git pull --ff-only origin main
Expected: local main equals origin/main
Step 2: Create integration branch
Run: git checkout -b feature/398-400-401
Expected: current branch is feature/398-400-401
Step 3: Create issue branches from integration branch
Run: git checkout -b fix/398 && git checkout feature/398-400-401 && git checkout -b fix/400 && git checkout feature/398-400-401 && git checkout -b fix/401 && git checkout feature/398-400-401
Expected: three issue branches exist and point to same base commit
Step 4: Push all branches
Run: git push -u origin feature/398-400-401 fix/398 fix/400 fix/401
Expected: remote tracking set for all four branches
Step 5: Commit checkpoint
Run:
git status --short
Expected: clean workspace before issue implementation
Task 2: Implement #398 with TDD (KR rt_cd failure handling)
Files:
- Modify:
src/main.py - Test:
tests/test_main.py
Step 1: Write failing test
Add test in tests/test_main.py verifying KR order returns rt_cd != '0' does not trigger success side effects (no BUY notify, no trade log success path).
Step 2: Run test to verify failure
Run: pytest tests/test_main.py -k "kr and rt_cd" -v
Expected: FAIL showing current code incorrectly treats KR order as success
Step 3: Write minimal implementation
In KR order branch of src/main.py, immediately after send_order, add rt_cd acceptance check identical to overseas branch behavior; set order_succeeded = False and warning log when rejected.
Step 4: Run targeted tests
Run: pytest tests/test_main.py -k "kr and rt_cd" -v
Expected: PASS
Step 5: Run safety regression
Run: pytest tests/test_main.py tests/test_order_policy.py -q
Expected: PASS
Step 6: Commit
Run:
git add tests/test_main.py src/main.py
git commit -m "fix: handle KR order rejection via rt_cd check (#398)"
Task 3: Open PR for #398, Self-review, CI gate, Merge
Files:
- Modify: remote PR metadata/comments only
Step 1: Push branch
Run: git checkout fix/398 && git push -u origin fix/398
Step 2: Create PR targeting integration branch
Run: tea pr create --base feature/398-400-401 --head fix/398 --title "fix: #398 KR rt_cd rejection handling" --description "Implements issue #398 with tests."
Expected: PR URL returned
Step 3: Add self-review comment (severity rubric)
Run: tea pr comment <PR_398> --message "Self-review: Critical 0 / Major 0 / Minor 0. Merge allowed when CI passes."
Step 4: Wait for CI success
Run: tea pr checks <PR_398> (poll until all success)
Expected: all checks success
Step 5: Merge only when gate passes
Run: tea pr merge <PR_398> --delete-branch=false
Expected: merged into feature/398-400-401
Task 4: Implement #400 with TDD (US session transition correctness)
Files:
- Modify:
src/main.py,src/core/order_policy.py,src/markets/schedule.py - Test:
tests/test_main.py,tests/test_market_schedule.py,tests/test_order_policy.py
Step 1: Write failing tests
Add tests for:
- session transition event handling (
US_DAY -> US_REG) emits open event and forces rescan US_DAYtreated non-tradable for playbook/trading actions
Step 2: Run failing tests
Run: pytest tests/test_main.py tests/test_market_schedule.py tests/test_order_policy.py -k "US_DAY or US_REG or session" -v
Expected: FAIL at current behavior
Step 3: Minimal implementation
- Track market state by session identifier (not bool only)
- Force rescan/playbook refresh on US_REG entry
- Exclude/suppress US_DAY for trading/playbook generation path
Step 4: Re-run targeted tests
Run: same command as Step 2 Expected: PASS
Step 5: Regression pass
Run: pytest tests/test_main.py tests/test_market_schedule.py tests/test_order_policy.py tests/test_pre_market_planner.py -q
Expected: PASS
Step 6: Commit
Run:
git add src/main.py src/core/order_policy.py src/markets/schedule.py tests/test_main.py tests/test_market_schedule.py tests/test_order_policy.py
git commit -m "fix: handle US session transitions and suppress US_DAY trading (#400)"
Task 5: Open PR for #400, Self-review, CI gate, Merge
Files:
- Modify: remote PR metadata/comments only
Step 1: Push branch
Run: git checkout fix/400 && git push -u origin fix/400
Step 2: Create PR
Run: tea pr create --base feature/398-400-401 --head fix/400 --title "fix: #400 US session transition handling" --description "Implements issue #400 with tests."
Step 3: Add self-review comment
Run: tea pr comment <PR_400> --message "Self-review: Critical 0 / Major 0 / Minor 0. Merge allowed when CI passes."
Step 4: Wait for CI success
Run: tea pr checks <PR_400>
Expected: all checks success
Step 5: Merge
Run: tea pr merge <PR_400> --delete-branch=false
Task 6: Implement #401 with TDD (multi-market parallel processing)
Files:
- Modify:
src/main.py - Test:
tests/test_main.py
Step 1: Write failing tests
Add tests verifying:
- open markets are processed via parallel task dispatch
- circuit breaker behavior still triggers global shutdown semantics
- shared state updates remain deterministic under parallel market execution
Step 2: Run failing tests
Run: pytest tests/test_main.py -k "parallel or market" -v
Expected: FAIL before implementation
Step 3: Minimal implementation
Refactor sequential market loop into market-level async tasks (asyncio.gather/task group) while preserving stock-level processing order per market and existing failure semantics.
Step 4: Re-run targeted tests
Run: same command as Step 2 Expected: PASS
Step 5: Regression pass
Run: pytest tests/test_main.py tests/test_runtime_overnight_scripts.py -q
Expected: PASS
Step 6: Commit
Run:
git add src/main.py tests/test_main.py
git commit -m "feat: process active markets in parallel with preserved shutdown semantics (#401)"
Task 7: Open PR for #401, Self-review, CI gate, Merge
Files:
- Modify: remote PR metadata/comments only
Step 1: Push branch
Run: git checkout fix/401 && git push -u origin fix/401
Step 2: Create PR
Run: tea pr create --base feature/398-400-401 --head fix/401 --title "feat: #401 parallel multi-market processing" --description "Implements issue #401 with tests."
Step 3: Add self-review comment
Run: tea pr comment <PR_401> --message "Self-review: Critical 0 / Major 0 / Minor 0. Merge allowed when CI passes."
Step 4: Wait for CI success
Run: tea pr checks <PR_401>
Expected: all checks success
Step 5: Merge
Run: tea pr merge <PR_401> --delete-branch=false
Task 8: Final Branch Validation + Overnight Runtime Monitoring
Files:
- Execute:
scripts/run_overnight.sh - Observe: runtime log file (e.g.,
logs/overnight.log)
Step 1: Checkout integrated branch and sync
Run: git checkout feature/398-400-401 && git pull --ff-only origin feature/398-400-401
Expected: branch contains merged PRs
Step 2: Start overnight in background (non-blocking)
Run:
nohup ./scripts/run_overnight.sh > /tmp/ouroboros_overnight.log 2>&1 &
echo $! > /tmp/ouroboros_overnight.pid
Expected: PID written and process running
Step 3: Verify process alive
Run: ps -p $(cat /tmp/ouroboros_overnight.pid) -o pid,ppid,stat,etime,cmd
Expected: process present
Step 4: Monitor startup logs
Run: tail -n 120 /tmp/ouroboros_overnight.log
Expected: startup complete and runtime loop active without fatal errors
Step 5: Ongoing monitor without shutdown
Run: tail -f /tmp/ouroboros_overnight.log (sample monitoring window, then detach)
Expected: continued activity; do not kill process
Step 6: Final status note
Record PID, log path, and “process left running” status.