# Unrugable / tasern.quest: a digital provisioning engagement

> Complete, machine-readable edition. Everything in the four human pages is in this one file.
> Human version: https://vealth.net/tasern-hub.html
> Observed 2026-07-27. Base mainnet, chain 8453. Independent, unsolicited, passive recon only.

**Scope and method.** 101 pages fetched GET/HEAD at roughly one request per second. All six
discovery files read. The published npm package was downloaded and read, never installed and
never executed. Read-only JSON-RPC against Base mainnet: `eth_call`, `eth_getCode`,
`eth_getStorageAt`, `eth_estimateGas`. **No transaction was ever sent, no key was ever used**,
no login, no form submitted, nothing probed, fuzzed, scanned or exploited. Where a claim could
be tested by calling a function as its own owner in a read-only call, we did that rather than
reason from bytecode alone.

**Relationship.** Warm, and unusual for this kind of review: EcoWealth is already an integrator
on this network. We fire these reactors from `scripts/provisioning/reactor-fire.ts` and MfT sits
in our pool registry. Peer to peer, not vendor to prospect.

**Not tested, deliberately.** We did not check whether the Supabase analytics table is
insert-only, because issuing a `SELECT` would mean reading data we were not invited to read.
Flagged below for the owner to check. If misconfigured it would be the most serious item here.

---

## 1. The bottom line, in plain English

1. **You proved something most projects only claim, and you get no credit for it.** We tried hard
   to break your liquidity lock and could not. Publishing that proof plainly is the cheapest trust
   you will ever buy, and trust is the only thing between you and a deposit.
2. **One function call turns your carbon story from your biggest liability into a verifiable fact.**
   The way you burn CHAR today permanently prevents the retirement you are aiming at. The correct
   tool already exists in the contract you are already using.
3. **Half the doors you advertise to AI agents are locked.** An agent that hits a dead endpoint does
   not file a bug. It concludes you are abandoned and never returns.
4. **Your privacy page contradicts itself**, and that is the first thing a skeptic checks. About a
   minute to disprove with a browser open.
5. **Two of your tokens answer to the same ticker.** Anyone buying the wrong one expecting a dollar
   floor gets a volatile coin instead.

---

## 2. Verified TRUE (lead with these, they are the asset)

### 2.1 Liquidity genuinely cannot be pulled

```
ReactorPrimeV3   7 pools -> all 7 held by THE REACTOR ITSELF
ReactorHub       5 pools -> all 5 held by THE REACTOR ITSELF
v1Prime         13 pools -> 12 held by THE REACTOR ITSELF (1 unresolved)
V7 launch        2 pools -> both held by THE REACTOR ITSELF
------------------------------------------------------------
26 of 27 positions held by contracts. ZERO held by any EOA.

Reactor bytecode:
  ERC721 safeTransferFrom (0x42842e0e, 0xb88d4fde) : ABSENT
  decreaseLiquidity       (0x0c49ccbe)             : ABSENT
  collect                 (0xfc6f7865)             : present (fees only)
```

Reverify: decode each reactor's `pools(i)` struct for `tokenId`, then `ownerOf(tokenId)` on the
Uniswap V3 position manager `0x03a520b32c04bf3beef7beb72e919cf822ed34f1`.

**"Liquidity is locked by the absence of code" survives a hostile audit.** Admins can pause and
deregister, but cannot extract. One position (`5045173`) would not resolve and is marked unresolved
rather than assumed.

### 2.2 Tokens at the burn address really can never move

Burn address `0xfd780B0aE569e15e514B819ecFDF46f804953a4B` is an EIP-1167 minimal proxy:

```
0x363d3d373d3d3d363d73 9f36ee33fd56c7d9a78facd3249c580b1ca464a2 5af43d82803e903d91602b57fd5bf3
```

Implementation `0x9f36ee33…` is BaseScan-verified as `ERC1155SeaDropCloneable` (OpenSea SeaDrop,
17,857 bytes). It contains a `DELEGATECALL` whose target is read from storage slot 9, resolving to
the SeaDrop configurer `0x864baa13e01d8f9e26549dc91b458cd15e34eb7c` (24,200 bytes). Because that
runs in the burn address's own context, we audited it too.

