Portfolio Agent EvalsHarbor task suite · ETF analyze → backtest → rebalance
Rebalancing & Trade Generation/pf-rb-withdrawal-sequencing

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.

T3hardRebalancemulti-metricready
Edit
readystatic
Agent budget
40 min
Verifier budget
5 min
Tier target
25–50% pass expected

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

MetricWeightCheck
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

Outputs

What the verifier reads from /app/output

  • /app/output/trades.csv
    CSV
    Sales per account.
  • /app/output/withdrawal_plan.json
    JSON
    Sourcing plan.
  • /app/output/post_trade.json
    JSON
    Post-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

    Reviews are read-only in static export.
    Tier 3 · Expert25–50% pass expected. Created 2026-01-01, updated 2026-01-01.