feat(web): integration hub audit links + dashboard tips + e2e

Sprint SPRINT_20260415_002_FE_integration_audit_links_and_dashboard_tips.

- integration-hub: integration-detail component + spec with audit links.
- dashboard-v3: component + specs (core/testing + tests/dashboard) with
  getting-started tips.
- audit-log: audit-log-table component + spec.
- policy-governance: client + scope helper.
- deploy-diff: panel + page + service.
- graph: graph-filters component.
- jobengine: scheduler-workers-panel component.
- reachability: reachability-center + witness page components.
- release-investigation: release-investigation-context.
- E2E: audit-consolidation, integrations, policy-orchestrator specs +
  live-auth fixture; live-frontdoor-auth script + playwright outputs.
- Utility scripts: debug-auth, probe-services, scan-pages.
- package.json tweaks.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
master
2026-04-19 14:44:06 +03:00
parent 64ea1f0994
commit 07cdba01cd
30 changed files with 721 additions and 411 deletions

View File

@@ -1,8 +1,17 @@
import { chromium } from 'playwright';
const BASE = 'http://127.1.0.5';
const USERNAME = process.env.STELLAOPS_FRONTDOOR_USERNAME?.trim()
|| process.env.STELLAOPS_ADMIN_USER?.trim()
|| 'admin';
const PASSWORD = process.env.STELLAOPS_FRONTDOOR_PASSWORD?.trim()
|| process.env.STELLAOPS_ADMIN_PASS?.trim();
(async () => {
if (!PASSWORD) {
throw new Error('Set STELLAOPS_FRONTDOOR_PASSWORD or STELLAOPS_ADMIN_PASS before running this script.');
}
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({ ignoreHTTPSErrors: true });
const page = await context.newPage();
@@ -14,8 +23,8 @@ const BASE = 'http://127.1.0.5';
try { await signInBtn.click({ timeout: 5000 }); } catch {}
await page.waitForTimeout(2000);
try {
await page.locator('input[name="Username"], input[type="text"]').first().fill('admin', { timeout: 5000 });
await page.locator('input[type="password"]').first().fill('Admin@Stella2026!');
await page.locator('input[name="Username"], input[type="text"]').first().fill(USERNAME, { timeout: 5000 });
await page.locator('input[type="password"]').first().fill(PASSWORD);
await page.locator('button[type="submit"]').first().click();
await page.waitForTimeout(4000);
} catch (e) { console.log('Login error: ' + e.message); }