```
Neither contract contains ANY ERC-20 selector across ~42,000 bytes:
  0xa9059cbb transfer      ABSENT
  0x23b872dd transferFrom  ABSENT
  0x095ea7b3 approve       ABSENT
  0xd505accf permit        ABSENT
  0xb61d27f6 execute       ABSENT
  0xac9650d8 multicall     ABSENT
No SELFDESTRUCT. No CREATE/CREATE2. No upgrade path.

Confirmed live, calling AS THE CONTRACT'S OWN OWNER:
  transfer(a,u)      -> revert 0x67fe1ffb UnsupportedFunctionSelector(bytes4)
  approve(a,u)       -> revert 0x67fe1ffb
  execute(a,u,bytes) -> revert 0x67fe1ffb
  withdraw()         -> revert 0x67fe1ffb
  multicall(bytes[]) -> revert 0x67fe1ffb
```

**Proven two independent ways.** Publish this.

### 2.3 The vault owner provably cannot touch deposits

```
Called AS OWNER against both CommunityLPVaultV4 vaults:
  rescue(address)      -> revert (no such function)
  pause()              -> revert (no such function)
  upgradeTo(address)   -> revert (no such function)
  emergencyWithdraw()  -> revert (no such function)
  setFee(uint256)      -> revert (no such function)

Only power, and it is capped:
  setMaxImpact(600)  from OWNER -> OK
  setMaxImpact(9999) from OWNER -> revert   (MAX_IMPACT_CAP = 1500 bps)

Withdrawal is permissionless, identical for owner and stranger:
  withdraw(1) from RANDOM -> "bad shares"
  withdraw(1) from OWNER  -> "bad shares"
```

**"Self-custodied, withdraw anytime" is structurally true.** An earlier pass of our own review
flagged this owner key as a risk to deposits; deeper testing disproved it and we corrected the
finding rather than leave the scarier version standing.

---

## 3. Provably FALSE as of 2026-07-27

### 3.1 The privacy policy denies the tracker that loads on the privacy page

```
privacy.html states:
  "No analytics: ... There are no analytics scripts on the site."
  "No tracking."   "No cookies."   "No personal information."

privacy.html line 165:
  <script src="/track.js" defer></script>

track.js line 5, its own header:
  "Records: pageviews, wallet connections, and custom events into Supabase"

Payload: wallet address + persistent localStorage id (mft_vid) + session id
         + referrer + user agent + path  ->  Supabase REST endpoint
Wallet read silently, no prompt, at 0s / 3s / 12s and on accountsChanged:
  window.ethereum.request({ method: 'eth_accounts' })

Loaded on 16 of 16 pages retrieved, including terms.html and risk.html.
```

Read charitably: the script's own header says "No cookies. Anonymous visitor id in localStorage,"
which reads like a genuine belief that avoiding cookies means avoiding tracking. Honest mistake,
still needs fixing today, because it is trivially checkable and sits under a footer reading
"by code, not by trust."

**Smallest honest fix:** delete the `wallet` field and the `eth_accounts` polling. That is the only
genuinely sensitive part; pageview data survives; the policy becomes nearly true as written.

### 3.2 "5 reactors fully renounced" is inverted

```
From the project's OWN reactor-map.json:
  TOTAL reactors checked : 37
  RENOUNCED (admin == 0) :  1  -> SporeReactorV4Impl 0x891587AD...
  NOT renounced          : 36

The one zero-admin address is the IMPLEMENTATION TEMPLATE:
  initialized() = false, holds no pools, holds no funds.
  Clones get their own storage, so its zero admin means nothing.

One plain EOA 0xe2a4a8b9d77080c57799a94ba8edeb2dd6e0ac10 controls:
  ReactorPrimeV3 + ReactorHub + v1Prime + the V7 Factory

Proven callable, live:
  Hub.setPaused(true) from ADMIN  -> allowed
  Hub.removePool(0)   from ADMIN  -> allowed
  Hub.setPaused(true) from RANDOM -> rejected
  Factory.rescue(MfT)              from OWNER -> allowed
  Factory.transferReactorAdmin(..) from OWNER -> allowed
```

