From fb353dd2c3f787eae2721dfe1167fba487b0a749 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:04:40 +0100 Subject: [PATCH 01/24] fix(brand): centralize canonical site, repository, docs, and social destinations (#846) --- apps/web/src/shared/lib/site-identity.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/web/src/shared/lib/site-identity.ts diff --git a/apps/web/src/shared/lib/site-identity.ts b/apps/web/src/shared/lib/site-identity.ts new file mode 100644 index 00000000..913fd047 --- /dev/null +++ b/apps/web/src/shared/lib/site-identity.ts @@ -0,0 +1,12 @@ +// Canonical destinations for web metadata, product links, and community links. +// Product name/domain pending confirmation in SO4-Markets/interface#846. +export const SITE_NAME = "SO4 Market" +export const SITE_URL = "https://so4.market" +export const REPO_URL = "https://github.com/SO4-Markets/interface" +export const DOCS_URL = "https://docs.so4.market" +export const SOCIAL_URLS = { + x: "https://twitter.com/so4market", + discord: "https://discord.gg/so4market", + telegram: "https://t.me/so4market", + github: REPO_URL, +} as const From 185d2daa07918b07b923f3d344d46ff1fd31a697 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:04:54 +0100 Subject: [PATCH 02/24] fix(brand): use one canonical product identity and community links (#846) --- apps/web/src/routes/__root.tsx | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/web/src/routes/__root.tsx b/apps/web/src/routes/__root.tsx index 365c5eac..e0d1bac4 100644 --- a/apps/web/src/routes/__root.tsx +++ b/apps/web/src/routes/__root.tsx @@ -10,12 +10,10 @@ import { TooltipProvider } from "@workspace/ui/components/tooltip" import { DensityProvider } from "@workspace/ui/components/density-provider" import appCss from "@workspace/ui/globals.css?url" import { AppProviders } from "../app/providers" +import { SITE_NAME, SITE_URL, SOCIAL_URLS } from "../shared/lib/site-identity" import { RouteAnnouncer } from "../shared/components/RouteAnnouncer" -// Update this to your production domain before going live. -const SITE_URL = "https://levee.market" -const SITE_NAME = "levee.market" -const TITLE = "Levee · On-chain perpetuals" +const TITLE = `${SITE_NAME} · On-chain perpetuals` const DESCRIPTION = "A unified-liquidity perp DEX. Deep books, sub-second matching, and self-custodied risk — built for traders who care where their fills come from." // TODO(GF3-003): apply the dot-separator convention (no em dashes as list @@ -34,7 +32,7 @@ const JSON_LD = { { "@type": "WebApplication", "@id": `${SITE_URL}/#app`, - name: "Levee", + name: SITE_NAME, url: SITE_URL, description: DESCRIPTION, applicationCategory: "FinanceApplication", @@ -48,13 +46,13 @@ const JSON_LD = { { "@type": "Organization", "@id": `${SITE_URL}/#org`, - name: "Levee Labs", + name: "SO4 Markets", url: SITE_URL, logo: `${SITE_URL}/favicon.svg`, sameAs: [ - "https://twitter.com/so4market", - "https://discord.gg/so4market", - "https://t.me/so4market", + SOCIAL_URLS.x, + SOCIAL_URLS.discord, + SOCIAL_URLS.telegram, ], }, { @@ -81,7 +79,7 @@ export const Route = createRootRoute({ content: "perpetual DEX, on-chain perps, crypto derivatives, DeFi trading, BTC perp, ETH perp, low fee perp, self-custodied trading, unified liquidity", }, - { name: "author", content: "Levee Labs" }, + { name: "author", content: "SO4 Markets" }, { name: "robots", content: "index, follow, max-image-preview:large" }, // ds-allow: requires a literal color string for // mobile browser chrome tinting — can't reference a CSS custom @@ -105,7 +103,7 @@ export const Route = createRootRoute({ { property: "og:image:alt", content: - "Levee · On-chain perpetuals DEX · unified liquidity for modern markets", + `${SITE_NAME} · On-chain perpetuals DEX · unified liquidity for modern markets`, }, // ── Twitter / X Card ──────────────────────────────────────── @@ -118,7 +116,7 @@ export const Route = createRootRoute({ { name: "twitter:image:alt", content: - "Levee · On-chain perpetuals DEX · unified liquidity for modern markets", + `${SITE_NAME} · On-chain perpetuals DEX · unified liquidity for modern markets`, }, ], links: [ From a35f074bb4f1df2b43ecde6e025ce56a779cd88b Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:04 +0100 Subject: [PATCH 03/24] fix(brand): replace stale repository and community links with shared config (#846) --- apps/web/src/ui/landing/social-section.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/web/src/ui/landing/social-section.tsx b/apps/web/src/ui/landing/social-section.tsx index c1a4f2c1..f316b7d8 100644 --- a/apps/web/src/ui/landing/social-section.tsx +++ b/apps/web/src/ui/landing/social-section.tsx @@ -1,3 +1,4 @@ +import { SOCIAL_URLS } from "@/shared/lib/site-identity" import { NewsletterForm } from "./newsletter-form" import { SocialSlider } from "./social-slider" @@ -8,10 +9,10 @@ import { SocialSlider } from "./social-slider" // the page is internally consistent; GitHub is the one link that's // definitely real (this repo). const SOCIAL_STATS = [ - { name: "Discord", value: "-", href: "https://discord.gg/so4market" }, - { name: "X", value: "-", href: "https://twitter.com/so4market" }, - { name: "Telegram", value: "-", href: "https://t.me/so4market" }, - { name: "GitHub", value: "Join", href: "https://github.com/Levee-HQ/interface" }, + { name: "Discord", value: "-", href: SOCIAL_URLS.discord }, + { name: "X", value: "-", href: SOCIAL_URLS.x }, + { name: "Telegram", value: "-", href: SOCIAL_URLS.telegram }, + { name: "GitHub", value: "Join", href: SOCIAL_URLS.github }, ] // GMX's referral-terms/media-kit/terms pages don't exist for SO4 yet — no From d204c7eac1d6820c685ee04e93a699231093f7f7 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:07 +0100 Subject: [PATCH 04/24] fix(brand): replace stale repository and community links with shared config (#846) --- apps/web/src/ui/landing/roadmap-section.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/src/ui/landing/roadmap-section.tsx b/apps/web/src/ui/landing/roadmap-section.tsx index c92f9ec3..7c88a436 100644 --- a/apps/web/src/ui/landing/roadmap-section.tsx +++ b/apps/web/src/ui/landing/roadmap-section.tsx @@ -1,3 +1,4 @@ +import { REPO_URL } from "@/shared/lib/site-identity" import { Quarter } from "./quarter" import type { QuarterData } from "./quarter" @@ -48,7 +49,7 @@ export function RoadmapSection() { {/* No dev-plan writeup exists yet — links to the source repo, a real destination, rather than a dead "#" anchor. */} Date: Sun, 18 Oct 2026 22:05:10 +0100 Subject: [PATCH 05/24] fix(brand): replace stale repository and community links with shared config (#846) --- apps/web/src/features/changelog/components/ChangelogEntry.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web/src/features/changelog/components/ChangelogEntry.tsx b/apps/web/src/features/changelog/components/ChangelogEntry.tsx index c4927d38..54b9c510 100644 --- a/apps/web/src/features/changelog/components/ChangelogEntry.tsx +++ b/apps/web/src/features/changelog/components/ChangelogEntry.tsx @@ -1,3 +1,4 @@ +import { REPO_URL } from "@/shared/lib/site-identity" import { Badge } from "@workspace/ui/components/badge" import { areaLabel, typeLabel, typeToVariant } from "../utils" import { InlineMarkdown } from "./InlineMarkdown" @@ -39,7 +40,7 @@ export function ChangelogEntry({ entry, highlight }: ChangelogEntryProps) { {entry.pr && (
Date: Sun, 18 Oct 2026 22:05:14 +0100 Subject: [PATCH 06/24] fix(brand): replace stale repository and community links with shared config (#846) --- apps/web/src/features/gallery/components/gallery-page.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/web/src/features/gallery/components/gallery-page.tsx b/apps/web/src/features/gallery/components/gallery-page.tsx index 0d4a2105..79233397 100644 --- a/apps/web/src/features/gallery/components/gallery-page.tsx +++ b/apps/web/src/features/gallery/components/gallery-page.tsx @@ -1,3 +1,4 @@ +import { REPO_URL } from "@/shared/lib/site-identity" import { useState } from "react" import { AppShell } from "@workspace/ui/components/app-shell" import { Avatar, AvatarGroup } from "@workspace/ui/components/avatar" @@ -105,14 +106,14 @@ export function GalleryPage() {

Every packages/ui primitive, all variants. See{" "} DESIGN.md {" "} and{" "} packages/ui/CONTRIBUTING.md From a50734032477d39631a22dc0b651cda53d6a3699 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:39 +0100 Subject: [PATCH 07/24] fix(brand): align web manifest, SEO image, and docs links with SO4 identity (#846) --- apps/web/public/manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json index e676f98c..ca8d6a2b 100644 --- a/apps/web/public/manifest.json +++ b/apps/web/public/manifest.json @@ -1,6 +1,6 @@ { - "short_name": "Levee", - "name": "Levee — On-chain perpetuals", + "short_name": "SO4", + "name": "SO4 Market — On-chain perpetuals", "description": "A unified-liquidity perp DEX. Deep books, sub-second matching, and self-custodied risk.", "icons": [ { From ad7a7e9a65004cdc706608eb41cc24faa0044179 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:42 +0100 Subject: [PATCH 08/24] fix(brand): align web manifest, SEO image, and docs links with SO4 identity (#846) --- apps/web/public/og-image.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/public/og-image.svg b/apps/web/public/og-image.svg index e7f1d491..fb5831c4 100644 --- a/apps/web/public/og-image.svg +++ b/apps/web/public/og-image.svg @@ -42,7 +42,7 @@ levee.market + fill="#F5F6F7">SO4.market From 280e0d371dbb0d63f6b8c83c13c1482a50904274 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:45 +0100 Subject: [PATCH 09/24] fix(brand): align web manifest, SEO image, and docs links with SO4 identity (#846) --- apps/web/src/ui/landing/faq-section.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web/src/ui/landing/faq-section.tsx b/apps/web/src/ui/landing/faq-section.tsx index 0d756447..f36138ec 100644 --- a/apps/web/src/ui/landing/faq-section.tsx +++ b/apps/web/src/ui/landing/faq-section.tsx @@ -1,3 +1,4 @@ +import { DOCS_URL } from "@/shared/lib/site-identity" import { Accordion, AccordionContent, @@ -7,7 +8,7 @@ import { import { LANDING_FAQS } from "./faq.generated" -const DOCS_ORIGIN = "https://docs.so4.market" +const DOCS_ORIGIN = DOCS_URL export function FaqSection() { return ( From 2ac4c133b8cbef157b5d33eaadcc9059be319eab Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:48 +0100 Subject: [PATCH 10/24] fix(brand): align web manifest, SEO image, and docs links with SO4 identity (#846) --- apps/web/src/features/changelog/components/ReleaseSection.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web/src/features/changelog/components/ReleaseSection.tsx b/apps/web/src/features/changelog/components/ReleaseSection.tsx index d710dd25..13f1f9fc 100644 --- a/apps/web/src/features/changelog/components/ReleaseSection.tsx +++ b/apps/web/src/features/changelog/components/ReleaseSection.tsx @@ -1,3 +1,4 @@ +import { SITE_URL } from "@/shared/lib/site-identity" import { useState } from "react" import { Copy01Icon, Tick02Icon } from "@hugeicons/core-free-icons" import { Badge } from "@workspace/ui/components/badge" @@ -25,7 +26,7 @@ export function ReleaseSection({ const handleCopyPermalink = async () => { const origin = typeof window === "undefined" - ? "https://so4.market" + ? SITE_URL : window.location.origin const permalink = `${origin}/changelog${anchor}` try { From 54712ca8e9ad8567e24c8b08b1867884b7212799 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:05:50 +0100 Subject: [PATCH 11/24] fix(brand): align web manifest, SEO image, and docs links with SO4 identity (#846) --- apps/web/src/features/wallet/components/ConnectButton.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/web/src/features/wallet/components/ConnectButton.tsx b/apps/web/src/features/wallet/components/ConnectButton.tsx index 7a5073b0..003c8bd7 100644 --- a/apps/web/src/features/wallet/components/ConnectButton.tsx +++ b/apps/web/src/features/wallet/components/ConnectButton.tsx @@ -1,3 +1,4 @@ +import { SITE_URL } from "@/shared/lib/site-identity" import { useEffect, useMemo, useRef, useState } from "react" import { QRCodeSVG } from "qrcode.react" @@ -278,7 +279,7 @@ function WalletModal({ ) const sep7Uri = useMemo(() => { const origin = - typeof window === "undefined" ? "https://so4.market" : window.location.origin + typeof window === "undefined" ? SITE_URL : window.location.origin const callbackUrl = new URL("/", origin).toString() if (pendingTransactionXdr) { From 9671184f9043f3ee43774ee6716677c5b62264e7 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:06:03 +0100 Subject: [PATCH 12/24] test(brand): reject stale Levee domain and GitHub links (#846) --- apps/web/src/shared/lib/site-identity.test.ts | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 apps/web/src/shared/lib/site-identity.test.ts diff --git a/apps/web/src/shared/lib/site-identity.test.ts b/apps/web/src/shared/lib/site-identity.test.ts new file mode 100644 index 00000000..c073971c --- /dev/null +++ b/apps/web/src/shared/lib/site-identity.test.ts @@ -0,0 +1,35 @@ +import { readFileSync } from "node:fs" +import { describe, expect, it } from "vitest" +import { DOCS_URL, REPO_URL, SITE_NAME, SITE_URL, SOCIAL_URLS } from "./site-identity" + +describe("canonical product identity (#846)", () => { + it("uses the documented SO4 website, repository, and community channels", () => { + expect(SITE_NAME).toBe("SO4 Market") + expect(SITE_URL).toBe("https://so4.market") + expect(REPO_URL).toBe("https://github.com/SO4-Markets/interface") + expect(DOCS_URL).toBe("https://docs.so4.market") + expect(SOCIAL_URLS).toMatchObject({ + github: REPO_URL, + x: "https://twitter.com/so4market", + discord: "https://discord.gg/so4market", + telegram: "https://t.me/so4market", + }) + }) + + it("does not keep the competing domain or repository links in runtime sources", () => { + const files = [ + "../../routes/__root.tsx", + "../../ui/landing/roadmap-section.tsx", + "../../ui/landing/social-section.tsx", + "../../features/changelog/components/ChangelogEntry.tsx", + "../../features/gallery/components/gallery-page.tsx", + "../../../public/og-image.svg", + "../../../public/manifest.json", + ] + + for (const path of files) { + const source = readFileSync(new URL(path, import.meta.url), "utf8") + expect(source, path).not.toMatch(/Levee-HQ|levee\\.market/) + } + }) +}) From aa3014be3ed4b5fd944a6b114e8dc27fbf0d7fc4 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:06:27 +0100 Subject: [PATCH 13/24] ci(test): run full contribution gate for issue branch --- .../workflows/contribution-verification.yml | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/contribution-verification.yml diff --git a/.github/workflows/contribution-verification.yml b/.github/workflows/contribution-verification.yml new file mode 100644 index 00000000..03344d11 --- /dev/null +++ b/.github/workflows/contribution-verification.yml @@ -0,0 +1,54 @@ +name: Contribution verification +on: + push: + branches: + - fix/issue-837-pin-dependency-ranges + - ci/issue-838-dependency-security + - fix/issue-846-canonical-brand + - fix/issue-848-referral-chart-labels +jobs: + full-gate: + runs-on: ubuntu-latest + timeout-minutes: 40 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.3.13 + - name: Install exact locked dependencies + run: bun install --frozen-lockfile + - name: Lint + run: bun lint + - name: Typecheck + run: bun typecheck + - name: Design tokens + run: bun run check:tokens + - name: Docs content + run: bun run check:content + - name: Tests + run: bun run test + - name: Coverage + run: bun run test:coverage + - name: Production build + run: bun run build + - name: Indexer generation and build + run: bun run --cwd apps/s03-indexer codegen && bun run --cwd apps/s03-indexer build + - name: Indexer test + run: bun run --cwd apps/s03-indexer test + - name: Indexer local manifest sync + run: SO4_CONTRACTS_REPO="$PWD/apps/s03-indexer/tests/fixtures/contracts-repo" bun run --cwd apps/s03-indexer sync:contracts:local && bash scripts/validate-manifest.sh apps/s03-indexer/config/contracts.local.json + - name: Web typecheck + run: bun run --cwd apps/web typecheck + - name: Web build + run: bun run --cwd apps/web build + audit: + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.3.13 + - run: bun audit --audit-level=high From 65fd457dd936ac69ed5bc7833876cb4c00588966 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:06:56 +0100 Subject: [PATCH 14/24] test: correct regex literals in issue-specific coverage --- apps/web/src/shared/lib/site-identity.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/shared/lib/site-identity.test.ts b/apps/web/src/shared/lib/site-identity.test.ts index c073971c..6bbb7677 100644 --- a/apps/web/src/shared/lib/site-identity.test.ts +++ b/apps/web/src/shared/lib/site-identity.test.ts @@ -29,7 +29,7 @@ describe("canonical product identity (#846)", () => { for (const path of files) { const source = readFileSync(new URL(path, import.meta.url), "utf8") - expect(source, path).not.toMatch(/Levee-HQ|levee\\.market/) + expect(source, path).not.toMatch(/Levee-HQ|levee\.market/) } }) }) From 28504d51c5666c6229e5acead59023c0acec9130 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:13 +0100 Subject: [PATCH 15/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/features/changelog/components/ChangelogEntry.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/features/changelog/components/ChangelogEntry.tsx b/apps/web/src/features/changelog/components/ChangelogEntry.tsx index 54b9c510..ff7c5aeb 100644 --- a/apps/web/src/features/changelog/components/ChangelogEntry.tsx +++ b/apps/web/src/features/changelog/components/ChangelogEntry.tsx @@ -1,8 +1,8 @@ -import { REPO_URL } from "@/shared/lib/site-identity" import { Badge } from "@workspace/ui/components/badge" import { areaLabel, typeLabel, typeToVariant } from "../utils" import { InlineMarkdown } from "./InlineMarkdown" import type { ChangelogEntry as IChangelogEntry } from "../types" +import { REPO_URL } from "@/shared/lib/site-identity" interface ChangelogEntryProps { entry: IChangelogEntry From bf2878cf4b605fe200611b4be6df7397b19589c7 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:16 +0100 Subject: [PATCH 16/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/features/changelog/components/ReleaseSection.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/features/changelog/components/ReleaseSection.tsx b/apps/web/src/features/changelog/components/ReleaseSection.tsx index 13f1f9fc..d04c1982 100644 --- a/apps/web/src/features/changelog/components/ReleaseSection.tsx +++ b/apps/web/src/features/changelog/components/ReleaseSection.tsx @@ -1,4 +1,3 @@ -import { SITE_URL } from "@/shared/lib/site-identity" import { useState } from "react" import { Copy01Icon, Tick02Icon } from "@hugeicons/core-free-icons" import { Badge } from "@workspace/ui/components/badge" @@ -8,6 +7,7 @@ import { Icon } from "@workspace/ui/components/icon" import { createAnchor, formatDate } from "../utils" import { ChangelogEntry } from "./ChangelogEntry" import type { Release } from "../types" +import { SITE_URL } from "@/shared/lib/site-identity" interface ReleaseSectionProps { release: Release From ecc9128aa0475f30a4678fae31bf41c1615be5c5 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:19 +0100 Subject: [PATCH 17/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/features/gallery/components/gallery-page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/features/gallery/components/gallery-page.tsx b/apps/web/src/features/gallery/components/gallery-page.tsx index 79233397..4d884816 100644 --- a/apps/web/src/features/gallery/components/gallery-page.tsx +++ b/apps/web/src/features/gallery/components/gallery-page.tsx @@ -1,4 +1,3 @@ -import { REPO_URL } from "@/shared/lib/site-identity" import { useState } from "react" import { AppShell } from "@workspace/ui/components/app-shell" import { Avatar, AvatarGroup } from "@workspace/ui/components/avatar" @@ -33,6 +32,7 @@ import type { ProgressIndicatorProps } from "@workspace/ui/components/progress-i import { useDirection } from "@/ui/direction-provider" import { ChangelogCategoryBadge } from "@/features/changelog/components/ChangelogCategoryBadge" import { CHANGELOG_ENTRY_TYPES } from "@/features/changelog/types" +import { REPO_URL } from "@/shared/lib/site-identity" const BUTTON_VARIANTS = [ "default", From 66e0d84b6a113b8c4739d7e0800ee9249d7ec25b Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:22 +0100 Subject: [PATCH 18/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/features/wallet/components/ConnectButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/features/wallet/components/ConnectButton.tsx b/apps/web/src/features/wallet/components/ConnectButton.tsx index 003c8bd7..6c63ec80 100644 --- a/apps/web/src/features/wallet/components/ConnectButton.tsx +++ b/apps/web/src/features/wallet/components/ConnectButton.tsx @@ -1,4 +1,3 @@ -import { SITE_URL } from "@/shared/lib/site-identity" import { useEffect, useMemo, useRef, useState } from "react" import { QRCodeSVG } from "qrcode.react" @@ -20,6 +19,7 @@ import type { ComponentProps } from "react" import { useKeyboardShortcut } from "@/shared/hooks/useKeyboardShortcut" import { useWallet } from "@/app/providers" import { NETWORK } from "@/app/config/network" +import { SITE_URL } from "@/shared/lib/site-identity" type ConnectButtonProps = Omit< ComponentProps, From b5854de15c2e8bfbd1a9d35390e11ce714541525 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:25 +0100 Subject: [PATCH 19/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/ui/landing/faq-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/ui/landing/faq-section.tsx b/apps/web/src/ui/landing/faq-section.tsx index f36138ec..0f803d52 100644 --- a/apps/web/src/ui/landing/faq-section.tsx +++ b/apps/web/src/ui/landing/faq-section.tsx @@ -1,4 +1,3 @@ -import { DOCS_URL } from "@/shared/lib/site-identity" import { Accordion, AccordionContent, @@ -7,6 +6,7 @@ import { } from "@workspace/ui/components/accordion" import { LANDING_FAQS } from "./faq.generated" +import { DOCS_URL } from "@/shared/lib/site-identity" const DOCS_ORIGIN = DOCS_URL From acef1fe6ebf7d06934aa1ce53826d76f5cf7f69d Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:27 +0100 Subject: [PATCH 20/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/ui/landing/roadmap-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/ui/landing/roadmap-section.tsx b/apps/web/src/ui/landing/roadmap-section.tsx index 7c88a436..d2bb711b 100644 --- a/apps/web/src/ui/landing/roadmap-section.tsx +++ b/apps/web/src/ui/landing/roadmap-section.tsx @@ -1,6 +1,6 @@ -import { REPO_URL } from "@/shared/lib/site-identity" import { Quarter } from "./quarter" import type { QuarterData } from "./quarter" +import { REPO_URL } from "@/shared/lib/site-identity" // No dated roadmap exists in the repo — GMX's quarter labels (Q1..Q4) imply // specific committed dates, which would be a fabricated public promise if From a246eeaa0aa873f5d7819ea932c286606a30ace9 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:30 +0100 Subject: [PATCH 21/24] style(brand): align config imports with repository lint rules (#846) --- apps/web/src/ui/landing/social-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/src/ui/landing/social-section.tsx b/apps/web/src/ui/landing/social-section.tsx index f316b7d8..86c14f49 100644 --- a/apps/web/src/ui/landing/social-section.tsx +++ b/apps/web/src/ui/landing/social-section.tsx @@ -1,6 +1,6 @@ -import { SOCIAL_URLS } from "@/shared/lib/site-identity" import { NewsletterForm } from "./newsletter-form" import { SocialSlider } from "./social-slider" +import { SOCIAL_URLS } from "@/shared/lib/site-identity" // Counts stay "-" — no social account has a real follower count to report // yet, and a fabricated number is worse than an honest placeholder. URLs From 0596704366bb4d937b6251892445e62070889c23 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:08:51 +0100 Subject: [PATCH 22/24] ci(test): collect independent gate results without masking any failure --- .github/workflows/contribution-verification.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/contribution-verification.yml b/.github/workflows/contribution-verification.yml index 03344d11..66847423 100644 --- a/.github/workflows/contribution-verification.yml +++ b/.github/workflows/contribution-verification.yml @@ -20,28 +20,40 @@ jobs: - name: Install exact locked dependencies run: bun install --frozen-lockfile - name: Lint + if: ${{ success() || failure() }} run: bun lint - name: Typecheck + if: ${{ success() || failure() }} run: bun typecheck - name: Design tokens + if: ${{ success() || failure() }} run: bun run check:tokens - name: Docs content + if: ${{ success() || failure() }} run: bun run check:content - name: Tests + if: ${{ success() || failure() }} run: bun run test - name: Coverage + if: ${{ success() || failure() }} run: bun run test:coverage - name: Production build + if: ${{ success() || failure() }} run: bun run build - name: Indexer generation and build + if: ${{ success() || failure() }} run: bun run --cwd apps/s03-indexer codegen && bun run --cwd apps/s03-indexer build - name: Indexer test + if: ${{ success() || failure() }} run: bun run --cwd apps/s03-indexer test - name: Indexer local manifest sync + if: ${{ success() || failure() }} run: SO4_CONTRACTS_REPO="$PWD/apps/s03-indexer/tests/fixtures/contracts-repo" bun run --cwd apps/s03-indexer sync:contracts:local && bash scripts/validate-manifest.sh apps/s03-indexer/config/contracts.local.json - name: Web typecheck + if: ${{ success() || failure() }} run: bun run --cwd apps/web typecheck - name: Web build + if: ${{ success() || failure() }} run: bun run --cwd apps/web build audit: runs-on: ubuntu-latest From 38c6d4b76093b9f5a669710a0c30a21d9ddaea85 Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:14:11 +0100 Subject: [PATCH 23/24] docs(changelog): record corrected canonical brand and repository links (#846) --- .../unreleased/9996-canonical-so4-brand-and-links.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changelog/unreleased/9996-canonical-so4-brand-and-links.md diff --git a/.changelog/unreleased/9996-canonical-so4-brand-and-links.md b/.changelog/unreleased/9996-canonical-so4-brand-and-links.md new file mode 100644 index 00000000..ed41afe7 --- /dev/null +++ b/.changelog/unreleased/9996-canonical-so4-brand-and-links.md @@ -0,0 +1,8 @@ +--- +type: fixed +area: trade +pr: 9996 +breaking: false +--- + +Site metadata, community links, and changelog and gallery GitHub URLs now consistently point to SO4 Market and its source repository. From d34084ac376ccfb202c53b2801e59f158a096c7d Mon Sep 17 00:00:00 2001 From: DemolaCodes Date: Sun, 18 Oct 2026 22:15:06 +0100 Subject: [PATCH 24/24] chore: remove temporary CI verification workflow before upstream contribution --- .../workflows/contribution-verification.yml | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 .github/workflows/contribution-verification.yml diff --git a/.github/workflows/contribution-verification.yml b/.github/workflows/contribution-verification.yml deleted file mode 100644 index 66847423..00000000 --- a/.github/workflows/contribution-verification.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Contribution verification -on: - push: - branches: - - fix/issue-837-pin-dependency-ranges - - ci/issue-838-dependency-security - - fix/issue-846-canonical-brand - - fix/issue-848-referral-chart-labels -jobs: - full-gate: - runs-on: ubuntu-latest - timeout-minutes: 40 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: oven-sh/setup-bun@v2 - with: - bun-version: 1.3.13 - - name: Install exact locked dependencies - run: bun install --frozen-lockfile - - name: Lint - if: ${{ success() || failure() }} - run: bun lint - - name: Typecheck - if: ${{ success() || failure() }} - run: bun typecheck - - name: Design tokens - if: ${{ success() || failure() }} - run: bun run check:tokens - - name: Docs content - if: ${{ success() || failure() }} - run: bun run check:content - - name: Tests - if: ${{ success() || failure() }} - run: bun run test - - name: Coverage - if: ${{ success() || failure() }} - run: bun run test:coverage - - name: Production build - if: ${{ success() || failure() }} - run: bun run build - - name: Indexer generation and build - if: ${{ success() || failure() }} - run: bun run --cwd apps/s03-indexer codegen && bun run --cwd apps/s03-indexer build - - name: Indexer test - if: ${{ success() || failure() }} - run: bun run --cwd apps/s03-indexer test - - name: Indexer local manifest sync - if: ${{ success() || failure() }} - run: SO4_CONTRACTS_REPO="$PWD/apps/s03-indexer/tests/fixtures/contracts-repo" bun run --cwd apps/s03-indexer sync:contracts:local && bash scripts/validate-manifest.sh apps/s03-indexer/config/contracts.local.json - - name: Web typecheck - if: ${{ success() || failure() }} - run: bun run --cwd apps/web typecheck - - name: Web build - if: ${{ success() || failure() }} - run: bun run --cwd apps/web build - audit: - runs-on: ubuntu-latest - timeout-minutes: 15 - steps: - - uses: actions/checkout@v4 - - uses: oven-sh/setup-bun@v2 - with: - bun-version: 1.3.13 - - run: bun audit --audit-level=high