{
  "_description": "Tunables for dashboard/* modules. Loaded via core.config_loader.load('dashboard').",

  "app": {
    "_comment": "dashboard/app.py — FastAPI app",
    "title": "Sanad Dashboard",
    "version": "1.0.0",
    "static_subdir": "dashboard/static"
  },

  "api_input": {
    "_comment": "Shared by every route that accepts user text input / uploads. Single source of truth.",
    "max_text_len": 2000,
    "max_upload_bytes": 8388608
  },

  "voice_route": {
    "_comment": "dashboard/routes/voice.py — reads max_text_len from api_input above",
    "api_key_mask_visible": 4
  },

  "typed_replay_route": {
    "_comment": "dashboard/routes/typed_replay.py — reads max_text_len from api_input above"
  },

  "records_route": {
    "_comment": "dashboard/routes/records.py",
    "index_filename": "records.json"
  },

  "prompt_route": {
    "_comment": "dashboard/routes/prompt.py — script/rule filenames come from core.script_files; default prompt from core.gemini_defaults.default_system_prompt"
  },

  "logs_route": {
    "_comment": "dashboard/routes/logs.py",
    "default_tail_lines": 200,
    "max_tail_lines": 5000
  },

  "scripts_route": {
    "_comment": "dashboard/routes/scripts.py — max_script_bytes reads from api_input.max_upload_bytes"
  },

  "live_subprocess_route": {
    "_comment": "dashboard/routes/live_subprocess.py",
    "tail_default_lines": 100
  }
}