Precise about the limit: that key **cannot take the liquidity** (see 2.1). The power is to stop the
machine, not to take from it. But a token launched on a promise of permanence can have its burns
switched off by a key that is not the launcher's, and that is not "immutable, no admin."

### 3.3 The CHAR burn permanently forecloses its own mission

CHAR is not your contract. It is **Toucan Protocol's official Biochar Carbon Pool**, backed by
Puro.earth CORCs, which are issued per **tonne**. So `llms.txt` understates your own asset by 2,204x,
and the impact pages happen to have the unit right.

```
CHAR already exposes a REAL retirement path, unused:
  retireFrom(address,uint256)     0x6b24ffd6
  redeemAndBurn(address,uint256)  0x89022e2e
  -> these produce an actual Toucan and Puro retirement record

What the network does instead:
  char.transfer(BURN_ADDRESS, amount)

  CHAR at the burn address :  0.004920  =  4.92 kg CO2e
  CHAR at 0x...dEaD        :  0.021787  = 21.79 kg CO2e
  CHAR total supply        :  170.28 tokens
```

By the proof in 2.2, tokens at that address can never move again. **Which means the underlying
carbon credit can never be retired by anyone, ever.** The mechanism does not merely fail to reach
the mission, it permanently closes the door on it. Total climate impact locked away this way:
roughly 27 kilograms.

**The fix, and it is a good one:**

```js
// today: the credit is stranded forever
char.transfer(BURN_ADDRESS, amount);

// instead: a real registry retirement
char.retireFrom(beneficiary, amount);   // 0x6b24ffd6
//   -> a Toucan and Puro retirement record
//   -> a certificate you can link from carbon.html
//   -> "permanently retires real offsets" becomes a FACT
```

EcoWealth runs these live against Toucan and Puro and will walk you through the call, the
beneficiary field and the certificate surface, at no cost and with no strings.

### 3.4 Two tokens share the ticker MfT

| Address | Name | Symbol | Decimals | Redeemable |
|---|---|---|---|---|
| `0x8FB87d13B40B1A67B22ED1a17e2835fe7e3a9bA3` | MemeForTrees | `MfT` | 18 | No. Volatile, no floor |
| `0xe3dd3881477c20C17Df080cEec0C1bD0C065A072` | Money for Trees | `MfT` | 6 | Yes. Aave-backed, redeem to USDC |

Same ticker, opposite risk, decimals gap of 10^12. Anything keying on symbol conflates them.

**This caught us.** Our own internal notes once recorded MemeForTrees as the USDC-redeemable one,
and we scoped a strategy on that false premise before catching it. We had to write a naming
correction into our own canon to stop it recurring. We read contracts for a living.

### 3.5 MfT carries a 2% mint capability that has never been armed (CORRECTED 2026-07-30)

```
MfT is BaseScan-verified as DERC20.

  yearlyMintRate()    = 2e16  = 2% per year
  updateMintRate(x)   -> owner-only, exists
  mintInflation()     -> present in bytecode
  renounceOwnership() -> never called

  BUT the inflation clock has never been started:
    currentYearStart()  = 0
    lastMintTimestamp() = 0
    isPoolUnlocked()    = false
    totalSupply()       = 100,000,000,000 exactly, never moved

  owner() = 0x660eaaedebc968f8f3694354fa8ec0b4c5ba8d12
            -> eth_getCode returns 11,416 bytes: a CONTRACT, not an EOA

  totalSupply has ever moved by: 0.000015 MfT
    (reactors SEND to an address; they never call burn())

  Moved aside so far: 32,320,143.92 of 100,000,000,000 = 0.0323%
```

The 2026-07-27 edition of this file said "the contract mints" and called the net direction
inflationary. That was overstated and the project owner was right to push back. The capability is
real and owner-adjustable, but nothing can mint until `unlockPool()` starts the clock, and it never
has. The omission that mattered more: we flagged an unrenounced owner without saying the owner is a
launch contract rather than the founder's wallet, which is what made the flag read as an accusation.

