Portal UX: terms disclosure + consent on EVM/Terra sign pages #20
No reviewers
Labels
No labels
agent:implement
agent:ready
api
bot
bug
ci
enhancement
ready
security
terra-classic
testing
ux
web
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-ecosystem-legal!20
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/issue-2-sign-page-terms"
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
Closes #2. EVM and Terra Classic sign pages now show the full latest terms text before wallet interaction, with a consistent checkbox consent gate.
web/src/signShell.tsused by/sign/evmand/sign/terra-classicgetTermsLatest+getTermsContentonce; show version + effective date + scrollable bodyinnerHTML)aria-livestatus regionsigned_latestalready, show success without re-signingskills/portal-sign-disclosure/SKILL.md, gap analysis crosslinksoxpkg.pr.new lockfile entry via npm override so installs resolveOut of scope (per issue): Solana / Telegram sign pages, bot copy, redesign/i18n/multi-wallet.
Consent gate (for reviewers)
Checkbox only (not scroll-to-bottom). CTA stays disabled until:
UI gate is notice/consent UX, not auth — server still requires a valid wallet signature.
Test plan
web/src/signShell.test.ts(XSS-as-text, consent enable, load error)npm run test:web(11 passed)cd web && npm run test:e2e(12 passed, retested)/sign/evm?property=cl8y.comand/sign/terra-classic?property=cl8y.comshow current terms after syncAcceptance criteria checklist
RECOMMEND: ACCEPT
Review summary
Thorough review of !20 against GitLab #2 (acceptance criteria, attack/abuse table, verification checklist), the MR diff (
d2e4e74), localnpm run test:web(11/11), security audit of changed code, and gap analysis across packages. Issue #2 scope is satisfied. No new medium+ security issues in the diff. Residual repo risks are pre-existing / out of scope for this MR.Closes checklist vs #2:
web/src/signShell.ts+ page wiring)textContent/el; unit covers XSS-as-text)role="alert"on load failure)web/e2e/evm-sign.spec.ts,web/e2e/sign-pages.spec.ts)Nice-to-haves from #2: already-signed short-circuit after wallet connect is implemented for EVM/Terra; manual verification items on the MR remain unchecked.
Security audit (MR delta)
No new medium/high/critical findings in changed code.
termsBody.textContent = content; unit asserts<script>stays text (signShell.test.ts)property/app_nameinjectionredirect_uriweb/src/ui.ts); not weakenedAttack classes (requested coverage)
Pre-existing critical paths (do not block #2; still relevant ops risk)
Documented in
gaps/GAP_1786322222.mdand not introduced by this MR:signMessagesignArbitrarymismatch (disclosure UX now works; end-to-end Terra sign remains broken)Gap analysis (MR-scoped)
Features / UX
/sign/evmand/sign/terra-classic; sharedrenderSignShell; fetch-once; a11y live region + labeled terms region; scrollable body CSS.content_sha256not shown; mobile wallet extensions still weak.Testing
property; e2e already-signed short-circuit; mobile viewport long-terms; Terra full-stack wallet e2e (blocked by pre-existing Terra verify bug).Packages
web/packages/cl8y-clickwrap/api/,bot/oxoverride (supply-chain fix for broken pkg.pr.new pin), gap analysis, skillDRY / readability / best practices
signShell.ts+skills/portal-sign-disclosure/SKILL.md.onSignerrors setclassName="error"but notrole="alert"(load failures do).CI
2745891423) passed but only ranlint:gitleaks(other jobs lackmerge_request_eventrules in.gitlab-ci.yml).lint:rust/lint:rust-boton pre-existing rustfmt (no Rust changes in this MR); web/e2e jobs skipped due to stage failure.mainseparately so web tests actually gate MRs — not a reason to reject !20’s web change.Verdict
ACCEPT for merge against #2. Implementation matches acceptance criteria, safe rendering is tested, consent gate is documented, and no security regressions were introduced. Follow-ups (Solana/Telegram disclosure, open-redirect allowlist, Terra/Solana/Telegram verify fixes, CI job rules) belong in separate issues/MRs.
mentioned in issue #2
added 6 commits
74a80e65- Fix Terra Classic Keplr signing with ADR-036 verify.62d8d76c- Harden Terra ADR-036 CI, abuse tests, and portal invariants.6ec0af69- Stabilize Playwright e2e startup on CI.Compare with previous version
added 5 commits
03849d3b- 1 commit from branchmainb0725585- Harden portal/API ops security for issue #3.8294413c- Fix integration test Config after rebase onto Terra ADR-036.c5fdf1a3- Remove unused PrehashSigner import in integration tests.0fe6e398- Show full terms and consent gate on EVM/Terra sign pages.Compare with previous version
added 1 commit
aa457dcd- Update Terra e2e for consent gate after sign-shell rebase.Compare with previous version
mentioned in commit
b9f4a29fbbMerged to
mainvia git merge (tipaa457dc) because CI quota blockedglab mr merge. Includes Terra e2e consent-gate fix. Commit is onmain.