fix(audit): kill fake install cmds + dead demo CTA; production fonts; scoped error boundary; admin bootstrap seed
All checks were successful
Test Asgard Runner / test (push) Successful in 3s
All checks were successful
Test Asgard Runner / test (push) Successful in 3s
Full-site fake-data audit findings: - SetupWizard showed a curl|sh installer (get.corrosionmgmt.com) and a 'corrosion-agent' binary that don't exist -> real host-agent commands - 'View live demo' CTA on 5 marketing pages linked to a login, not a demo -> honest 'Sign in' - Google Fonts @import was silently dropped from the production CSS bundle (mid-bundle @import) -> <link> tags in index.html; prod was shipping system fallback fonts - App-root ErrorBoundary bricked the entire SPA (incl. marketing) on a single failed fetch until manual reload -> resets on route change + content-scoped boundary inside DashboardLayout so nav chrome survives - Status page KPIs showed fake zeros while the fetch failed -> em dash - Login lacked the forgot-password link (flow already existed end-to-end) - AdminSeedService: fresh DB had schema but no login possible; seeds super-admin + license from ADMIN_* env when users table is empty Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,8 +1,15 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onErrorCaptured } from 'vue'
|
||||
import { ref, watch, onErrorCaptured } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import Icon from '@/components/ds/core/Icon.vue'
|
||||
import Button from '@/components/ds/core/Button.vue'
|
||||
|
||||
withDefaults(defineProps<{
|
||||
/** 'screen' fills the viewport (app root); 'content' fills its container (inside layout chrome) */
|
||||
variant?: 'screen' | 'content'
|
||||
}>(), { variant: 'screen' })
|
||||
|
||||
const route = useRoute()
|
||||
const hasError = ref(false)
|
||||
const errorMessage = ref('')
|
||||
|
||||
@@ -13,6 +20,12 @@ onErrorCaptured((err) => {
|
||||
return false
|
||||
})
|
||||
|
||||
// A failed view must not brick navigation — clear the error when the route changes
|
||||
watch(() => route.fullPath, () => {
|
||||
hasError.value = false
|
||||
errorMessage.value = ''
|
||||
})
|
||||
|
||||
function retry() {
|
||||
hasError.value = false
|
||||
errorMessage.value = ''
|
||||
@@ -21,7 +34,7 @@ function retry() {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="hasError" class="eb-screen">
|
||||
<div v-if="hasError" class="eb-screen" :class="{ 'eb-screen--content': variant === 'content' }">
|
||||
<div class="eb-card">
|
||||
<div class="eb-icon-wrap">
|
||||
<Icon name="triangle-alert" :size="24" :stroke-width="1.75" />
|
||||
@@ -44,6 +57,11 @@ function retry() {
|
||||
padding: var(--space-6);
|
||||
}
|
||||
|
||||
.eb-screen--content {
|
||||
min-height: 60vh;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.eb-card {
|
||||
background: var(--surface-base);
|
||||
box-shadow: var(--ring-default), var(--shadow-md);
|
||||
|
||||
Reference in New Issue
Block a user