Reverify: `eth_call` `yearlyMintRate()` `0x20720df7`, `currentYearStart()` `0x13cff13d`,
`lastMintTimestamp()` `0x8e80ff5d`, `isPoolUnlocked()` `0x10aa0ebb`, `owner()` `0x8da5cb5b`,
`totalSupply()` `0x18160ddd` on `0x8FB87d13B40B1A67B22ED1a17e2835fe7e3a9bA3`, then `eth_getCode`
on the returned owner.

### 3.6 "Everything here plants real trees" sits above a dashboard reading zero

```
Homepage og:description, rendered in every social share:
  "Everything here plants real trees. Opting out isn't really an option."

carbon.html, your own dashboard:
  "Trees Planted - Coming Soon - Tracking integration in progress
   0     Target: 10,000"

money-for-trees.html:  "Trees Funded (Actual):  [empty]"

/memefortrees states BOTH:
  "Every $20 deposited funds ~1 tree per year"
  "Every $10 deposited funds roughly 1 tree per year"
```

No planting receipt anywhere: no transfer to a named charity, no dollar figure delivered, no date,
no third-party acknowledgment. There is a real difference between "our design routes yield toward
tree planting," a claim about code that is verifiable, and "we plant real trees," a claim about
outcomes that needs receipts.

---

## 4. Where agents fall off

### 4.1 Half the advertised doors are locked

| Endpoint | Advertised in | Result |
|---|---|---|
| `/api/unrugable/tokenomics` | llms, robots, openapi | 200, but a stub, not the documented breakdown |
| `/api/unrugable/all` | llms, openapi | Works |
| `/api/unrugable/metadata/{addr}` | llms, openapi | Works |
| `/api/unrugable/image/{addr}` | llms, openapi | Works |
| `/api/unrugable/factory` | llms, openapi | Works |
| `/api/unrugable/reactor/{addr}` | openapi | **200 and always wrong** |
| `/api/unrugable/signals` | robots.txt `Allow` | **404** |
| `/api/unrugable/performance` | robots.txt `Allow` | **404** |
| `/api/unrugable/gallery` | llms.txt | **404** |
| `/api/baseling/agent/` | agents.html | **404** |
| `.../economy/rules` | llms.txt | Works |
| `.../economy/phase` | llms.txt | **404**, missing `/:wallet` |
| `.../economy/feeding` | llms.txt | **404**, missing `/:job` |
| `/agents-onboarding.html` | robots.txt | **404** |

Also 404 and listed in your own `sitemap.xml`: `/agents/` and `/reactor-explainer.html`.

The `reactor/{address}` case costs most: every reactor you publish yourself is reported
`isReactor: false`, so an agent doing diligence concludes the network is empty and leaves. A
confident wrong answer is worse than an error, because it gives you no signal that anything broke.

Two are a five minute fix. Corrected forms confirmed returning 200:

```
/api/baseling/agent/economy/phase/{wallet}   -> 200
/api/baseling/agent/economy/feeding/{job}    -> 200
```

Free upside: your Baseling router declares 20 routes and `llms.txt` advertises 17. There is an
`/agent/guide` returning several kilobytes of usable orientation that nothing points at.

### 4.2 The published gas numbers make agents pay for failures

| Reactor | Measured `estimateGas` | vs published 4,000,000 | vs package 300,000 |
|---|---|---|---|
| V1-Prime | 4,881,379 | exceeds | exceeds |
| PrimeV3 | 3,046,478 | fits | exceeds |
| HUB | 2,445,142 | fits | exceeds |

`agents.json` advertises 4,000,000 and the shipped npm package hardcodes 300,000, a 13x
disagreement, and measured against the chain both are too low for at least one reactor they name.
Cost is understated too: at 0.006 gwei with ETH at $1,938, a fire costs $0.028 to $0.057, not $0.01.

```js
// delete both hardcoded numbers
const est = await provider.estimateGas({ to: reactor, data: '0x61461954' });
const tx  = await reactor.execute({ gasLimit: est * 125n / 100n });
```

### 4.3 The firing pitch has no payoff for the agent doing the firing

We can speak to this from the inside, because we are exactly the customer it was written for. We
built the lane `llms.txt` describes, firing eight of these reactors on a two hour schedule, and our
own gas/net audit shut it down as negative value. Our script now refuses to run:

