Session — stage 1, launching
Closed 14 Sep 2026. What a creator decides when they launch. Project state is in
notes/STATUS.md; the decision is D17 in notes/DECISIONS.md.
Done
- D17 built.
launch(name, symbol, quote, CreatorFees{recipient, buyFeeBps, sellFeeBps}); the three-argumentlaunchstays and means no creator fee. BondingCurvesplits every fee between the protocol and the creator, pro rata, with rounding dust to the protocol. Protocol + creator ≤ 10% each way. No setters.- Neither party can stop a trade. Each share is pushed with
trySafeTransfer; a failure is held ascreatorFeesOwedorprotocolFeesOwed, with separate permissionless retries that still work after graduation. - Proved:
CreatorFee.t.sol(11),CreatorFeeLaunch.t.sol(3), invariants with both parties randomly blocked, andCreatorFee.fork.t.solwith Circle's real blacklister blocking the creator and, separately, our own vault.make check159/159,make test-fork13/13. FEATURES.mdstage 1: creator sets the fee ✔, names the wallet ✔.
Decided — do not relitigate
- Both fees exist, the ceiling caps their total, and a failed push is held rather than reverted — the developer's calls, recorded as D17's amendment. Holding on failure is not the claim model D17 rejects: nothing accrues while the recipient can be paid.
- The two retries are separate so one blocked party never holds up the other.
- Validation stays in the curve's initializer, not the factory, because only the curve knows the protocol fee the creator's is added to.
- Curve storage appends only: slots 12–14, gap 40 → 38. Any real deploy of this curve is a new beacon (D12).
Still open in this thread
- Pool fees for the creator — still O17; the migrator's fee sink is one shared address.
- Fees pointed at holders, a buyback or a burn, and anti-snipe (O12) — deliberately deferred.
Deploy.s.solanddev/smoke.shstill launch with the three-argument form; nothing exercises a creator fee outside the tests.