From 015ac8184dc3a9632a42bc64268697b83e0feee9 Mon Sep 17 00:00:00 2001 From: G-Fourteen Date: Sat, 1 Nov 2025 08:42:46 -0600 Subject: [PATCH 1/2] Refine landing dependency guidance --- index.html | 72 +++++++++++++++++++++++++------------- landing.js | 27 ++++++++++---- style.css | 26 +++++++------- tests/test_landing_page.py | 5 ++- 4 files changed, 85 insertions(+), 45 deletions(-) diff --git a/index.html b/index.html index 7ec2bcf..cb3c272 100644 --- a/index.html +++ b/index.html @@ -74,53 +74,77 @@

What the lights mean

diff --git a/landing.js b/landing.js index 1094d7d..023b6ef 100644 --- a/landing.js +++ b/landing.js @@ -55,6 +55,18 @@ function formatDependencyList(items) { return `${head} and ${tail}`; } +function getDependencyStatuses(item) { + if (!item) { + return { + passStatus: 'Ready', + failStatus: 'Check settings' + }; + } + + const { passStatus = 'Ready', failStatus = 'Check settings' } = item.dataset; + return { passStatus, failStatus }; +} + function setStatusMessage(message, tone = 'info') { if (!statusMessage) { return; @@ -196,24 +208,25 @@ function updateDependencyUI(results, allMet, { announce = false, missing = [] } return; } - item.dataset.state = result.met ? 'pass' : 'warn'; + item.dataset.state = result.met ? 'pass' : 'fail'; const statusElement = item.querySelector('.dependency-status'); if (statusElement) { - statusElement.textContent = result.met ? 'Ready' : 'Check settings'; + const { passStatus, failStatus } = getDependencyStatuses(item); + statusElement.textContent = result.met ? passStatus : failStatus; } }); } if (dependencyLight) { - dependencyLight.dataset.state = allMet ? 'pass' : 'warn'; + dependencyLight.dataset.state = allMet ? 'pass' : 'fail'; const summary = formatDependencyList(missing); dependencyLight.setAttribute( 'aria-label', allMet ? 'All dependencies satisfied' : summary - ? `Compatibility mode enabled because ${summary} is unavailable` - : 'Compatibility mode enabled. Some requirements are missing' + ? `Missing requirements: ${summary}` + : 'Missing one or more requirements' ); } @@ -223,8 +236,8 @@ function updateDependencyUI(results, allMet, { announce = false, missing = [] } } else { const summary = formatDependencyList(missing); dependencySummary.textContent = summary - ? `We spotted a few red lights (${summary}). Talk to Unity will still launch, but those features may be limited until they turn green.` - : 'We spotted a few red lights. Talk to Unity will still launch, but some features may be limited.'; + ? `Red lights: ${summary}. Follow the fix steps below, then press "Check again."` + : 'Red lights detected. Follow the fix steps below, then press "Check again."'; } } diff --git a/style.css b/style.css index 4e38386..1172f5b 100644 --- a/style.css +++ b/style.css @@ -322,14 +322,14 @@ body[data-app-state='experience'] #landing { box-shadow: 0 0 0 2px rgba(26, 10, 0, 0.5), 0 12px 30px rgba(244, 114, 22, 0.32); } -.dependency-light[data-state='warn'] { - background: linear-gradient(135deg, var(--accent-amber), #b45309); - box-shadow: 0 0 0 2px rgba(26, 10, 0, 0.55), 0 12px 30px rgba(244, 114, 22, 0.36); +.dependency-light[data-state='fail'] { + background: linear-gradient(135deg, var(--accent-red), #7f1d1d); + box-shadow: 0 0 0 2px rgba(40, 0, 0, 0.55), 0 12px 30px rgba(255, 62, 62, 0.38); } -.dependency-item[data-state='warn'] .dependency-name::before { - background: linear-gradient(135deg, var(--accent-amber), #b45309); - box-shadow: 0 0 0 2px rgba(26, 10, 0, 0.55), 0 8px 22px rgba(244, 114, 22, 0.28); +.dependency-item[data-state='fail'] .dependency-name::before { + background: linear-gradient(135deg, var(--accent-red), #7f1d1d); + box-shadow: 0 0 0 2px rgba(40, 0, 0, 0.55), 0 8px 22px rgba(255, 62, 62, 0.28); } .dependency-light[data-state='pass'] { @@ -396,11 +396,17 @@ body[data-app-state='experience'] #landing { color: rgba(255, 210, 210, 0.78); } -.dependency-instructions { +.dependency-message { margin: 0 0 8px; color: rgba(255, 225, 225, 0.82); line-height: 1.7; font-size: 0.98rem; + display: none; +} + +.dependency-item[data-state='pass'] .dependency-message[data-message-type='pass'], +.dependency-item[data-state='fail'] .dependency-message[data-message-type='fail'] { + display: block; } .landing-actions { @@ -821,9 +827,3 @@ body.no-js .mute-indicator { scroll-behavior: auto !important; } } -.dependency-reminder { - margin: 0; - color: rgba(255, 200, 200, 0.75); - font-size: 0.9rem; -} - diff --git a/tests/test_landing_page.py b/tests/test_landing_page.py index 404c520..8322ee4 100644 --- a/tests/test_landing_page.py +++ b/tests/test_landing_page.py @@ -44,7 +44,10 @@ def test_landing_page_structure(): assert statuses.count() == 4 for idx in range(statuses.count()): status_text = statuses.nth(idx).inner_text().strip().lower() - assert status_text in {"checking…", "checking...", "ready", "check settings"} + normalized = status_text.replace("—", "-") + if normalized.startswith("checking"): + continue + assert normalized.startswith("ready") or normalized.startswith("fix") launch_button = page.locator("#launch-app") assert launch_button.inner_text().strip() == "Talk to Unity" From f817a2ab6395282cd913c9ab0a80e36c42ffdfd1 Mon Sep 17 00:00:00 2001 From: G-Fourteen Date: Sat, 1 Nov 2025 08:49:10 -0600 Subject: [PATCH 2/2] Add workflow step to clear Python bytecode --- .github/workflows/main-branch.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/main-branch.yml b/.github/workflows/main-branch.yml index 1590e27..2f6b7ae 100644 --- a/.github/workflows/main-branch.yml +++ b/.github/workflows/main-branch.yml @@ -29,5 +29,10 @@ jobs: - name: Install Playwright browsers run: python -m playwright install --with-deps chromium + - name: Clean up Python bytecode + run: | + find . -type d -name "__pycache__" -exec rm -rf {} + + find . -name "*.pyc" -delete + - name: Run tests run: pytest