```
SHARK_TANK_DISCOVERY_2026-07-05.md:77
  "The already-paused gas-negative lanes (mft-dca, eco-circulator,
   eco-cycle, reactor-fire) - delete, don't 'pause with re-enable
   comments.' Optionality on negative-EV loops is a cost."

reactor-fire.ts:63 guard
  "PAUSED (lean-lane audit 2026-07-04: gas-negative/no-net)"
```

Structural cause: the reactor sends 50% of collected fees **to the launcher's wallet**, and the
firer receives only the gas bill, then must win a public race for the spread its own transaction
created.

```
Total burn value, all 16 launches since May:  $93.28
  NFS                          $84.20
  MR                            $7.49
  the other 14 combined         $1.59
```

Those same numbers make "earn 50% of reactor fees forever" resolve, for a median launcher, to well
under a dollar.

**Fix:** either add a real caller reward paid out of collected fees, the standard keeper pattern and
the only thing that makes permissionless firing self-sustaining, or describe firing honestly as
network upkeep. The honest version is a legitimate ask of a holder, and holders will do it.

---

## 5. The rewrites (drop-in)

**Burn address.**
Today: "An immutable EIP-1167 minimal proxy with no ERC-20 withdrawal functions. Burn Address (no private key)."
True and stronger: "An OpenSea SeaDrop ERC-1155 whose implementation is immutable and contains no ERC-20 transfer path. Verified two ways: by bytecode, and by live call. It has an owner who controls metadata and royalties, and who can never move a token out."

**Renounce claim.**
Today: "5 reactors fully renounced (immutable, no admin)."
True and stronger: "Reactor admins can pause a reactor and deregister pools. They provably cannot withdraw liquidity or move a burned token: those functions do not exist in the bytecode. Admin keys and their exact powers are listed below."

**Vaults.**
Today: "Put idle treasury USDC to work as an LP position."
True and stronger: "A small, self-custodied vault. The owner has exactly one power, a slippage cap bounded at 15% in code, and cannot withdraw, pause, upgrade or charge a fee. Current capacity is shown live below."

**Supply.**
Today: "Deflationary, every action burns supply."
True and stronger: "Every reactor fire removes MfT from circulation. Removed to date: [live figure] of [total supply]. The token also carries a 2% annual mint rate, currently unused."

**Trees.**
Today: "Everything here plants real trees."
True today: "Everything here is built to fund tree planting. Yield routes to planting partners. First delivery receipt: pending."
Then, once a receipt exists: "We have funded N trees. Here is the transfer, the partner, and the date."

**Agent pitch.**
Today: "Fire any reactor ... costs $0.01 gas. Arb MfT price across pools after reactor fires for profit."
Honest: "Firing is permissionless upkeep. The firer pays gas, roughly three to six cents at current rates, and receives no direct reward: fees route 50% burn and 50% launcher. Fire it if you hold MfT and want the burn. Estimate gas and add a buffer, it scales with accrued fees."

---

## 6. llms.txt, corrected (diff)

```diff
 ## API Endpoints
-- Token gallery (static): https://tasern.quest/api/unrugable/gallery      # 404, delete
-- Build phase:    https://tasern.quest/api/baseling/agent/economy/phase
+- Build phase:    https://tasern.quest/api/baseling/agent/economy/phase/{wallet}
-- Feeding guide:  https://tasern.quest/api/baseling/agent/economy/feeding
+- Feeding guide:  https://tasern.quest/api/baseling/agent/economy/feeding/{job}
+- Orientation:    https://tasern.quest/api/baseling/agent/guide

 ## Agent Opportunity
-- Fire any reactor (permissionless, every 2hrs) ... costs $0.01 gas
-- Arb MfT price across pools after reactor fires for profit
-- Accumulate MfT as the network infrastructure play (deflationary)
+- Fire any reactor (permissionless, every 2hrs). Upkeep, not income: the firer
+  pays gas and receives no direct reward. Fees route 50% burn / 50% launcher.
+  Estimate gas and add 25%; it has measured 2.4M to 4.9M and scales with fees.
+- MfT carries a 2% annual mint rate, currently unused. Removed from circulation
+  to date: see the live map.

 ## Key Tokens
+- **MEME / MemeForTrees** (0x8FB87d13..., 18 dec) volatile, no floor.
+- **MONEY / Money for Trees** (0xe3dd3881..., 6 dec) USDC-backed deposit receipt.
+  NOTE: both currently report symbol "MfT" on chain. Match on ADDRESS, never symbol.

+## Risks
+Contracts are unaudited. Reactor admins can pause and deregister pools; they
+cannot withdraw liquidity. Full disclosure: https://tasern.quest/risk.html
```

