{
  "schema_version": "frontend-architecture-report-v1",
  "source": "ai/tools/frontend-architecture/report.mjs",
  "status": "passed",
  "advisory": true,
  "scanned_root": "apps/frontend/src/app",
  "file_count": 79,
  "finding_count": 8,
  "active_finding_count": 7,
  "accepted_finding_count": 1,
  "findings": [
    {
      "severity": "advisory",
      "code": "template_method_binding",
      "path": "apps/frontend/src/app/features/admin-health/components/admin-runtime-health-page.component.html",
      "message": "Template calls a component method inside a property binding; verify it is presentation-only and not rebuilding a semantic view model.",
      "evidence": "[class.role-activity-light--active]=\"isActiveWorkSession(snapshot.runtimeWorkSession)\""
    },
    {
      "severity": "advisory",
      "code": "runtime_socket_payload_in_template",
      "path": "apps/frontend/src/app/features/admin-health/components/admin-runtime-health-page.component.html",
      "message": "Template references runtime/socket payload fields directly; verify GraphQL/Runtime projection remains canonical truth.",
      "evidence": "runtime/socket payload term in template"
    },
    {
      "severity": "accepted",
      "code": "large_page_component",
      "path": "apps/frontend/src/app/features/admin-health/components/admin-runtime-health-page.component.ts",
      "message": "Large page component may be mixing presentation with data/view-model orchestration.",
      "evidence": "1251 lines",
      "allowlist_reason": "Known Runtime Action Center aggregation page. Keep under review; new semantic data-flow should move into facade/computed view models.",
      "follow_up": "cfd-0027"
    },
    {
      "severity": "advisory",
      "code": "template_method_binding",
      "path": "apps/frontend/src/app/features/home/components/home-panel.component.html",
      "message": "Template calls a component method inside a property binding; verify it is presentation-only and not rebuilding a semantic view model.",
      "evidence": "[placeholder]=\"selectedAutocompleteOption()\""
    },
    {
      "severity": "advisory",
      "code": "graphql_service_in_component",
      "path": "apps/frontend/src/app/features/theme/components/theme-panel.component.ts",
      "message": "Component appears to inject generated GraphQL service; prefer service/facade data acquisition.",
      "evidence": "Generated GraphQL service reference"
    },
    {
      "severity": "advisory",
      "code": "template_method_binding",
      "path": "apps/frontend/src/app/layout/components/app-header.component.html",
      "message": "Template calls a component method inside a property binding; verify it is presentation-only and not rebuilding a semantic view model.",
      "evidence": "[class.app-header--mobile-hidden]=\"mobileTopNavHidden()\""
    },
    {
      "severity": "advisory",
      "code": "template_method_binding",
      "path": "apps/frontend/src/app/layout/components/app-shell.component.html",
      "message": "Template calls a component method inside a property binding; verify it is presentation-only and not rebuilding a semantic view model.",
      "evidence": "[class.max-w-none]=\"showDevConsole()\""
    },
    {
      "severity": "advisory",
      "code": "template_method_binding",
      "path": "apps/frontend/src/app/layout/components/pull-to-refresh.component.html",
      "message": "Template calls a component method inside a property binding; verify it is presentation-only and not rebuilding a semantic view model.",
      "evidence": "[class.pull-refresh--ready]=\"ready()\""
    }
  ],
  "rule": "UI components render typed view models; services/facades/signals own data/state orchestration."
}
