mirror of
https://github.com/luxdao/app.git
synced 2026-10-30 18:14:05 +00:00
lux.vote was served by an interface derived from Decent DAO under AGPL-3.0. This is a fresh app on @hanzo/gui with no Decent lineage — the replaced app's route table was read to enumerate what the interface must do, and nothing else. No Tailwind anywhere. @luxfi/ui is not a dependency: its prebuilt components carry arbitrary-utility class strings and are the only reason the exchange scans for them. Dropping it means replacing two things it provided — createGui, which GuiProvider alone does not call and without which the tree throws and the document is blank, and luxUi()'s aliases, now read from node_modules/@hanzogui at config time so an upgrade cannot leave a package undeduplicated. Twelve screens over the Governor, the votes token, the Timelock, the work market, Roles, Karma and the gauges, wired to luxfi/standard's Foundry artifacts rather than to its stale ABI barrel. The contracts are not what the prose says: Bounty has no escrow, arbiter or dispute state; MultiDAOGovernor swaps Executed and Expired; Karma emits no Transfer so no holder list exists. The Governor's clock is mode=timestamp, which is asked for rather than assumed because 96369 produces blocks on demand and reading seconds as blocks turns one day into months. Every read reports one of four outcomes — deployed, not deployed, not read, no record. A contract with no code answers with empty data rather than an error, so an absent contract and an idle one arrive identically at the call site; only one of them is a statement about governance. /deployment asks eth_getCode for every address on every chain on load, because the written records disagree with the chain and with each other. Endpoints are the /v1/bc/C/rpc form. The bare host serves the same chain to curl and refuses a browser — 405 on preflight, no allow-origin header — which would report every Governor unreadable while the Governor was fine. Wallet login is @luxwallet/connect, imported by subpath: its root barrel pulls a connector factory naming all seven chains, and a bundler follows every branch into optional peers the dev server never resolves. It signs a CAIP-122 message and offers no provider, transactions or chain switching, so viem is built over our own EIP-6963 discovery for the calls that write. Telemetry off: the design system posts to api.hanzo.ai on load by default, and who reads a proposal is not this interface's to report. Gates ported and made real. The class check ran against the Suspense fallback until a negative control caught it passing on a route with an injected utility class; every gate now waits for the screen's own h1. 22 unit tests, 135 browser tests against the built output. Co-authored-by: Hanzo Dev <[email protected]>
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test'
|
|
|
|
export default defineConfig({
|
|
testDir: './e2e',
|
|
fullyParallel: true,
|
|
forbidOnly: !!process.env.CI,
|
|
reporter: process.env.CI ? 'line' : [['list'], ['html', { open: 'never' }]],
|
|
use: {
|
|
// The IPv4 literal on both sides. Vite binds [::1] by default while
|
|
// Chromium resolves `localhost` to 127.0.0.1 first, so the browser is
|
|
// refused by a server that was running the whole time and the suite reports
|
|
// every test failing for one missing bind.
|
|
baseURL: process.env.BASE_URL || 'http://127.0.0.1:5288',
|
|
trace: 'retain-on-failure',
|
|
screenshot: 'only-on-failure',
|
|
},
|
|
projects: [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }],
|
|
...(process.env.BASE_URL
|
|
? {}
|
|
: {
|
|
webServer: {
|
|
// `npx vite`, not `pnpm vite`: Playwright kills the process it
|
|
// spawned, and spawning pnpm means it kills pnpm while vite carries
|
|
// on orphaned, holding the port.
|
|
command: process.env.BUILT
|
|
? 'npx vite preview --host 127.0.0.1 --port 5288 --strictPort'
|
|
: 'npx vite --host 127.0.0.1 --port 5288 --strictPort',
|
|
url: 'http://127.0.0.1:5288',
|
|
// Reuse is the default and it is what makes a suite unreliable: the
|
|
// same tree reports a different number of failures each run, none of
|
|
// them about the code.
|
|
reuseExistingServer: false,
|
|
timeout: 120_000,
|
|
},
|
|
}),
|
|
})
|