Note: `risk.html` is genuinely good, better than most audited protocols write, and it is linked
zero times from `llms.txt`, `agents.json`, the vaults page or the earth page. Agents and buyers meet
the pitch without ever meeting the disclosure.

---

## 7. Agent card that matches the shipped package

`agents.html` currently documents seven tool names that do not exist in the published package, so a
copy-paste quick start fails on every call.

```jsonc
// /.well-known/agent-card.json
{
  "name": "Unrugable Network",
  "provider": { "chain": "eip155:8453" },
  "tools": [
    "fire_reactor",   // NOT reactor_fire
    "swap_token",     // NOT swap_exact_tokens
    "feed_baseling",  // NOT baseling_feed
    "get_baseling",   // NOT baseling_status
    "reactor_timing", "get_reactor_list", "mft_price",
    "liquidity_depth", "arb_signal", "portfolio_value"
  ],
  "safety": {
    "guardrails_enforced": "client-side",   // NOT server-side
    "max_per_swap_usd": 0.10,
    "max_daily_usd": 5.00,
    "note": "Limits run in the same process that holds your key. They protect against bugs, not against this package. Use a dedicated burner wallet."
  },
  "install": "npx -y baselings-mcp@1.4.0",   // pinned
  "risks": "https://tasern.quest/risk.html"
}
```

**The key handling.** Install instructions ask agents to put a raw private key in an environment
variable for an unpinned `npx` package, and `mcp.json` puts the key on the command line where it
lands in shell history and `/proc/<pid>/cmdline`. We read the v1.4.0 source and it is **clean**: the
key never leaves the process, no install scripts, one dependency, npm provenance signature present.
This is a design risk, not an accusation. But `npx` without a pin resolves `latest` every run, so a
future compromised publish reaches every agent that ever ran it. Pinning is a one-line change that
closes the tail. The real answer is ERC-4337 session keys scoped to the reactor selector with an
on-chain daily cap, which would make the "$5/day" claim true rather than aspirational.

---

## 8. Housekeeping

- **43 pages load `ethers` from a CDN with no `integrity` attribute**, including the pages that move
  money, and the homepage imports the Farcaster SDK from esm.sh with no version pin at all. You
  already do SRI correctly on one page, so this is an inconsistency to close, not a technique to learn.
- **The contracts holding the money are the ones nobody can read.** Both vaults and the whole reactor
  stack are unverified on BaseScan; MfT, the burn implementation and CHAR are verified. The pitch is
  "verify the absence of code," and everything good we found required disassembling bytecode by hand.
  Publishing those sources is the highest trust-per-hour item available to you.
- **Nobody can decline.** The "Don't Fund Charity" button flees the cursor, so a visitor with a
  tremor or using a head pointer cannot click it at all; its accessible name does not match its
  behaviour, so screen readers misreport it; and on touch, your main channel, it does not work as
  designed either way. Keep the joke, gate it behind `(pointer: fine)` and `prefers-reduced-motion`,
  add an `aria-label`, and give the modal `role="dialog"` plus Escape.
- **Contrast fails where it matters.** Footer tagline `#3a3a3a` on `#0a0a0a` is 1.74:1 against a 4.5
  bar; the decline button's only border `#222` is 1.24:1 against a 3.0 bar; vault contract addresses
  `#444` are 2.01:1. Four variable edits fix it: `--text-dim: #9a9a9a` (7.04:1), footer `#7d7d7d`
  (4.81:1), addresses `#8b949e` (6.37:1), interactive borders `#666` (3.45:1).
