# YC-Bench default preset — 1-year benchmark (Table 2 in paper)
#
# This is the canonical benchmark configuration. Every parameter is listed
# explicitly so this file serves as complete documentation of what is tunable.
#
# Primary differentiator: PAYROLL GROWTH from employee assignment.
# Assign-all (8 emp) grows payroll ~2.7× faster than selective (3 emp).
# Over 12 months this creates a $100K+ gap in profitability.
#
# Secondary differentiator: RAT CLIENTS (~35% of clients).
# RAT tasks have scope creep that causes deadline failures.
# RATs offer top-tier rewards to attract the greedy bot.
# Smart agents can detect RATs via `client history` after initial failures.
#
# Tertiary differentiator: TRUST BUILDING.
# Focusing on fewer clients builds trust → work reduction → faster tasks.
# Spreading across many clients erodes trust via cross-client decay.

# experiment identity (top-level fields)
name        = "default"
description = "1-year benchmark. Tests employee efficiency, client trust, and adversarial client detection."

# ---------------------------------------------------------------------------
# LLM agent
# ---------------------------------------------------------------------------

[agent]
model                    = "openrouter/z-ai/glm-5"
temperature              = 0.0
top_p                    = 1.0
request_timeout_seconds  = 300.0
retry_max_attempts       = 3
retry_backoff_seconds    = 1.0

# Conversation rounds retained in context before each API call.
# Older rounds are dropped proactively. Scratchpad survives truncation.
history_keep_rounds      = 20

# Optional system prompt override. Omit to use the built-in prompt.
# system_prompt = "..."

# ---------------------------------------------------------------------------
# Agent loop
# ---------------------------------------------------------------------------

[loop]
# Consecutive turns without `sim resume` before the loop forces a time-advance.
auto_advance_after_turns = 5

# Hard cap on total turns. Comment out or set to a large number for unlimited.
# max_turns = 500

# ---------------------------------------------------------------------------
# Simulation
# ---------------------------------------------------------------------------

[sim]
start_date    = "2025-01-01"    # ISO 8601
horizon_years = 1
company_name  = "BenchCo"

# ---------------------------------------------------------------------------
# World generation — scalar parameters
# ---------------------------------------------------------------------------

[world]
num_employees            = 8
initial_funds_cents      = 20_000_000    # $200,000
initial_prestige_level   = 1.0
work_hours_per_day       = 9.0

num_market_tasks             = 200
market_browse_default_limit  = 50

# Salary bump per completed task — each assigned employee gets this raise.
# Compounds over time, accelerating payroll pressure.
salary_bump_pct  = 0.01
salary_max_cents = 10_000_000   # cap individual salary at $100K/month
skill_rate_max   = 10.0         # cap employee skill rate

# --- Prestige mechanics ---
prestige_max  = 10.0
prestige_min  = 1.0

penalty_fail_multiplier    = 1.0
penalty_fail_funds_pct     = 0.35    # failing costs 35% of advertised reward
penalty_cancel_multiplier  = 1.5

# Extra reward fraction per prestige level above 1.
reward_prestige_scale = 0.30

# No passive prestige decay
prestige_decay_per_day = 0.0

# --- Client trust ---
num_clients              = 6
trust_max                = 5.0
trust_build_rate         = 5.0     # ~5 tasks to reach significant trust
trust_fragility          = 0.3
trust_focus_pressure     = 0.3     # cross-client decay
trust_reward_ceiling     = 2.6
trust_work_reduction_max = 0.50    # 50% less work at max trust
trust_gating_fraction    = 0.30    # 30% of tasks require trust
trust_gated_reward_boost = 0.0     # no reward distortion

# --- Client loyalty (adversarial clients) ---
loyalty_rat_fraction     = 0.35    # 35% adversarial clients
loyalty_severity         = 1.0
loyalty_reveal_trust     = 0.0

# Required qty scaling by prestige: qty *= 1 + scale * (prestige - 1).
prestige_qty_scale = 0.3

# --- Deadline ---
deadline_qty_per_day   = 150.0
deadline_min_biz_days  = 7

# --- Progress milestones ---
task_progress_milestones = []

# --- Business hours ---
workday_start_hour = 9
workday_end_hour   = 18

# ---------------------------------------------------------------------------
# World distributions
# ---------------------------------------------------------------------------

[world.dist.required_prestige]
type = "triangular"
low  = 1
high = 5
mode = 1

[world.dist.reward_funds_cents]
type = "triangular"
low  = 200_000      # $2,000
high = 1_200_000    # $12,000
mode = 500_000      # $5,000

[world.dist.domain_count]
type  = "constant"
value = 1

[world.dist.required_qty]
type = "triangular"
low  = 400
high = 1500
mode = 800

[world.dist.reward_prestige_delta]
type  = "beta"
alpha = 1.2
beta  = 2.8
scale = 0.35
low   = 0.0
high  = 0.35

[world.dist.skill_boost]
type  = "normal"
mean  = 0.12
stdev = 0.06
low   = 0.01
high  = 0.40

# ---------------------------------------------------------------------------
# Salary tiers — all three share values must sum to exactly 1.0
# ---------------------------------------------------------------------------

[world.salary_junior]
name       = "junior"
share      = 0.50
min_cents  = 200_000    # $2,000/month
max_cents  = 400_000    # $4,000/month
rate_min   = 1.0        # units/hour
rate_max   = 4.0

[world.salary_mid]
name       = "mid"
share      = 0.35
min_cents  = 600_000    # $6,000/month
max_cents  = 800_000    # $8,000/month
rate_min   = 4.0
rate_max   = 7.0

[world.salary_senior]
name       = "senior"
share      = 0.15
min_cents  = 1_000_000  # $10,000/month
max_cents  = 1_500_000  # $15,000/month
rate_min   = 7.0
rate_max   = 10.0
