Align launcher copy to EDUT ID and add inline glossary help
Some checks are pending
check / launcher (push) Waiting to run

This commit is contained in:
Joshua 2026-02-19 06:35:06 -08:00
parent 96cbba87ca
commit d9f963f1b0
3 changed files with 71 additions and 26 deletions

View File

@ -649,7 +649,7 @@ async function onSendMembershipTx() {
params: [txRequest],
});
$("confirmTxHash").value = txHash;
logLine("membership tx sent", {
logLine("EDUT ID tx sent", {
quote_id: state.lastQuote.quote_id,
tx_hash: txHash,
payer_wallet: from,
@ -733,7 +733,7 @@ async function onStatus() {
if (out.designation_code) {
$("designationCode").value = out.designation_code;
}
logLine("membership status", out);
logLine("EDUT ID status", out);
refreshOverview(out);
return out;
}
@ -761,7 +761,7 @@ async function onQuote() {
$("quoteId").value = out.quote_id || "";
$("quoteValue").value = out.value || "";
$("quotePayer").value = out.payer_wallet || "";
logLine("membership quote", out);
logLine("EDUT ID quote", out);
return out;
}
@ -795,14 +795,14 @@ async function onConfirmMembership() {
identity_attested_by: out.identity_attested_by || "",
identity_attestation_id: out.identity_attestation_id || "",
};
logLine("membership confirm", out);
logLine("EDUT ID confirm", out);
return out;
}
async function requireMembershipState(actionLabel, opts = {}) {
const status = await onStatus();
if (String(status.status || "").toLowerCase() !== "active") {
throw new Error(`${actionLabel} requires active membership`);
throw new Error(`${actionLabel} requires active EDUT ID`);
}
if (opts.requireOnramp && !isOnrampAttested(status.identity_assurance_level)) {
throw new Error(`${actionLabel} requires onramp_attested identity assurance`);
@ -846,17 +846,17 @@ async function confirmMembershipWithRetry(maxAttempts = 8, intervalMs = 2500) {
await sleep(intervalMs);
}
}
throw lastErr || new Error("membership confirm failed");
throw lastErr || new Error("EDUT ID confirmation failed");
}
async function onRunMembershipFlow() {
setFlowStatus("connecting wallet");
await onConnectWallet();
setFlowStatus("checking membership");
setFlowStatus("checking EDUT ID");
const status = await onStatus();
if (String(status.status || "").toLowerCase() === "active") {
setFlowStatus("membership already active");
setFlowStatus("EDUT ID already active");
return;
}
@ -866,9 +866,9 @@ async function onRunMembershipFlow() {
await onSignIntent();
setFlowStatus("verifying intent");
await onVerify();
setFlowStatus("quoting membership");
setFlowStatus("quoting EDUT ID");
await onQuote();
setFlowStatus("sending membership transaction");
setFlowStatus("sending EDUT ID transaction");
await onSendMembershipTx();
const txHash = $("confirmTxHash").value.trim();
@ -877,14 +877,14 @@ async function onRunMembershipFlow() {
}
setFlowStatus("waiting for chain confirmation");
await waitForTxMined(txHash);
setFlowStatus("confirming membership with API");
setFlowStatus("confirming EDUT ID with API");
await confirmMembershipWithRetry();
setFlowStatus("refreshing status");
const refreshed = await onStatus();
if (isOnrampAttested(refreshed.identity_assurance_level)) {
setFlowStatus("membership flow complete (attested)");
setFlowStatus("EDUT ID flow complete (attested)");
} else {
setFlowStatus("membership active (unattested)");
setFlowStatus("EDUT ID active (unattested)");
}
}
@ -1150,7 +1150,7 @@ async function onQuickActivate() {
async function onQuickRefresh() {
const status = await onStatus();
if (String(status.status || "").toLowerCase() !== "active") {
setFlowStatus("membership inactive");
setFlowStatus("EDUT ID inactive");
return;
}
try {

View File

@ -3,21 +3,21 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>EDUT Launcher</title>
<title>EDUT ID Manager</title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<main class="shell">
<header class="hero">
<h1>EDUT Launcher</h1>
<p>Deterministic infrastructure control surface.</p>
<h1>EDUT ID Manager</h1>
<p>Deterministic identity, access, and control surface.</p>
</header>
<section class="panel">
<h2>Control Surface</h2>
<div class="actions">
<button id="btnQuickConnect">Connect wallet</button>
<button id="btnQuickActivate">Activate membership</button>
<button id="btnQuickActivate">Activate EDUT ID</button>
<button id="btnQuickRefresh">Refresh status + feed</button>
<button id="btnQuickInstallStatus">Governance status</button>
<button id="btnRefreshBalances">Refresh balances</button>
@ -40,7 +40,7 @@
<p id="summaryFunds">-- ETH | -- USDC</p>
</article>
<article class="stat">
<h3>Membership</h3>
<h3><span class="term-inline">EDUT ID<details class="inline-help"><summary aria-label="What is EDUT ID?">?</summary><p>EDUT ID is your one-time identity credential used for checkout, activation, and ownership proof.</p></details></span></h3>
<p id="summaryMembership">unknown</p>
</article>
<article class="stat">
@ -48,11 +48,11 @@
<p id="summaryMode">human_manual</p>
</article>
<article class="stat">
<h3>Designation</h3>
<h3><span class="term-inline">Designation<details class="inline-help"><summary aria-label="What is designation?">?</summary><p>Designation is the protocol reference created during wallet intent and carried through activation evidence.</p></details></span></h3>
<p id="summaryDesignation">-</p>
</article>
<article class="stat">
<h3>Identity Assurance</h3>
<h3><span class="term-inline">Identity Assurance<details class="inline-help"><summary aria-label="What is identity assurance?">?</summary><p>Assurance level records how identity was attested, such as direct crypto flow or on-ramp attestation.</p></details></span></h3>
<p id="summaryAssurance">unknown</p>
</article>
<article class="stat">
@ -110,16 +110,16 @@
</section>
<section class="subpanel">
<h2>Membership Flow Controls</h2>
<h2>EDUT ID Flow Controls</h2>
<div class="actions">
<button id="btnRunMembershipFlow">Run membership flow</button>
<button id="btnRunMembershipFlow">Run EDUT ID flow</button>
<button id="btnConnectWallet">Connect wallet</button>
<button id="btnIntent">Create intent</button>
<button id="btnSignIntent">Sign intent (EIP-712)</button>
<button id="btnVerify">Verify signature</button>
<button id="btnRefreshSession">Refresh session</button>
<button id="btnRevokeSession">Revoke session</button>
<button id="btnStatus">Membership status</button>
<button id="btnStatus">EDUT ID status</button>
</div>
<div class="grid three">
<label>
@ -160,8 +160,8 @@
<div class="actions">
<button id="btnQuote">Get quote</button>
<button id="btnSignPayerProof">Sign payer proof</button>
<button id="btnSendMembershipTx">Send membership tx</button>
<button id="btnConfirmMembership">Confirm membership tx</button>
<button id="btnSendMembershipTx">Send EDUT ID tx</button>
<button id="btnConfirmMembership">Confirm EDUT ID tx</button>
</div>
<div class="grid three">
<label>

View File

@ -53,6 +53,51 @@ body {
color: var(--accent);
}
.term-inline {
display: inline-flex;
align-items: center;
gap: 6px;
}
.inline-help {
position: relative;
display: inline-block;
}
.inline-help > summary {
list-style: none;
width: 16px;
height: 16px;
border: 1px solid var(--line);
border-radius: 50%;
text-align: center;
line-height: 14px;
font-size: 10px;
color: var(--muted);
cursor: pointer;
user-select: none;
background: #0f1828;
}
.inline-help > summary::-webkit-details-marker {
display: none;
}
.inline-help > p {
position: absolute;
top: 20px;
left: 0;
width: min(300px, 80vw);
border: 1px solid var(--line);
border-radius: 8px;
background: #0f1828;
color: var(--text);
padding: 8px;
font-size: 11px;
line-height: 1.45;
z-index: 30;
}
.note {
margin: 0 0 10px;
color: var(--muted);