- **No CSP, no HSTS, no `nosniff`, no canonical tags on 101 pages**, and `www.tasern.quest` serves a
  full byte-identical duplicate without redirecting, which splits browser storage and makes the
  WalletConnect dialog show an origin people did not expect.
- **The impact report never loads.** `/impact/report.html` contains no `fetch()` at all, so its
  headline "MfT Burned" figure renders as a literal `--` forever and its other numbers are static
  text from June. It also states 4 launches and 160+ pools, which cannot both be true when each
  launch creates 2.
- **No legal entity is named.** Terms say the site is operated by an ENS name and that they are "not
  governed by the laws of any specific jurisdiction." Courts do not accept opt-outs from law, so as
  written the liability protections likely protect nobody and a named individual carries the
  exposure. Forming an entity is the highest protection-per-hour item here, and that one is for the
  owner's sake rather than users'.
- **Check your Supabase row-level security yourself.** We did not test it on purpose. If the policy
  is not insert-only, that publishable key makes every wallet address ever logged world-readable.

---

## 9. What is genuinely excellent

Said plainly, because these are things we tried to fault and could not.

1. **`vault-facts.json` is the best artifact here.** Machine-readable due diligence with an explicit
   `is_not` array ("Not a stablecoin", "No return is promised"), address provenance, and a self
   declaration of which claims were checked against deployed bytecode and which were not. We have not
   seen another project publish "here is what I verified and here is what I did not." Push it harder.
2. **`risk.html` section 1**, "What 'Unrugable' Means (and Does Not Mean)," is better than most
   audited protocols write. The entire fix for the overclaiming is to let this page's voice edit the
   marketing pages.
3. **Untrusted on-chain data is properly escaped.** Token names and symbols are attacker-controlled
   by definition on a launchpad, and every one goes through a correct escaper. That is the most likely
   XSS vector on this kind of site and it is closed.
4. **The `?ref` parameter is validated twice**, by format and against the factory on chain, before
   being used or displayed. Better than most production dapps.
5. **Swap guardrails are real** and match the advertised numbers, with a token allowlist and exact
   amount approvals that are never unlimited. The file header reads "Every rule maps to a real loss
   event, do not weaken these checks." Somebody lost money and wrote it down.
6. **The npm package is clean.** Full source read, no exfiltration, no install scripts, one
   dependency, provenance signature present. We went looking for a phone-home and there is not one.
7. **The advertised tool count is exactly right.** 34+5+1+3+4+1+1 = 49, and the shipped `TOOLS` array
   has exactly 49, category for category. Contract addresses are consistent across all six discovery
   files, which most multi-file agent surfaces get wrong.
8. **`reactor-map.json` is live, fresh and correct**, regenerated hours before we read it. It is the
   most trustworthy thing on the surface and the answer to two of the broken endpoints.
9. **No `eval`, no `document.write`, no `postMessage` listeners, no secrets in client code.** The RPC
   is the public Base endpoint with no embedded API key, which is one of the most common findings on
   sites like this and you avoided it.
10. **`carbon.html` honestly displays "0, Coming Soon."** That is brave. The rest of the site should
    match that page, not the other way round.

---

## 10. Suggested order

1. The privacy policy contradiction. Cheapest fix, highest exposure, publicly discoverable now.
2. Check the Supabase row-level security yourself. Five minutes.
3. Switch the CHAR burn to `retireFrom()`. One call, and it makes your carbon claims true.
4. Correct the renounce claim, and move that reactor admin key behind a multisig.
5. Publish the liquidity-lock and burn-trap proofs. You earned them and nobody knows.
6. Verify the vault and reactor sources on BaseScan.
7. Fix the `llms.txt` paths, regenerate `agents.html` from the tool list, delete the hardcoded gas numbers.
8. One nginx block: `www` redirect, HSTS, `nosniff`, canonicals, gzip and cache headers for JS and CSS.

---

*Provisioned by EcoWealth Corporation, Brandon Kelly, brawlaphant@gmail.com. Independent and
unsolicited, not affiliated with Toucan Protocol, Puro.earth, OpenSea, Uniswap, Farcaster or Base.
Everything here is yours to keep, use, edit or discard, whether or not we ever work together.
Unlisted and not indexed. Human edition: https://vealth.net/tasern-hub.html*
