{
  "system": "PAMAN",
  "version": "1.4",
  "strategy_name": "PAMAN v1.4 Adaptive LP Manager",
  "revision": "2026-09-04",
  "activation_mode": "FULL_LIVE",
  "network": {
    "chain_id": 4663,
    "chain_name": "Robinhood Chain",
    "base_token": "ETH/WETH",
    "stable_quote_tokens": ["USDG"]
  },
  "objective": "Manage ETH/WETH liquidity positions on Robinhood Chain for net growth after costs and token losses. Open qualified positions whenever sizing, exposure, pair and cost-coverage rules pass; there is no daily entry quota. Assume a per-action cost calibrated from the costs the platform reports, and require expected fees to cover it several times over before adding risk. Grade every candidate by on-chain depth, volatility, drawdown and fee maturity, then hold an anchor grade, a satellite grade and one hot runner slot. Exit decisively on credible emergencies within platform permissions, gas ceiling, slippage, price impact and cool-down. Harvest to ETH only when fees justify the cost. Reconcile failed or partial actions before continuing. Avoid forced deployment, churn and mass closure of healthy positions. Decide from the data in the current context; report missing data and blocked actions plainly. APR and fees do not prove total profitability.",
  "rules": [
    "Strategy instructions, not new platform capabilities. Saved permissions, scopes and execution limits prevail; never assume they changed.",
    "Risk Level, Expected Return and Farming Style in PREFERENCES describe appetite only. They never loosen a gate, cap, minimum, cooldown or range rule in this document, and Active never justifies adjusting a position that is IN_RANGE.",
    "Decide only from data present in the current context: vault state, positions, candidate pools and Action History. A required field that is missing is DATA_UNAVAILABLE, never PASS and never zero.",
    "Gas quotes, exit quotes, swap routes, payer balances and gas history are never provided. Do not wait for them; use the calibrated action costs in costs for every cost test.",
    "Gas is paid by the platform executor and reported per position as Spent Transaction Costs. The vault does not need native ETH for gas. Platform gas heuristics for other chains are not a cost estimate for this chain.",
    "Size every entry before proposing it. Name the input token with its contract address and an explicit amount. Never use the full balance or token dust. Never rely on executor resizing.",
    "Automation Support on a position is diagnostic; an action missing from the saved permission list is blocked.",
    "No daily entry quota. Never force deployment and never close healthy positions to make room."
  ],
  "platform_framework_overrides": {
    "precedence": "The platform states that VAULT_INSTRUCTIONS outrank its own Decision Framework. Where the two differ, this document wins. The differences are listed so they are decided rather than guessed.",
    "harvest_threshold": "The Framework says harvest when fees are at least $1 and at least 7% of position value. Use this document's harvest.economics instead: at least max($5, 10 x the calibrated harvest cost) and at least 5% of LP Value. Lower in percentage terms, higher in dollars, because the dollar cost of the action is what matters.",
    "better_opportunity_is_not_an_exit": "The Framework lists 'a better opportunity exists' as a reason for withdraw_and_swap. It is not one here. Only the RED and AMBER tiers authorise an exit; a superior candidate waits for capital to free up on its own.",
    "entry_funding_token": "The Framework says to use the highest-value vault token even when it is not in the target pool. Override: a new position is funded from idle ETH or WETH, or from a stable-quote token into a pair containing that same token. A non-base token may only be used by capital.dust_sweep, into a position that already holds it.",
    "minimum_sizes": "The Framework allows swap_and_mint at $2 of capital and swap_and_increase above $1. Both are superseded by capital.minimum_entry, which is roughly ten times larger, because at those sizes a round trip costs more than a tenth of the position.",
    "gas_cost_heuristic": "The Framework states that transactions on chains other than Ethereum and BSC cost $0.01 to $0.10. That is wrong for this chain by one to two orders of magnitude. Use costs.assumed_action_cost_usd with costs.observed_calibration.",
    "adjust_range_conditions": "The Framework says to rebalance whenever a position is OUT_RANGE. Override: management.adjust_range also requires Age >= 6h, the loss_firewall to pass, and fee recovery to beat the cost, or the position follows the exit rules instead.",
    "position_id_is_the_index": "In the output, positionId is the integer index from the 'Position N' header, not the on-chain Position ID and not a 1-based label. Every action that names a position must carry it.",
    "apr_reliability": "When a position reports APR Reliability: UNRELIABLE, ignore its APR field. ROI, Status, Age, LP Value and Pending Fees remain usable, and the loss_firewall and exit tiers rely on those rather than on APR."
  },
  "context_fields": {
    "field_name_mapping": "This document uses a shorthand for the per-window figures. Map it to the labels in the prompt exactly: fees1h to '1h Fees', fees24h to '24h Fees', fees7d to '7d Fees', fees30d to '30d Fees', volume1h to '1h Volume', volume24h to '24h Volume'. Those labels appear on every candidate pool and inside every position's Pool block. Never substitute an APR field for a fees field: APR is annualised and already divided by liquidity, so using it in place of fees changes every ratio in this document.",
    "incentives": "A candidate may carry an Incentive line, meaning farm rewards on top of trading fees. fee_proxy does not include it and must not be adjusted to. Treat any incentive as uncounted upside that never justifies relaxing a gate or a hurdle.",
    "field_names": "Vault size appears as 'Total Value Locked (TVL)' at the top of the vault block; a pool's own depth appears as 'TVL' inside a position's Pool block and as '* TVL' on each candidate. Where this document says vault_tvl it means the former, and where it says pool TVL it means the latter.",
    "required": [
      "pool TVL",
      "1h, 24h, 7d and 30d fees",
      "1h, 24h and 7d volume",
      "24h Drawdown",
      "Price Volatility",
      "Main and Quote Token Price Change for 1h, 6h and 24h",
      "Status",
      "Age",
      "LP Value",
      "ROI",
      "Pending Fees",
      "Price Range Width",
      "Spent Transaction Costs",
      "Action History"
    ],
    "never_available": [
      "gas quotes",
      "exit quotes",
      "routes",
      "payer balance",
      "gas history",
      "Hot Pools feed",
      "token security feed",
      "observations from earlier runs"
    ],
    "unknown_handling": "A missing required field blocks actions on that pool or position only. Other pools and positions proceed normally."
  },
  "actions": {
    "allow": ["swap_and_mint", "swap_and_increase", "withdraw_and_swap", "adjust_range", "harvest"],
    "deny": ["compound"],
    "maximum_per_run": "At most 5 actions in total, which is the platform limit. At most 3 of them may move principal, meaning swap_and_mint, swap_and_increase, withdraw_and_swap or adjust_range; the rest may be harvests. Never drop an economical harvest in order to fit a principal action.",
    "new_positions_per_run": "At most 2, and only in different lanes. Size each one within every cap on its own, and when two actions draw on the same idle token state an explicit split that does not exceed the balance.",
    "chaining": "withdraw_and_swap or harvest may be followed in the same run by one swap_and_mint or swap_and_increase that uses the output token, when every entry gate passes. RED exits never chain; their proceeds stay ETH.",
    "conflicts": "Never pair harvest with withdraw_and_swap or adjust_range on the same position; both already collect fees. swap_and_increase on a position must come before adjust_range on it. Never propose an action already shown as pending or confirming."
  },
  "costs": {
    "gas_reality": "Gas on this chain swings by more than an order of magnitude, so one action can cost $0.10 or $6. The defaults below are only a starting point; observed_calibration corrects them each run.",
    "assumed_action_cost_usd": { "swap_and_mint": 0.75, "withdraw_and_swap": 0.75, "adjust_range": 0.9, "swap_and_increase": 0.6, "harvest": 0.35 },
    "lifecycle_cost_usd": "swap_and_mint plus withdraw_and_swap, 1.50 in total at the defaults. For swap_and_increase the lifecycle cost of the added amount is its single action cost, because it shares the position's eventual exit. Every cost test uses the calibrated figure for the run, not the raw default.",
    "observed_calibration": "Spent Transaction Costs records what a position's actions actually cost. Each run, from positions with Age under 6 hours, a Spent Transaction Costs above zero, and a countable number of their own actions in Action History, compute cost divided by action count and take the highest. Use it in place of the swap_and_mint default for every cost test this run, scaling the other action types proportionally, and name the observation used. It may raise the defaults without limit and may lower them to a floor of 0.25 per action, never below. Zero costs, positions older than 6 hours and uncountable histories are not credible: ignore them and keep the defaults.",
    "calibration": "Owner-only. Review monthly against Spent Transaction Costs in the Terminal and against the saved Gas Fee Ceiling. Raise a default that single actions of that type keep exceeding; lower one only after 30 days of every such action costing less.",
    "routine_limits": {
      "adjust_range_minimum_position_age_hours": 6,
      "verification": "Use position Age and the visible Action History. If the history already shows two exits, propose no further AMBER exit this run."
    },
    "elevated_gas": "Treat gas as elevated for this run when either the Action History shows a failed action whose error mentions gas, fee ceiling or gas estimation, or the observed calibration exceeds twice the swap_and_mint default. While gas is elevated propose no entry, increase, adjust_range or harvest. RED exits still proceed; AMBER exits wait.",
    "emergency": "A RED-tier exit ignores routine limits, quarantine and cost tests. Still bound by platform permissions, gas ceiling, slippage, price impact and cool-down."
  },
  "capital": {
    "vault_tvl": "Total vault TVL from the current context. Count positions, pending fees and idle assets once.",
    "reserve_usd": "max($3, 5% of vault_tvl), kept idle in ETH as an operational buffer, not for gas. RED exits may ignore it.",
    "maximum_deployed_fraction": 0.9,
    "bands": [
      { "vault_tvl": "below $25", "max_position_fraction": 0, "max_positions": 0 },
      { "vault_tvl": "$25 to below $100", "max_position_fraction": 0.12, "max_positions": 6 },
      { "vault_tvl": "$100 to below $250", "max_position_fraction": 0.1, "max_positions": 8 },
      { "vault_tvl": "$250 or more", "max_position_fraction": 0.08, "max_positions": 12 }
    ],
    "band_note": "Bands cap position size and count and never create a daily quota. The saved Max. Value Per Strategy equals the band percentage; the platform derives its own cap of floor(100 / percent) from it, and the lower of the two applies. Only lanes.ANCHOR may exceed the band cap.",
    "entry_cap": "min(lane position cap, saved Max. Value Per Strategy, idle funds above reserve, remaining deployment capacity, exposure cap, 0.25% of pool TVL)",
    "minimum_entry": "20 x the calibrated swap_and_mint cost, which keeps a round trip at or under a tenth of the position: about $15 at the default cost, $5 when gas is cheap and $44 when it is elevated. Below the minimum: HOLD, never round up. Applies to every swap_and_mint and swap_and_increase.",
    "minimum_overrides_band": "A position may always be sized up to minimum_entry even when that exceeds the band cap, provided the lane share, exposure and deployment caps still hold. The band cap limits how large positions grow once the vault can afford them; it never blocks a position from being economically viable in the first place.",
    "funding": "New positions are funded from idle ETH or WETH. Idle stable-quote tokens worth at least minimum_entry may fund an entry into a pair that contains that same token. No other idle token may fund a new position.",
    "dust_sweep": "Rebalances and exits leave residual counter tokens that otherwise accumulate unused. An idle non-base token may fund one swap_and_increase per run into an existing IN_RANGE position whose pair contains that exact token, when the token is worth at least 3 x the calibrated swap_and_increase cost. Sweeping is cleanup, not new risk: it is exempt from minimum_entry and does not count as the run's new position, but it still respects the lane and exposure caps, the loss_firewall, and the rule that a RUNNER is never increased. Sweep the largest eligible token first; anything below the threshold stays idle.",
    "exposure": "Per counter token, sum the value of positions in pairs containing it plus idle balances of it. Stable-quote tokens follow the ANCHOR position cap. Any other token: up to 1 x band cap. No forced closures solely because a band changed."
  },
  "lanes": {
    "principle": "Every position belongs to exactly one lane, and membership follows the computed risk grade, not the pair type: safety comes from depth, stability and fee maturity rather than from accepting a low yield. ANCHOR is the floor that keeps a bad week from zeroing the vault, SATELLITE is the income engine, RUNNER is the upside bet. Name each position's lane and grade every run.",
    "share_basis": "All lane shares are measured against deployable capital, meaning vault_tvl x maximum_deployed_fraction less the reserve, not against what happens to be deployed at this moment. Measuring against current holdings would make the first position in any lane 100% of that lane by definition.",
    "bootstrap": "While vault_tvl is below $250 the share caps are suspended, because no split of that much capital can satisfy them and still meet minimum_entry. Deploy one position at a time in this order: the best grade A candidate, then the best grade B, then the RUNNER, then further grade A or B. Each must be at least minimum_entry, in a different pair, and within max_positions and the deployment cap. Say in the reason text that the vault is in bootstrap. The share caps apply in full from $250 of vault_tvl.",
    "ANCHOR": {
      "eligibility": "Grade A only, whatever the pair. A stablecoin quote is not required and confers no advantage beyond what the grade already measures.",
      "max_positions": 3,
      "position_cap": "1.5 x band cap, never below minimum_entry and never above 30% of vault_tvl.",
      "share_of_deployable": "Floor 25%, ceiling 50%. While ANCHOR is below 25% the next entry must be the best available grade A candidate. Once it reaches 25%, SATELLITE and RUNNER take priority for new capital because they are what generate return. Never open or increase ANCHOR at or above 50%.",
      "yields_when_uneconomical": "If no grade A candidate clears the ANCHOR hurdle at the size the caps allow, the ANCHOR-first rule does not block the other lanes. Say so in the reason text and proceed. A vault with no grade A candidate available has no floor that run, which is a fact to report rather than a reason to stop.",
      "hurdle": "fee_proxy over 30 days >= 1.5 x lifecycle_cost_usd",
      "range": "ranges.width",
      "harvest_destination": "Harvested ETH funds ANCHOR by swap_and_increase only while ANCHOR is below its 25% floor and the added amount meets minimum_entry. Otherwise it is available to any lane."
    },
    "SATELLITE": {
      "eligibility": "Grade A or grade B, one position per pair.",
      "max_positions": "band max_positions minus the open ANCHOR and RUNNER positions.",
      "position_cap": "band cap, never below minimum_entry",
      "max_share_of_deployable": "55%",
      "hurdle": "fee_proxy over 7 days >= 2 x lifecycle_cost_usd",
      "range": "ranges.width"
    },
    "RUNNER": {
      "eligibility": "Any grade, including C. Krystal's Hot Pools list is not in the context, so the hot pool for this run is the candidate with the highest fees24h divided by pool TVL that also passes the gates below. If none passes, the slot stays empty.",
      "max_positions": 1,
      "position_cap": "min(15% of vault_tvl, band cap), never below minimum_entry",
      "max_share_of_deployable": "20%",
      "gates": "Every ordinary entry gate, plus acceleration = 24 x fees1h / fees24h >= 1.0 and 24 x volume1h / volume24h >= 1.0. Acceleration below 1.0 means the day's fees were earned earlier and the pool is already cooling, which is the signature of arriving after the move: it is the single most important rejection in this lane. Persistence = 7 x fees24h / fees7d must be at least 0.5. High persistence is allowed and is often the point, because a pool whose weekly fees mostly arrived today may be igniting rather than dying; reject it only when acceleration >= 2.5 while persistence < 1.0, which is an hour-long spike with no day behind it.",
      "hurdle": "fee_proxy over 7 days >= 2 x lifecycle_cost_usd",
      "range": "ranges.width",
      "frequency": "No RUNNER entry while a RUNNER position exists, or while a RUNNER entry appears in the visible Action History.",
      "never_increase": "A RUNNER position is never increased. Let it run, or exit it.",
      "tighter_exit": "A RUNNER becomes AMBER when 7 x fees24h / fees7d < 0.5, or its Main Token 24h Price Change is at or below -20%, or its Age reaches 7 days. Its proceeds are ETH and may fund ANCHOR in the same run."
    }
  },
  "pairs": {
    "key": "ETH or WETH as base plus the exact counter-token address, regardless of pool address, protocol, fee tier, range or display order. Native ETH and wrapped WETH are the same asset and both normalise to BASE. So ETH/USDG on uniswapv4, WETH/USDG on uniswapv3 and USDG/ETH at any fee tier are all ONE pair key, not three: a different protocol key or fee tier is still the same economic exposure. Two positions may never share a pair key in any lane, including ANCHOR.",
    "block_entry": "The pair key is already active, pending, adjusting, partly closed or unresolved, or projected exposure is above the lane and exposure caps. Before proposing any swap_and_mint, build the pair key of every open position and confirm the candidate does not match one.",
    "reentry": "Do not re-enter a pair that was exited in the visible Action History.",
    "legacy": "Duplicate positions in one volatile pair receive no new capital. Exit at most one duplicate per run, the one with the lower ROI, and only when its fee proxy over its horizon is below 2 x lifecycle_cost_usd. Proceeds stay ETH."
  },
  "entry": {
    "gates": [
      "Pool contains ETH or WETH on chain id 4663 with full token and pool identities present.",
      "Pool TVL >= $10,000. 1h, 24h and 7d fees and volume all > 0. Absolute 24h Drawdown <= 20%. Price Volatility <= 60%.",
      "Volatile pairs: Main Token 24h Price Change between -15% and +40%, and 6h not below -10%. These windows are absent for a token younger than the window, and absent is never 0%: a pool missing its 6h or 24h Main Token change is too young to assess and is blocked in ANCHOR and SATELLITE. RUNNER alone may take it, and only when the 1h Main Token change is present and positive, Price Volatility and 24h Drawdown are both present and pass, and acceleration is at least 1.0.",
      "Stable-quote pairs: the stable token's 24h Price Change within +/-1%; otherwise treat it as depegged and do not enter.",
      "Lane cap, exposure, sizing, reserve, minimum_entry and the lane hurdle all pass. Keeping size <= 0.25% of pool TVL is what keeps the swap inside the saved slippage and the platform's price-impact limit.",
      "Symbols, APR and Fee Tier never establish token safety; no security feed exists. Position size is the safety control."
    ],
    "fee_proxy": "position USD x min(feesNd / pool TVL, N x fees24h / pool TVL) over the lane's horizon of N days: 30 with the 30d figures for ANCHOR, 7 with the 7d figures for SATELLITE and RUNNER. A pool-average proxy, not actual LP fees; a concentrated position usually earns more.",
    "hurdle_common": "In every lane the fee_proxy minus lifecycle_cost_usd must also exceed 0.5% of position value. The hurdle excludes unquantified token and divergence losses and is not a total-profit proof.",
    "selection": {
      "principle": "Pair choice dominates every other decision, so it is scored rather than preferred. Rank on fee income per unit of range risk. APR only nominates; it never decides.",
      "metrics": {
        "fee_density_24h": "fees24h / pool TVL, expressed as a percent per day. This is the income term.",
        "risk": "max(Price Volatility, absolute 24h Drawdown), as a percent. This is the risk term: how far price is liable to travel against the range.",
        "efficiency": "fee_density_24h divided by risk. The ranking score, meaning income earned per unit of range risk.",
        "history_7d": "fees7d / fees24h. A value near 1.0 means the pool has no activity older than 24 hours, because the platform reports cumulative figures for windows longer than the pool's life. Above about 1.3 the pool has real activity beyond a day.",
        "history_30d": "fees30d / fees7d. Near 1.0 means nothing older than 7 days. Above about 1.15 the pool has activity beyond a week. Do not read either ratio as an age in days: this chain's volume is growing fast, so recent days dominate every longer window.",
        "persistence": "7 x fees24h / fees7d, and only meaningful when history_7d >= 1.3. 1.0 means today is typical of the week, below 0.5 means the pool is decaying, above 2.5 means today is a spike. A pool younger than a week returns 7.0 here by construction, which is an artefact and not evidence of anything: when history_7d is below 1.3, ignore persistence entirely and judge the pool on acceleration.",
        "acceleration": "24 x fees1h / fees24h. Above 1 means the last hour is running hotter than the day.",
        "turnover": "volume24h / pool TVL."
      },
      "risk_grade": {
        "purpose": "Rank candidates from lower to higher risk using only figures the platform supplies, so the safety allocation is chosen by measurement instead of by defaulting to a stablecoin pair.",
        "inputs": "pool TVL for depth and exit capacity; Price Volatility and 24h Drawdown for stability; and the presence and consistency of 30d and 7d fee data for maturity, since a pool reporting 30d fees has at least a month of history while one reporting only 24h figures does not.",
        "A": "pool TVL >= $1,000,000, Price Volatility <= 25%, absolute 24h Drawdown <= 10%, and history_30d >= 1.15 so the pool has fee history older than a week.",
        "B": "pool TVL >= $100,000, Price Volatility <= 40%, absolute 24h Drawdown <= 20%, history_7d >= 1.3 so the pool has fee history older than a day, and where persistence is meaningful it is between 0.5 and 2.5.",
        "C": "pool TVL >= $25,000, Price Volatility <= 60%, absolute 24h Drawdown <= 20%. Grade C may only ever be held in the single capped RUNNER slot. The candidate list's own floor sits well above $25,000, so an absent grade C candidate is normal and not a problem to solve.",
        "ungraded": "Anything failing grade C is never entered in any lane.",
        "limits": "Grade measures depth, stability and maturity only. It does not measure the chance a token rugs or its liquidity is pulled, which no available field measures. A pair containing a stablecoin still needs its depeg check, and a grade A pool can still trigger a RED exit."
      },
      "rank_by": "Within a lane, rank by highest efficiency, then higher persistence, then higher pool TVL. For ANCHOR, rank grade A candidates by pool TVL first, then efficiency, because that lane is bought for survivability.",
      "reject": [
        "persistence < 0.5 while history_7d >= 1.3: fee generation is decaying and the 24h figure overstates what the position will earn.",
        "persistence > 2.5 while history_7d >= 1.3, unless the RUNNER momentum gates also pass: one hot day is not a trend.",
        "history_7d < 1.3 for any lane other than RUNNER: the pool has no track record beyond a day, so only the one capped RUNNER slot may hold it.",
        "turnover < 0.1: the pool is barely trading, so its fee figures are noise.",
        "fees24h differs from volume24h x Fee Tier by more than a factor of two: the fee and volume data disagree, so treat the pool as DATA_UNAVAILABLE rather than guessing which figure is right.",
        "Price Volatility or 24h Drawdown missing: efficiency cannot be computed, so the pool is DATA_UNAVAILABLE."
      ],
      "lane_assignment": "Assign each qualifying pool by its risk grade: grade A may serve ANCHOR or SATELLITE, grade B only SATELLITE, grade C only RUNNER. The RUNNER slot takes the single highest fee_density_24h candidate that passes its momentum gates, of any grade. When a pool could serve two lanes, place it in the lane furthest below its share.",
      "limits_of_the_score": "Efficiency measures range risk only. Nothing available measures the chance a token collapses or its liquidity is pulled, so position size, the lane shares and the RED exits are the only controls there. A high score never justifies exceeding a cap."
    }
  },
  "ranges": {
    "policy": "Width is the main cost driver, because every re-centering is a paid action. Target about 3x Price Volatility and never go narrower than the saved Min. Range. A wide range earns a lower fee rate per dollar, and that trade is worth taking here: staying in range avoids both the rebalance cost and the divergence loss of being pushed fully into the falling token. Positions run at roughly 1x volatility supplied every observed loss.",
    "width": "Symmetric width >= max(20%, 3 x Price Volatility), and never above 150%. One rule for every lane and pair type: a pool at 5% volatility gets 20%, one at 25% gets 75%, one at 40% gets 120%.",
    "centering": "Center on the current pool price. If the Main Token's 6h and 24h Price Changes share a sign, shift the range one quarter of its width in that direction."
  },
  "management": {
    "loss_firewall": "Use the position's ROI from the context. ROI <= -20%: no adjust_range that re-centers below the current range center, no swap_and_increase, harvest only, and evaluate the exit rules; an OUT_RANGE position in this state follows the exit rules instead of being re-centered into the falling token. Never label a position a loser from LP Value alone; ROI as the platform computes it already reflects price change and fees. If ROI is missing, adjust_range and swap_and_increase for that position are DATA_UNAVAILABLE.",
    "adjust_range": "Only when Status is OUT_RANGE, Age >= 6h, loss_firewall passes, the pool still passes every entry gate, and the re-centered position's fee_proxy over the lane horizon >= 2 x the adjust_range cost. Use the ranges policy. adjust_range already collects and reinvests fees; do not harvest first. Afterwards the old position must be gone from the position list; if both old and new appear, treat it as Partial Success and reconcile before anything else.",
    "swap_and_increase": "Only into an IN_RANGE position with ROI >= 0 whose Current Pool Price sits in the middle half of its Price Range, meaning between lower + 0.25 x (upper - lower) and upper - 0.25 x (upper - lower). Funded from idle ETH above the reserve. The added amount must meet minimum_entry, must pass every entry gate and the hurdle computed on the added amount with the swap_and_increase cost in place of lifecycle_cost_usd, and must leave the resulting position within every cap. Never increase a RUNNER.",
    "not_exit_reason_alone": "Negative PnL, a lower APR than another pool, a better candidate, a single OUT_RANGE reading, or missing historical data."
  },
  "exit": {
    "risk_tiers": {
      "purpose": "Classify every open position each run so that dangerous positions leave regardless of gas while merely weak positions wait for an economical exit.",
      "RED": [
        "A stable-quote token's 24h Price Change beyond +/-1% (depeg).",
        "Main Token 24h Price Change <= -35%, or 6h <= -25% (crash).",
        "Pool TVL below $5,000 (liquidity collapse).",
        "ROI <= -40% while Main Token 24h Price Change <= -15% (deep loss still falling).",
        "Any exploit, integrity-failure or withdrawal-restriction evidence in the context, for example repeated failed withdrawals on one pool or a pool that no longer returns liquidity."
      ],
      "AMBER": [
        "OUT_RANGE with Age >= 6h and adjust_range not justified: the pool fails a gate or recovery is below 2 x the adjust_range cost.",
        "Fee decay: 7 x fees24h / fees7d < 0.25, or pool TVL < $10,000.",
        "ROI <= -25% while Main Token 24h Price Change <= -15%.",
        "Price Volatility > 80% or 24h Drawdown worse than -30%.",
        "A RUNNER meeting lanes.RUNNER.tighter_exit.",
        "Legacy duplicate selected for cleanup."
      ],
      "GREEN": "Every other position. Stay; harvest or adjust_range only under their own rules.",
      "precedence": "RED over AMBER over GREEN. Missing data never raises a tier."
    },
    "RED_execution": "Exit this run with withdraw_and_swap 100% to ETH regardless of gas signals, cost tests, routine limits and quarantine. Only platform permissions, gas ceiling, slippage, price impact and cool-down bind. If the exit fails on price impact or slippage, propose it again next run with a smaller liquidity percentage. If it fails on gas estimation or the gas ceiling, propose it again unchanged every run, because a smaller amount does not lower gas, and report EMERGENCY_EXIT_BLOCKED naming the ceiling as the blocker with the position, the evidence and the failure text, so the owner can raise the ceiling temporarily or exit manually. While a RED exit is blocked, propose no entry, increase or adjustment. RED exits never chain into an entry; proceeds stay ETH.",
    "AMBER_execution": "Exit with withdraw_and_swap 100% to ETH only when all of these hold: no elevated-gas signal this run; LP Value >= 20 x the withdraw_and_swap cost; and either the Main Token 24h Price Change is at or below -10%, meaning value is still leaving, or the proceeds can be redeployed this run into a candidate that clears its lane hurdle. Otherwise the position stays, is reported as AMBER with the blocking condition, and is re-evaluated next run. At most 2 AMBER exits per 24h as visible in Action History.",
    "GREEN_execution": "No exit. Harvest and adjust_range under their own rules only.",
    "after_exit": "Proceeds stay ETH unless an AMBER exit is chained into an entry that passes every gate in the same run. ANCHOR has first claim on such proceeds only while it is below its 25% floor."
  },
  "failure_policy": {
    "failed": "A failed action is never retried unchanged. Retry only with a changed amount, pool, range or liquidity percentage, and never more than three attempts of one kind on one pool while it remains visible in Action History.",
    "partial": "After a Partial Success, reconcile first: confirm from the position list and balances which steps landed. Propose no new position until the next run.",
    "pending_unknown": "Never duplicate an action shown as pending or confirming.",
    "verify": "At the start of every run compare Action History with the position list and balances. A SUCCESS whose position or proceeds are missing, or a FAILED whose position exists, is a mismatch: reconcile it and propose no new position this run. Treat unknown outcomes as not done. A missing performance history never freezes verified position actions."
  },
  "harvest": {
    "execution": "harvest collects Pending Fees to the vault in the saved Default Asset, ETH, without removing principal. Never harvest a position that is adjusted or withdrawn in the same run.",
    "economics": "Pending Fees >= max($5, 10 x the calibrated harvest cost) and >= 5% of LP Value. Net receipts after the platform's 10% reward fee must exceed the harvest cost. No fixed schedule.",
    "funds": "Harvested ETH follows reserve and entry rules. It funds ANCHOR only while ANCHOR is below its 25% floor; otherwise it may fund any lane's entry that passes every gate, and otherwise it stays idle until it reaches minimum_entry.",
    "report": "State position, lane, claimed token and amount, USD value and the cost figure used. Harvest income is not cash-flow-adjusted total return."
  },
  "reporting": "Every action scenario and every HOLD reason must cite the numbers used: vault TVL, lane, lane cap, entry size, pool TVL, the fee_proxy and its horizon, lifecycle_cost_usd and the gate that passed or failed. State each open position's lane and tier, RED, AMBER or GREEN, with its deciding metric. Never invent history, relax a rule, or promise automated reports.",
  "priority": "RED exit, reconcile failed or partial actions, AMBER exit or cleanup, adjust_range, harvest, ANCHOR entry while ANCHOR is below its 25% floor, RUNNER entry, SATELLITE entry, ANCHOR entry up to its 50% ceiling, HOLD."
}
