F-10 missing: no DoubPresaleVesting frontend UI or local-Anvil deployment for vesting checklist #92
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#92
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
#38 F-11 (sic, F-10) checklist item asks for "Presale vesting UX (DoubPresaleVesting 30% + 180-day)" with vesting clock visible in local tz AND UTC. Walking the YO frontend on
799cf6ftoday, I cannot find any vesting UI, route, or panel. The DoubPresaleVesting contract exists in source (contracts/src/vesting/DoubPresaleVesting.sol) and there's a deploy helper for it (script/UUPSDeployLib.sol L151-164), but DeployDev.s.sol doesn't currently call deployDoubPresaleVesting() and the frontend has zero strings matching "vesting", "presale vesting", "180 day", "30% unlock", etc.So F-10 has neither a frontend implementation nor an active local-Anvil deployment for testing.
Repro
What exists vs what's missing
What exists:
What's missing for F-10:
Suggested resolution
If F-10 is in-scope for TGE:
If F-10 is post-TGE / out of scope for now:
Severity
P3-low for spec drift, P2-medium if F-10 is genuinely a TGE deliverable that's been forgotten.
Filed during #38 F-10 walkthrough today.
cc @PlasticDigits
In addition to the suggested resolution, the /vesting route should be hidden (not in the menu) so it can be shared directly with presale vesting
mentioned in commit
282eb623a1Implemented (GitLab #92) — pushed to
main@282eb62Contracts:
DeployDev.s.solnow deploys a dev-onlyDoubPresaleVesting(Anvil account #0 + #1, 10k DOUB total, 180-day linear), mints DOUB to the vesting contract, callssetClaimsEnabled(true)andstartVesting(), andconsole.logsDoubPresaleVesting:for stack tooling.Stack / env:
scripts/start-local-anvil-stack.shandscripts/lib/anvil_deploy_dev.shparse that line; registry JSON gainsDoubPresaleVesting;frontend/.env.localgetsVITE_DOUB_PRESALE_VESTING_ADDRESS.scripts/e2e-anvil.shexports the same for builds.Frontend: Hidden
/vestingroute (not inRootLayoutnav — per issue note).PresaleVestingPage: schedule copy, dual local + UTC clock, wallet allocation / claimed / claimable,Claim DOUBwired toclaim().Tests: Vitest (
presaleVestingFormat),forge test(existing vesting +DevStackIntegrationon branch),bash scripts/e2e-anvil.sh(includes newe2e/anvil-presale-vesting.spec.ts) — all green before push.Docs:
docs/frontend/presale-vesting.md, invariant block + anchor indocs/testing/invariants-and-business-logic.md,e2e-anvil.md/strategy.md, launch F-10 inYO-DOUB-Launch-UX-Flows.md+launchplan-timecurve.md, play skillskills/verify-yo-presale-vesting/SKILL.md, guardrails item 28.@brouie please verify using this checklist (issue stays open per request):
bash scripts/e2e-anvil.shpasses locally (6 Anvil specs incl. vesting).bash scripts/start-local-anvil-stack.sh, openhttp://127.0.0.1:5173/vesting— no/vestinglink in header; page shows Presale vesting, Contract schedule, Vesting clock (local + UTC), wallet panel with Claim DOUB enabled for default Anvil #0.contracts/deployments/local-anvil-registry.jsoncontainsDoubPresaleVesting;frontend/.env.localhasVITE_DOUB_PRESALE_VESTING_ADDRESSmatchingDoubPresaleVesting:from deploy log (ERC-1967 proxy).claimsEnabledoff until signoff — UI should reflect Claims enabled: No and disabled claim (seedocs/operations/final-signoff-and-value-movement.md).mentioned in issue #38
Verified
282eb62against all 8 SKILL.md acceptance items on the SKIP+KUMBAYA+NO_COOLDOWN stack today. Closing.Stack state
VITE_DOUB_PRESALE_VESTING_ADDRESS=0x67d269191c92Caf3cD7723F116c85e6E9bf55933DeployDev.s.solper the new commit:token() = 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512(DOUB / "Doubloon", 18 decimals)vestingDuration() = 15552000s(180 days)vestingStart() = 1777511737(Apr 30 01:15:37 UTC 2026)claimsEnabled() = truetotalAllocated() = 10000e18(10,000 DOUB)beneficiaryCount() = 2: Anvil acct #00xf39Fd6...2266(6,000 DOUB) + Anvil acct #10x709979...79C8(4,000 DOUB)10000e18DOUB pre-test (balance equals totalAllocated)Item 1 - Hidden nav: PASS
Home page header nav shows: YIELDOMEGA logo, TimeCurve, Rabbit Treasury, Collection, Referrals, Kumbaya, Sir, Connect Wallet. No
/vestingnav item. Direct URL only, exactly per the issue comment requirement to share the route directly with presale wallets without surfacing it in primary nav.Item 2 - Direct URL loads: PASS
Navigated to
http://127.0.0.1:5173/vesting. URL stays on/vesting(no redirect). Heading "PRESALE VESTING" visible with DOUB pill above. Page header copy mentions "GitLab #92" and the 30/70 + 180-day breakdown.Item 3 - Contract block: PASS
"CONTRACT SCHEDULE" panel under "ON-CHAIN" badge with copy "Numbers below are live contract reads. DOUB token address comes from vesting.token()." Reads:
0x67d269191c92Caf3cD7723F116c85e6E9bf55933(matches registry)0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512(matchescast call vesting.token())Plus operational signoff note pointing to
docs/operations/final-signoff-and-value-movement.md.Item 4 - Schedule copy: PASS
Page header text reads (verbatim):
30% cliff + 70% linear breakdown surfaced. Linear duration
15552000 s (~180.0 days)in the contract block matchesvestingDuration()cast read exactly.Item 5 - Dual clock: PASS
"VESTING CLOCK" panel under "UTC + LOCAL" badge with subtitle "Start is vestingStart; full linear unlock is vestingStart + vestingDuration."
Schedule start (TGE cliff):
Full allocation vested by:
Both anchors render Local + UTC dual lines. End - start = 180 days exact (Apr 30 -> Oct 27, matches
vestingDuration()).Item 6 - Beneficiary reads match cast: PASS
Connected MetaMask (deployer wallet
0xf39Fd6...2266) on chain 31337. "YOUR WALLET" panel surfaced with CONNECTED pill. Pre-claim reads:cast call vesting.allocations()derived value)Cast cross-check at the same instant:
claimable(0xf39Fd6...2266) = 1800000810185185185185wei = 1800.00081... DOUB. Frontend value matches contract read to wei precision. The fractional.000810...represents linear accrual from the few minutes elapsed sincevestingStart(linear release rate ~0.27 DOUB/sec for this beneficiary's 4,200e18 linear cap over 15552000s).Item 7 - Claims gate: PASS
claimsEnabled() = trueonchain. "Claim DOUB" CTA visible and enabled. Disabled-state path was not exercised live this session (it's the inverse of the live-tested path; if needed I can flip the flag via cast and re-confirm, flag if you want explicit evidence).Item 8 - Claim path: PASS
Clicked "Claim DOUB". MetaMask transaction request prompt:
0x67d26...55933(vesting contract)claim()Confirmed signature. Tx mined.
Post-tx frontend state:
Cast cross-check post-tx:
DOUB.balanceOf(0xf39Fd6...2266) = 1800493132716049382716(1800.49 DOUB credited)DOUB.balanceOf(0x67d269...55933) = 8199506867283950617284(10000 - 1800.49 = 8199.51 DOUB remaining in vesting contract, matches to wei)vesting.claimable(0xf39Fd6...2266) = 0Frontend <-> contract integration verified end-to-end. Math:
vested(now) - claimedBeforeexactlyClosure recommendation
All 8 SKILL.md items verified live. The hidden-route + dual-clock + 30/70 schedule + beneficiary reads + claim path all line up with the issue spec. Closing #92.
cc @PlasticDigits
mentioned in issue #91
mentioned in issue #95
mentioned in issue #100
mentioned in issue #145