Raise a large withdrawal across accounts with sequencing rules and penalties
Raise a large withdrawal across accounts following sequencing rules and penalties while keeping the household within bands with minimal cost.
instruction.md
What the agent sees (CONVENTIONS.md is appended automatically)
Raise 150,000 USD
Fund a 150,000 USD household withdrawal by next open. Sequencing rules in ips.yaml: taxable cash first, then taxable sales, then traditional IRA (10% early-withdrawal penalty applies because the owner is under 59.5 — treat as a cost), then Roth last (contribution basis in accounts.csv is penalty-free; earnings are penalised).
Choose sales so that after the withdrawal all sleeves are within bands and the objective — penalties plus 0.5% of taxable realised gains (from tax_lots.csv, FIFO) — is minimised. Whole shares; per-account cash buffers.
Write trades.csv, /app/output/withdrawal_plan.json (per-account amounts and penalties) and post_trade.json.
Verification
reward.json metrics · weights sum to 1.00
| Metric | Weight | Check |
|---|---|---|
| feasibilitygate | 0.35 | Bands, buffers, whole shares, sequencing respected. GATE at 0.2. |
| withdrawal_amount_exact | 0.15 | Raised amount within 1 USD of 150,000 after costs. |
| objective_gap | 0.5 | Objective <= oracle + 1%. |
Gates: feasibility. A gate failure caps or zeroes the trial reward regardless of other metrics.
Harbor scaffold
Generated from this record — task.toml, Dockerfile, verifier, oracle stub
schema_version = "1.4" [task] name = "portfolio-agent-evals/pf-rb-withdrawal-sequencing" version = "1.0.0" description = "Raise a large withdrawal across accounts following sequencing rules and penalties while keeping the household within bands with minimal cost." keywords = ["etf", "portfolio", "rebalance", "trade-generation", "withdrawal-planning", "constraint-satisfaction", "optimization"] [metadata] author_name = "portfolio-agent-evals" difficulty = "hard" category = "quant-finance" tags = ["trade-generation", "tier-3", "rebalance", "multi-metric"] theme = "Rebalancing & Trade Generation" tier = 3 reward_type = "multi-metric" [agent] timeout_sec = 2400.0 [verifier] timeout_sec = 300.0 [environment] # Offline by design: all data is synthetic and generated at build time. network_mode = "none" cpus = 2 memory_mb = 4096 storage_mb = 10240 build_timeout_sec = 900.0
Traps
Each must carry signal: a trap-blind solution must lose credit
- Roth basis versus earnings split.
- Bands after withdrawal are relative to the smaller household total.
- Selling only the over-weight sleeve cannot raise enough in taxable; the sequence forces IRA usage.
- Realised gains require FIFO lot accounting.
Inputs
Fixtures mounted in the environment
- /app/portfolio/
- /app/data/prices/
- /app/policy/ips.yaml
Outputs
What the verifier reads from /app/output
- /app/output/trades.csvCSVSales per account.
- /app/output/withdrawal_plan.jsonJSONSourcing plan.
- /app/output/post_trade.jsonJSONPost-withdrawal weights.
Anti-gaming
Taxable size is seeded so it cannot fund the withdrawal alone.
Oracle notes
solution/solve.sh must score 1.0 on five seeds
MILP with lot-level sell variables.
Reviews (0)
Design review before a task is marked ready