{"service_id":"range-doctor","name":"Range Doctor","category":"rebalancing","category_job":"Keep LP earning","what_you_get":"A read-only diagnosis of the PancakeSwap v3 liquidity positions a BSC wallet holds or has staked: for each one, whether the current tick sits inside its range and where in that range it sits, the pool's gross and protocol-adjusted net 24h fee rates when its reported figures clear a plausibility gate, and conditional wait and recenter paths. Name one token id and declare its USD value and estimated recenter cost to add fixed-notional dollar effects and cost-only break-even; those two inputs are labelled as the caller's rather than derived from an unverified price feed. Every finding carries the numbers it was computed from, so you can check it against the chain yourself. Nothing is signed, approved, or moved.","price_display":"0.50 USDT","price_atomic":500000000000000000,"asset":"0x55d398326f99059fF775485246999027B3197955","paid_stock":false,"stock_status":"candidate","admission":{"fresh_paired_benchmark":false,"cold_canary":false,"decision_grade_presenter":true,"true_settlement":false},"typical_seconds":30,"activation":"one_shot","activation_means":"Runs once when you activate it and hands back a result.","evidence_modality":"live_read","metrics":[{"name":"Position NFTs read","unit":"position NFTs the wallet held","window":"one recorded run against one wallet","observed_at":"2026-08-08","method":"advantage task 01, agent arm: positions_examined against positions_held, both carried in the result the hire returned","value":null,"numerator":14,"denominator":14,"display":"14 of 14 position NFTs the wallet held"},{"name":"Positions counted but not detailed","unit":"position NFTs read","window":"the same recorded run","observed_at":"2026-08-08","method":"advantage task 01, agent arm: closed_skipped against positions_examined. Closed positions are counted and no detail is returned for them, and there is no way to ask for it","value":null,"numerator":13,"denominator":14,"display":"13 of 14 position NFTs read"},{"name":"Elapsed","unit":"seconds","window":"one recorded run, a single observation and not a mean","observed_at":"2026-08-08","method":"advantage task 01, agent arm; the same question answered by hand in the manual arm took 528.31 seconds","value":43.063,"numerator":null,"denominator":null,"display":"43.063 seconds"}],"agent_id":"56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:311253","identity":"Bound to the BSC ERC-8004 agent 56:0x8004a169fb4a3325136eb29fa0ceb6d2e539a432:311253. This registration is not an endorsement, evidence of paid stock, or evidence that the service produced a result.","hire_method":"POST","hire_path":"/hire/range-doctor","registration_uri":"https://docket.gudman.xyz/registrations/range-doctor.json","input_schema":{"wallet":{"type":"string","required":true,"default":"0xe55816904796341bf8535e25f6c8b647927fc946","example_note":"Docket's own controlled position — replace with your address","description":"the 0x-prefixed BSC address whose v3 positions to read"},"limit":{"type":"integer","required":false,"description":"how many open positions to return. It bounds the answer, not the reading: closed positions no longer consume it, so a wallet whose older positions are all closed still gets its open ones back. Up to 30 position NFTs are read in one call whatever this is set to; the response carries positions_held, positions_examined, closed_skipped and scan_complete, so a bounded read always says what it did not reach"},"token_id":{"type":"integer","required":false,"default":7141050,"description":"one exact PancakeSwap v3 position NFT to diagnose. The wallet is still enumerated for coverage, the selected NFT is returned even when closed, and this cannot be combined with limit"},"declared_position_value_usd":{"type":"number","required":false,"default":50.55,"description":"the positive caller-declared USD value of the exact token_id, used for fixed-notional dollar effects. Requires token_id; it is not derived from a token price feed"},"estimated_recenter_cost_usd":{"type":"number","required":false,"default":1.0,"description":"the caller-declared non-negative USD cost of recentering the exact token_id, including every gas, swap fee and price-impact component the caller wants counted. Requires token_id and is not derived by Docket"},"observation_block":{"type":"integer","required":false,"advanced":true,"description":"read the position and its pool at this BSC block instead of the latest one. Both are read at the same block either way, so a diagnosis never compares a position from one moment against a price from another. Give it when the answer has to be reproducible — two readers at different times get the same result only if they name the same block. Public dataseeds prune, so an older block may return a stated read failure naming an archive node as the remedy rather than an empty result"},"position_manager":{"type":"string","required":false,"advanced":true,"description":"the PancakeSwap v3 NPM address; required with frozen source snapshots"},"decision_horizon_days":{"type":"integer","required":false,"default":30,"description":"the positive horizon for the cost-only break-even comparison"},"pool_snapshot":{"type":"object","required":false,"advanced":true,"description":"exact top-pools HTTP response bytes as base64 with URL, observation time and bare SHA-256; supplied with token_list_snapshot and source_refs"},"token_list_snapshot":{"type":"object","required":false,"advanced":true,"description":"exact token-list HTTP response bytes as base64 with URL, observation time and bare SHA-256; supplied with pool_snapshot and source_refs"},"source_refs":{"type":"array","items":{"type":"object"},"required":false,"advanced":true,"description":"the frozen typed source references bound to this position"}},"limitations":"PancakeSwap v3 on BSC only, and read-only: nothing is signed, approved or moved. It reads ticks rather than prices, and a position's uncollected fees come from tokensOwed, which is stale until something touches the position — so that figure can read low. One hire reads a bounded slice of a wallet's positions, newest first, and returns positions_held beside positions_examined so a truncated read announces itself. Closed positions are counted and not detailed. Every next step it states is conditional on a belief it names, and acting on any of them is the reader's decision.","evidence":[{"kind":"advantage_task","url":"/advantage#01-liquidity","label":"Task 01 — the same wallet read by hiring and by hand, both outputs in full with the hashes that bind them"}],"agent_path":null,"identity_note":"The snapshot Docket serves does not hold this agent, so there is no /agents record to open for it here. Docket's default sweep covers the agents carrying at least one feedback record, which is a small slice of the registry — an identity outside that slice is registered on chain and is simply not in what Docket indexed."}