{
  "schema_version": "1.0.0",
  "scanner": {
    "name": "global-capability-catalog",
    "version": "0.1.0"
  },
  "repo": {
    "id": "github-recent__mbarbine__platphorm-kanban",
    "name": "mbarbine__platphorm-kanban",
    "path": "/Users/bwm.barbinewarnermichael/Documents/github/repositories/github-recent/mbarbine__platphorm-kanban",
    "relative_path": "github-recent/mbarbine__platphorm-kanban",
    "remote_url": "git@github.com:mbarbine/platphorm-kanban.git",
    "default_branch": "main",
    "current_commit": "0b7f8d08a3979a71b0502ecc0a6f9a5055ddad9e"
  },
  "languages": [
    {
      "language": "TypeScript",
      "files": 207,
      "bytes": 922142
    },
    {
      "language": "YAML",
      "files": 1,
      "bytes": 281488
    },
    {
      "language": "Markdown",
      "files": 10,
      "bytes": 29118
    },
    {
      "language": "JSON",
      "files": 5,
      "bytes": 7799
    },
    {
      "language": "JavaScript",
      "files": 4,
      "bytes": 7445
    },
    {
      "language": "CSS",
      "files": 2,
      "bytes": 5619
    },
    {
      "language": "Dockerfile",
      "files": 1,
      "bytes": 929
    }
  ],
  "frameworks": [
    {
      "name": "Next.js",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "React",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Tailwind CSS",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    },
    {
      "name": "Vitest",
      "confidence": "high",
      "evidence_paths": [
        "package.json"
      ]
    }
  ],
  "packages": {
    "package_manager": "pnpm",
    "manifests": [
      {
        "path": "package.json",
        "name": "platphormnews-kanban",
        "version": "1.0.0",
        "scripts": {
          "build": "next build",
          "dev": "next dev",
          "lint": "eslint .",
          "start": "next start",
          "test": "vitest run",
          "test:watch": "vitest",
          "test:coverage": "vitest run --coverage",
          "typecheck": "tsc --noEmit"
        },
        "dependencies": {
          "@hello-pangea/dnd": "latest",
          "@hookform/resolvers": "^3.10.0",
          "@radix-ui/react-accordion": "1.2.2",
          "@radix-ui/react-alert-dialog": "1.1.4",
          "@radix-ui/react-aspect-ratio": "1.1.1",
          "@radix-ui/react-avatar": "1.1.2",
          "@radix-ui/react-checkbox": "1.1.3",
          "@radix-ui/react-collapsible": "1.1.2",
          "@radix-ui/react-context-menu": "2.2.4",
          "@radix-ui/react-dialog": "1.1.4",
          "@radix-ui/react-dropdown-menu": "2.1.4",
          "@radix-ui/react-hover-card": "1.1.4",
          "@radix-ui/react-label": "2.1.1",
          "@radix-ui/react-menubar": "1.1.4",
          "@radix-ui/react-navigation-menu": "1.2.3",
          "@radix-ui/react-popover": "1.1.4",
          "@radix-ui/react-progress": "1.1.1",
          "@radix-ui/react-radio-group": "1.2.2",
          "@radix-ui/react-scroll-area": "1.2.2",
          "@radix-ui/react-select": "2.1.4",
          "@radix-ui/react-separator": "1.1.1",
          "@radix-ui/react-slider": "1.2.2",
          "@radix-ui/react-slot": "1.1.1",
          "@radix-ui/react-switch": "1.1.2",
          "@radix-ui/react-tabs": "1.1.2",
          "@radix-ui/react-toast": "1.2.4",
          "@radix-ui/react-toggle": "1.1.1",
          "@radix-ui/react-toggle-group": "1.1.1",
          "@radix-ui/react-tooltip": "1.1.6",
          "@vercel/analytics": "^1.6.1",
          "@vercel/speed-insights": "^1.3.1",
          "autoprefixer": "^10.5.0",
          "botid": "^1.5.11",
          "class-variance-authority": "^0.7.1",
          "clsx": "^2.1.1",
          "cmdk": "1.0.4",
          "date-fns": "4.1.0",
          "embla-carousel-react": "8.5.1",
          "input-otp": "1.4.1",
          "lucide-react": "^0.454.0",
          "next": "16.1.6",
          "next-themes": "latest",
          "react": "^19.2.5",
          "react-day-picker": "9.8.0",
          "react-dom": "^19.2.5",
          "react-hook-form": "^7.73.1",
          "react-resizable-panels": "^2.1.9",
          "recharts": "2.15.4",
          "sonner": "^1.7.4",
          "tailwind-merge": "^2.6.1",
          "tailwindcss-animate": "^1.0.7",
          "vaul": "^1.1.2",
          "zod": "3.25.76"
        },
        "dev_dependencies": {
          "@testing-library/jest-dom": "^6.9.1",
          "@testing-library/react": "^16.3.2",
          "@testing-library/user-event": "^14.6.1",
          "@types/node": "^22.19.17",
          "@types/react": "^19.2.14",
          "@types/react-dom": "^19.2.3",
          "@vitejs/plugin-react": "^5.2.0",
          "@vitest/coverage-v8": "^4.1.5",
          "eslint": "^9.39.4",
          "eslint-config-next": "^16.2.4",
          "jsdom": "^28.1.0",
          "postcss": "^8.5.10",
          "tailwindcss": "^3.4.19",
          "typescript": "^5.9.3",
          "vitest": "^4.1.5"
        }
      }
    ]
  },
  "routes": {
    "api_routes": [
      {
        "route": "/docs",
        "source_path": "app/api/docs/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/health",
        "source_path": "app/api/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/mcp",
        "source_path": "app/api/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/activities",
        "source_path": "app/api/v1/activities/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/ascii",
        "source_path": "app/api/v1/ascii/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/board",
        "source_path": "app/api/v1/board/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "PUT"
        ]
      },
      {
        "route": "/v1/boards/[id]/columns",
        "source_path": "app/api/v1/boards/[id]/columns/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/boards/[id]/export",
        "source_path": "app/api/v1/boards/[id]/export/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/boards/[id]",
        "source_path": "app/api/v1/boards/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "DELETE",
          "GET",
          "OPTIONS",
          "PUT"
        ]
      },
      {
        "route": "/v1/boards/import",
        "source_path": "app/api/v1/boards/import/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/boards",
        "source_path": "app/api/v1/boards/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/calendar/mcp",
        "source_path": "app/api/v1/calendar/mcp/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/calendar/projects",
        "source_path": "app/api/v1/calendar/projects/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/calendar",
        "source_path": "app/api/v1/calendar/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/columns/[id]/reorder",
        "source_path": "app/api/v1/columns/[id]/reorder/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/columns/[id]",
        "source_path": "app/api/v1/columns/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "DELETE",
          "OPTIONS",
          "PUT"
        ]
      },
      {
        "route": "/v1/events",
        "source_path": "app/api/v1/events/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/feeds",
        "source_path": "app/api/v1/feeds/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/feeds/sync",
        "source_path": "app/api/v1/feeds/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/health",
        "source_path": "app/api/v1/health/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/network/graph",
        "source_path": "app/api/v1/network/graph/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/network/graph/sync",
        "source_path": "app/api/v1/network/graph/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/network/route-compliance",
        "source_path": "app/api/v1/network/route-compliance/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/network/sites",
        "source_path": "app/api/v1/network/sites/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/network/trusted-domains",
        "source_path": "app/api/v1/network/trusted-domains/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/onboard",
        "source_path": "app/api/v1/onboard/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/openapi.json",
        "source_path": "app/api/v1/openapi.json/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/projects",
        "source_path": "app/api/v1/projects/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/projects/sync",
        "source_path": "app/api/v1/projects/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/reports/decks",
        "source_path": "app/api/v1/reports/decks/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/reports/docs",
        "source_path": "app/api/v1/reports/docs/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/reports/sheets",
        "source_path": "app/api/v1/reports/sheets/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/sitemaps/sync",
        "source_path": "app/api/v1/sitemaps/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/sync",
        "source_path": "app/api/v1/sync/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/sync/status",
        "source_path": "app/api/v1/sync/status/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      },
      {
        "route": "/v1/tasks/[id]/complete",
        "source_path": "app/api/v1/tasks/[id]/complete/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tasks/[id]/history",
        "source_path": "app/api/v1/tasks/[id]/history/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS"
        ]
      },
      {
        "route": "/v1/tasks/[id]/move",
        "source_path": "app/api/v1/tasks/[id]/move/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tasks/[id]/reopen",
        "source_path": "app/api/v1/tasks/[id]/reopen/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tasks/[id]",
        "source_path": "app/api/v1/tasks/[id]/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "DELETE",
          "GET",
          "OPTIONS",
          "PATCH",
          "POST"
        ]
      },
      {
        "route": "/v1/tasks",
        "source_path": "app/api/v1/tasks/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tests/browserops",
        "source_path": "app/api/v1/tests/browserops/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tests/evals",
        "source_path": "app/api/v1/tests/evals/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tests/sandbox",
        "source_path": "app/api/v1/tests/sandbox/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/v1/tests/webhooklab",
        "source_path": "app/api/v1/tests/webhooklab/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/webhooks/platphormnews",
        "source_path": "app/api/webhooks/platphormnews/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET",
          "OPTIONS",
          "POST"
        ]
      },
      {
        "route": "/webhooks",
        "source_path": "app/api/webhooks/route.ts",
        "kind": "next-app-api-route",
        "methods": [
          "GET"
        ]
      }
    ],
    "app_routes": [
      {
        "route": "/faq",
        "source_path": "app/faq/page.tsx",
        "kind": "next-app-page",
        "methods": [
          "GET"
        ]
      }
    ]
  },
  "components": [
    {
      "name": "task-detail-sidebar.test",
      "kind": "ui-component",
      "source_path": "__tests__/components/task-detail-sidebar.test.tsx"
    },
    {
      "name": "user-settings.test",
      "kind": "ui-component",
      "source_path": "__tests__/components/user-settings.test.tsx"
    },
    {
      "name": "automation-rules",
      "kind": "ui-component",
      "source_path": "components/automation-rules.tsx"
    },
    {
      "name": "calendar-integration",
      "kind": "ui-component",
      "source_path": "components/calendar-integration.tsx"
    },
    {
      "name": "column",
      "kind": "ui-component",
      "source_path": "components/column.tsx"
    },
    {
      "name": "faq",
      "kind": "ui-component",
      "source_path": "components/faq.tsx"
    },
    {
      "name": "kanban-board",
      "kind": "ui-component",
      "source_path": "components/kanban-board.tsx"
    },
    {
      "name": "network-breadcrumbs",
      "kind": "ui-component",
      "source_path": "components/network-breadcrumbs.tsx"
    },
    {
      "name": "ph3ar-modal",
      "kind": "ui-component",
      "source_path": "components/ph3ar-modal.tsx"
    },
    {
      "name": "task-card",
      "kind": "ui-component",
      "source_path": "components/task-card.tsx"
    },
    {
      "name": "task-detail-sidebar",
      "kind": "ui-component",
      "source_path": "components/task-detail-sidebar.tsx"
    },
    {
      "name": "theme-provider",
      "kind": "ui-component",
      "source_path": "components/theme-provider.tsx"
    },
    {
      "name": "theme-toggle",
      "kind": "ui-component",
      "source_path": "components/theme-toggle.tsx"
    },
    {
      "name": "accordion",
      "kind": "ui-component",
      "source_path": "components/ui/accordion.tsx"
    },
    {
      "name": "alert-dialog",
      "kind": "ui-component",
      "source_path": "components/ui/alert-dialog.tsx"
    },
    {
      "name": "alert",
      "kind": "ui-component",
      "source_path": "components/ui/alert.tsx"
    },
    {
      "name": "aspect-ratio",
      "kind": "ui-component",
      "source_path": "components/ui/aspect-ratio.tsx"
    },
    {
      "name": "avatar",
      "kind": "ui-component",
      "source_path": "components/ui/avatar.tsx"
    },
    {
      "name": "badge",
      "kind": "ui-component",
      "source_path": "components/ui/badge.tsx"
    },
    {
      "name": "breadcrumb",
      "kind": "ui-component",
      "source_path": "components/ui/breadcrumb.tsx"
    },
    {
      "name": "button-group",
      "kind": "ui-component",
      "source_path": "components/ui/button-group.tsx"
    },
    {
      "name": "button",
      "kind": "ui-component",
      "source_path": "components/ui/button.tsx"
    },
    {
      "name": "calendar",
      "kind": "ui-component",
      "source_path": "components/ui/calendar.tsx"
    },
    {
      "name": "card",
      "kind": "ui-component",
      "source_path": "components/ui/card.tsx"
    },
    {
      "name": "carousel",
      "kind": "ui-component",
      "source_path": "components/ui/carousel.tsx"
    },
    {
      "name": "chart",
      "kind": "ui-component",
      "source_path": "components/ui/chart.tsx"
    },
    {
      "name": "checkbox",
      "kind": "ui-component",
      "source_path": "components/ui/checkbox.tsx"
    },
    {
      "name": "collapsible",
      "kind": "ui-component",
      "source_path": "components/ui/collapsible.tsx"
    },
    {
      "name": "command",
      "kind": "ui-component",
      "source_path": "components/ui/command.tsx"
    },
    {
      "name": "context-menu",
      "kind": "ui-component",
      "source_path": "components/ui/context-menu.tsx"
    },
    {
      "name": "dialog",
      "kind": "ui-component",
      "source_path": "components/ui/dialog.tsx"
    },
    {
      "name": "drawer",
      "kind": "ui-component",
      "source_path": "components/ui/drawer.tsx"
    },
    {
      "name": "dropdown-menu",
      "kind": "ui-component",
      "source_path": "components/ui/dropdown-menu.tsx"
    },
    {
      "name": "empty",
      "kind": "ui-component",
      "source_path": "components/ui/empty.tsx"
    },
    {
      "name": "field",
      "kind": "ui-component",
      "source_path": "components/ui/field.tsx"
    },
    {
      "name": "form",
      "kind": "ui-component",
      "source_path": "components/ui/form.tsx"
    },
    {
      "name": "hover-card",
      "kind": "ui-component",
      "source_path": "components/ui/hover-card.tsx"
    },
    {
      "name": "input-group",
      "kind": "ui-component",
      "source_path": "components/ui/input-group.tsx"
    },
    {
      "name": "input-otp",
      "kind": "ui-component",
      "source_path": "components/ui/input-otp.tsx"
    },
    {
      "name": "input",
      "kind": "ui-component",
      "source_path": "components/ui/input.tsx"
    },
    {
      "name": "item",
      "kind": "ui-component",
      "source_path": "components/ui/item.tsx"
    },
    {
      "name": "kbd",
      "kind": "ui-component",
      "source_path": "components/ui/kbd.tsx"
    },
    {
      "name": "label",
      "kind": "ui-component",
      "source_path": "components/ui/label.tsx"
    },
    {
      "name": "menubar",
      "kind": "ui-component",
      "source_path": "components/ui/menubar.tsx"
    },
    {
      "name": "navigation-menu",
      "kind": "ui-component",
      "source_path": "components/ui/navigation-menu.tsx"
    },
    {
      "name": "pagination",
      "kind": "ui-component",
      "source_path": "components/ui/pagination.tsx"
    },
    {
      "name": "popover",
      "kind": "ui-component",
      "source_path": "components/ui/popover.tsx"
    },
    {
      "name": "progress",
      "kind": "ui-component",
      "source_path": "components/ui/progress.tsx"
    },
    {
      "name": "radio-group",
      "kind": "ui-component",
      "source_path": "components/ui/radio-group.tsx"
    },
    {
      "name": "resizable",
      "kind": "ui-component",
      "source_path": "components/ui/resizable.tsx"
    },
    {
      "name": "scroll-area",
      "kind": "ui-component",
      "source_path": "components/ui/scroll-area.tsx"
    },
    {
      "name": "select",
      "kind": "ui-component",
      "source_path": "components/ui/select.tsx"
    },
    {
      "name": "separator",
      "kind": "ui-component",
      "source_path": "components/ui/separator.tsx"
    },
    {
      "name": "sheet",
      "kind": "ui-component",
      "source_path": "components/ui/sheet.tsx"
    },
    {
      "name": "sidebar",
      "kind": "ui-component",
      "source_path": "components/ui/sidebar.tsx"
    },
    {
      "name": "skeleton",
      "kind": "ui-component",
      "source_path": "components/ui/skeleton.tsx"
    },
    {
      "name": "slider",
      "kind": "ui-component",
      "source_path": "components/ui/slider.tsx"
    },
    {
      "name": "sonner",
      "kind": "ui-component",
      "source_path": "components/ui/sonner.tsx"
    },
    {
      "name": "spinner",
      "kind": "ui-component",
      "source_path": "components/ui/spinner.tsx"
    },
    {
      "name": "switch",
      "kind": "ui-component",
      "source_path": "components/ui/switch.tsx"
    },
    {
      "name": "table",
      "kind": "ui-component",
      "source_path": "components/ui/table.tsx"
    },
    {
      "name": "tabs",
      "kind": "ui-component",
      "source_path": "components/ui/tabs.tsx"
    },
    {
      "name": "textarea",
      "kind": "ui-component",
      "source_path": "components/ui/textarea.tsx"
    },
    {
      "name": "toast",
      "kind": "ui-component",
      "source_path": "components/ui/toast.tsx"
    },
    {
      "name": "toaster",
      "kind": "ui-component",
      "source_path": "components/ui/toaster.tsx"
    },
    {
      "name": "toggle-group",
      "kind": "ui-component",
      "source_path": "components/ui/toggle-group.tsx"
    },
    {
      "name": "toggle",
      "kind": "ui-component",
      "source_path": "components/ui/toggle.tsx"
    },
    {
      "name": "tooltip",
      "kind": "ui-component",
      "source_path": "components/ui/tooltip.tsx"
    },
    {
      "name": "use-mobile",
      "kind": "ui-component",
      "source_path": "components/ui/use-mobile.tsx"
    },
    {
      "name": "user-settings",
      "kind": "ui-component",
      "source_path": "components/user-settings.tsx"
    }
  ],
  "data_models": [],
  "database": {
    "databases": [],
    "schemas": [],
    "migrations": []
  },
  "tests": [
    {
      "name": "activities.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/activities.test.ts"
    },
    {
      "name": "ascii.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/ascii.test.ts"
    },
    {
      "name": "board.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/board.test.ts"
    },
    {
      "name": "calendar-mcp.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/calendar-mcp.test.ts"
    },
    {
      "name": "calendar-projects.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/calendar-projects.test.ts"
    },
    {
      "name": "calendar.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/calendar.test.ts"
    },
    {
      "name": "discovery.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/discovery.test.ts"
    },
    {
      "name": "docs.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/docs.test.ts"
    },
    {
      "name": "events.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/events.test.ts"
    },
    {
      "name": "feed.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/feed.test.ts"
    },
    {
      "name": "health.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/health.test.ts"
    },
    {
      "name": "mcp-tools.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/mcp-tools.test.ts"
    },
    {
      "name": "mcp.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/mcp.test.ts"
    },
    {
      "name": "onboard.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/onboard.test.ts"
    },
    {
      "name": "openapi.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/openapi.test.ts"
    },
    {
      "name": "sitemap.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/sitemap.test.ts"
    },
    {
      "name": "tasks-id.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/tasks-id.test.ts"
    },
    {
      "name": "tasks.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/tasks.test.ts"
    },
    {
      "name": "webhook.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/api/webhook.test.ts"
    },
    {
      "name": "task-detail-sidebar.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/components/task-detail-sidebar.test.tsx"
    },
    {
      "name": "user-settings.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/components/user-settings.test.tsx"
    },
    {
      "name": "use-keyboard-shortcuts.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/hooks/use-keyboard-shortcuts.test.tsx"
    },
    {
      "name": "use-mobile.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/hooks/use-mobile.test.tsx"
    },
    {
      "name": "use-toast.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/hooks/use-toast.test.ts"
    },
    {
      "name": "use-toast.test.tsx",
      "kind": "unit-or-integration",
      "source_path": "__tests__/hooks/use-toast.test.tsx"
    },
    {
      "name": "board-workflow.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/integration/board-workflow.test.ts"
    },
    {
      "name": "calendar-sync.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/integration/calendar-sync.test.ts"
    },
    {
      "name": "mcp-workflow.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/integration/mcp-workflow.test.ts"
    },
    {
      "name": "automation.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/automation.test.ts"
    },
    {
      "name": "board-store.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/board-store.test.ts"
    },
    {
      "name": "constants.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/constants.test.ts"
    },
    {
      "name": "json-ld.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/json-ld.test.ts"
    },
    {
      "name": "logger.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/logger.test.ts"
    },
    {
      "name": "mcp-client-extended.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/mcp-client-extended.test.ts"
    },
    {
      "name": "mcp-client.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/mcp-client.test.ts"
    },
    {
      "name": "mcp-register.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/mcp-register.test.ts"
    },
    {
      "name": "public-calendar-store.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/public-calendar-store.test.ts"
    },
    {
      "name": "storage.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/storage.test.ts"
    },
    {
      "name": "utils.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/utils.test.ts"
    },
    {
      "name": "vercel.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/lib/vercel.test.ts"
    },
    {
      "name": "proxy.test.ts",
      "kind": "unit-or-integration",
      "source_path": "__tests__/proxy.test.ts"
    }
  ],
  "ci": {
    "workflows": []
  },
  "containers": {
    "dockerfiles": [
      {
        "path": "Dockerfile"
      }
    ],
    "compose_files": []
  },
  "env": {
    "example_files": [],
    "variables": [
      {
        "name": "BOARD_STATE_SECRET",
        "source_paths": [
          "__tests__/lib/board-store.test.ts",
          "lib/board-store.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "DATABASE_URL",
        "source_paths": [
          "app/api/v1/health/route.ts",
          "app/api/v1/sync/status/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "NEXT_PUBLIC_VERCEL_ANALYTICS_ID",
        "source_paths": [
          "lib/constants.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NEXT_RUNTIME",
        "source_paths": [
          "instrumentation.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "NODE_ENV",
        "source_paths": [
          "__tests__/api/webhook.test.ts",
          "app/api/v1/health/route.ts",
          "app/api/webhooks/platphormnews/route.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "PLATPHORM_API_KEY",
        "source_paths": [
          "__tests__/api/calendar-projects.test.ts",
          "__tests__/api/calendar.test.ts",
          "__tests__/api/onboard.test.ts",
          "__tests__/api/tasks.test.ts",
          "__tests__/proxy.test.ts",
          "app/api/v1/calendar/mcp/route.ts",
          "app/api/v1/calendar/projects/route.ts",
          "app/api/v1/calendar/route.ts",
          "app/api/v1/onboard/route.ts",
          "lib/platform-api.ts",
          "proxy.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "PLATPHORMNEWS_WEBHOOK_SECRET",
        "source_paths": [
          "__tests__/api/webhook.test.ts",
          "__tests__/integration/calendar-sync.test.ts",
          "app/api/webhooks/platphormnews/route.ts"
        ],
        "likely_secret": true
      },
      {
        "name": "VERCEL_ENV",
        "source_paths": [
          "__tests__/lib/vercel.test.ts",
          "app/api/v1/health/route.ts",
          "lib/constants.ts",
          "lib/vercel.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_GIT_COMMIT_SHA",
        "source_paths": [
          "__tests__/lib/vercel.test.ts",
          "lib/constants.ts",
          "lib/vercel.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_REGION",
        "source_paths": [
          "__tests__/lib/vercel.test.ts",
          "lib/vercel.ts"
        ],
        "likely_secret": false
      },
      {
        "name": "VERCEL_URL",
        "source_paths": [
          "__tests__/lib/vercel.test.ts",
          "lib/constants.ts",
          "lib/vercel.ts"
        ],
        "likely_secret": false
      }
    ]
  },
  "configs": [
    {
      "path": "__tests__/lib/vercel.test.ts"
    },
    {
      "path": "eslint.config.mjs"
    },
    {
      "path": "lib/vercel.ts"
    },
    {
      "path": "next.config.mjs"
    },
    {
      "path": "package.json"
    },
    {
      "path": "postcss.config.mjs"
    },
    {
      "path": "tailwind.config.ts"
    },
    {
      "path": "tsconfig.json"
    },
    {
      "path": "vercel.json"
    }
  ],
  "docs": {
    "readme_paths": [
      {
        "path": "README.md"
      }
    ],
    "doc_paths": [],
    "llms_context_paths": []
  },
  "discovery_files": {
    "openapi": [],
    "mcp": [
      {
        "path": "app/api/mcp/route.ts"
      }
    ],
    "llms": [],
    "sitemaps": [],
    "feeds": [],
    "well_known": [
      {
        "path": "app/.well-known/agent.json/route.ts"
      },
      {
        "path": "app/.well-known/agents.json/route.ts"
      },
      {
        "path": "app/.well-known/ai-plugin.json/route.ts"
      },
      {
        "path": "app/.well-known/links.json/route.ts"
      },
      {
        "path": "app/.well-known/mcp.json/route.ts"
      },
      {
        "path": "app/.well-known/security.txt/route.ts"
      },
      {
        "path": "app/.well-known/trust-policy.json/route.ts"
      },
      {
        "path": "app/.well-known/trust.json/route.ts"
      },
      {
        "path": "public/.well-known/security.txt"
      }
    ],
    "robots": [],
    "manifests": []
  },
  "integrations": [
    {
      "name": "PlatPhorm",
      "confidence": "medium",
      "evidence_paths": [
        "__tests__/api/calendar-projects.test.ts",
        "__tests__/api/calendar.test.ts",
        "__tests__/api/onboard.test.ts",
        "__tests__/api/tasks.test.ts",
        "__tests__/api/webhook.test.ts",
        "__tests__/integration/calendar-sync.test.ts",
        "__tests__/proxy.test.ts",
        "app/.well-known/trust.json/route.ts",
        "app/api/mcp/route.ts",
        "app/api/v1/calendar/mcp/route.ts",
        "app/api/webhooks/platphormnews/route.ts",
        "INTEGRATION.md",
        "package.json",
        "README.md"
      ]
    },
    {
      "name": "Postgres",
      "confidence": "medium",
      "evidence_paths": [
        "app/api/v1/health/route.ts",
        "app/api/v1/sync/status/route.ts",
        "package.json"
      ]
    },
    {
      "name": "Vercel",
      "confidence": "medium",
      "evidence_paths": [
        "__tests__/lib/vercel.test.ts",
        "app/api/v1/health/route.ts",
        "app/layout.tsx",
        "lib/constants.ts",
        "lib/vercel.ts",
        "package.json",
        "pnpm-lock.yaml"
      ]
    }
  ],
  "license": {
    "spdx": null,
    "paths": [
      {
        "path": "LICENSE.txt"
      }
    ]
  },
  "comments": [
    {
      "kind": "todo",
      "source_path": "__tests__/api/mcp-tools.test.ts",
      "line": 32,
      "text": "json: async () => ({ columns: [{ id: \"todo\", tasks: [{ id: \"t1\", title: \"Task 1\" }] }] }),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/api/mcp-tools.test.ts",
      "line": 55,
      "text": "arguments: { projectId: \"default\", columnId: \"todo\" },"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/api/mcp-tools.test.ts",
      "line": 88,
      "text": "arguments: { title: \"New Task\", columnId: \"todo\", priority: \"high\" },"
    },
    {
      "kind": "unsafe",
      "source_path": "__tests__/api/tasks-id.test.ts",
      "line": 166,
      "text": "const req = makeReq(\"PATCH\", \"task-abc\", { id: \"tampered-id\", title: \"Hack\" });"
    },
    {
      "kind": "deprecated",
      "source_path": "__tests__/components/user-settings.test.tsx",
      "line": 18,
      "text": "addListener: vi.fn(), // Deprecated"
    },
    {
      "kind": "deprecated",
      "source_path": "__tests__/components/user-settings.test.tsx",
      "line": 19,
      "text": "removeListener: vi.fn(), // Deprecated"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 45,
      "text": "const todo = col(\"col-todo\", \"To Do\", [makeTask(\"t1\", \"Write docs\", \"To Do\")]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 80,
      "text": "await PUT(makePutReq([todo, inProgress], [automationRule]) as unknown as import(\"next/server\").NextRequest);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 88,
      "text": "expect(columns[0].id).toBe(\"col-todo\");"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 95,
      "text": "await PUT(makePutReq([todo, inProgress], []) as unknown as import(\"next/server\").NextRequest);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 105,
      "text": "const putJson = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 111,
      "text": "const res1 = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 115,
      "text": "const res2 = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 120,
      "text": "const res1 = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 121,
      "text": "const modifiedTodo = col(\"col-todo\", \"To Do\", [makeTask(\"t-new\", \"New Task\", \"To Do\")]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 127,
      "text": "const res1 = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 128,
      "text": "const res2 = (await (await PUT(makePutReq([todo], [automationRule]) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 133,
      "text": "await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 152,
      "text": "const column = col(\"col-todo\", \"To Do\", [taskWithSubtasks]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 172,
      "text": "const column = col(\"col-todo\", \"To Do\", [taskWithFields]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 185,
      "text": "saveBoard([todo, inProgress], [automationRule]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 190,
      "text": "expect(loaded!.columns[0].id).toBe(\"col-todo\");"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 194,
      "text": "saveBoard([todo], [automationRule]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 224,
      "text": "columns: [todo, done],"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 245,
      "text": "saveBoard([todo], []);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 252,
      "text": "saveBoard([todo], [automationRule]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 290,
      "text": "const putJson = (await (await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest)).json()) as Record<string, unknown>;"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 298,
      "text": "saveBoard([todo, inProgress, done], [automationRule]);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 334,
      "text": "body: JSON.stringify({ columns: [todo], rules: [], unknownField: \"ignored\" }),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 346,
      "text": "await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/board-workflow.test.ts",
      "line": 357,
      "text": "await PUT(makePutReq([todo], []) as unknown as import(\"next/server\").NextRequest);"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/mcp-workflow.test.ts",
      "line": 33,
      "text": "{ id: \"todo\", tasks: [{ id: \"t1\", title: \"Integration task\", status: \"To Do\" }] },"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/integration/mcp-workflow.test.ts",
      "line": 128,
      "text": "arguments: { title: \"Created via MCP\", columnId: \"todo\" },"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 215,
      "text": "const todo = makeColumn(\"col-todo\", \"To Do\");"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 221,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 239,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 262,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 278,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 311,
      "text": "const cols = [makeColumn(\"col-todo\", \"To Do\", [task])];"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 326,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 373,
      "text": "const cols = [makeColumn(\"col-todo\", \"To Do\", [task])];"
    },
    {
      "kind": "todo",
      "source_path": "__tests__/lib/automation.test.ts",
      "line": 384,
      "text": "makeColumn(\"col-todo\", \"To Do\", [task]),"
    },
    {
      "kind": "security",
      "source_path": "__tests__/proxy.test.ts",
      "line": 155,
      "text": "expect(res.body).toContain(\"Request blocked by security policy\");"
    },
    {
      "kind": "security",
      "source_path": "__tests__/proxy.test.ts",
      "line": 189,
      "text": "describe(\"Security Signal Forwarding\", () => {"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 1,
      "text": "## 2026-03-31 - [Defense in Depth] Added X-XSS-Protection security header"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 2,
      "text": "**Vulnerability:** The application was missing the `X-XSS-Protection` header in its global security headers. While modern browsers (like Chrome, Edge, and Firefox) largely ignore this header in favor of a strong Content Security Policy (CSP"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 3,
      "text": "**Learning:** Security headers should be as comprehensive as possible. Even though a strong CSP exists, adding `X-XSS-Protection: 1; mode=block` ensures that if a legacy browser is used, it will actively block the page rendering if an XSS a"
    },
    {
      "kind": "security",
      "source_path": ".jules/sentinel.md",
      "line": 4,
      "text": "**Prevention:** Always verify that a comprehensive suite of security headers (like HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy, and X-XSS-Protection) are included by default in the Next.js `headers()` "
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 7,
      "text": "return new NextResponse(`Contact: mailto:security@platphormnews.com"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/security.txt/route.ts",
      "line": 10,
      "text": "Canonical: ${SITE.url}/.well-known/security.txt"
    },
    {
      "kind": "security",
      "source_path": "app/.well-known/trust.json/route.ts",
      "line": 53,
      "text": "securityContact: \"security@platphormnews.com\","
    },
    {
      "kind": "todo",
      "source_path": "app/api/mcp/route.ts",
      "line": 110,
      "text": "description: \"Column ID to filter tasks by (e.g. 'todo', 'in-progress', 'done')\","
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/board/route.ts",
      "line": 7,
      "text": "// Security"
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/board/route.ts",
      "line": 10,
      "text": "// • Transport security via HTTPS."
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/network/route-compliance/route.ts",
      "line": 24,
      "text": "\"/.well-known/security.txt\","
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/openapi.json/route.ts",
      "line": 253,
      "text": "security: [{ BearerAuth: [] }, { PlatphormApiKey: [] }],"
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/openapi.json/route.ts",
      "line": 294,
      "text": "security: [{ BearerAuth: [] }, { PlatphormApiKey: [] }],"
    },
    {
      "kind": "security",
      "source_path": "app/api/v1/openapi.json/route.ts",
      "line": 310,
      "text": "security: [{ BearerAuth: [] }, { PlatphormApiKey: [] }],"
    },
    {
      "kind": "todo",
      "source_path": "app/api/v1/tasks/route.ts",
      "line": 92,
      "text": "c.title.toLowerCase().includes(\"todo\") ||"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 13,
      "text": "security:"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 32,
      "text": "security:"
    },
    {
      "kind": "security",
      "source_path": "app/openapi.yaml/route.ts",
      "line": 49,
      "text": "security:"
    },
    {
      "kind": "security",
      "source_path": "lib/board-store.ts",
      "line": 11,
      "text": "// Security"
    },
    {
      "kind": "todo",
      "source_path": "lib/kanban-api-handlers.ts",
      "line": 194,
      "text": "const todo = state?.columns.find((column) => /to do|incoming|backlog/i.test(column.title))?.id;"
    },
    {
      "kind": "todo",
      "source_path": "lib/kanban-api-handlers.ts",
      "line": 195,
      "text": "if (!todo) return fail(\"not_found\", \"Open work column not found\", 404, { projectId }, { headers: corsHeaders(origin) });"
    },
    {
      "kind": "todo",
      "source_path": "lib/kanban-api-handlers.ts",
      "line": 196,
      "text": "return moveTask(new Request(req.url, { method: \"POST\", headers: req.headers, body: JSON.stringify({ targetColumnId: todo }) }) as unknown as NextRequest, taskId);"
    },
    {
      "kind": "security",
      "source_path": "lib/vercel.ts",
      "line": 15,
      "text": "* https://vercel.com/docs/security/vercel-firewall/ja4-fingerprinting"
    },
    {
      "kind": "security",
      "source_path": "lib/vercel.ts",
      "line": 38,
      "text": "* https://vercel.com/docs/security/vercel-firewall/bot-protection"
    },
    {
      "kind": "security",
      "source_path": "License FAQ.md",
      "line": 23,
      "text": "Yes, if your use is non-commercial as defined by the license. Internal evaluation, research, development, testing, security review, accessibility work, and internal experimentation are generally allowed if you are not directly or indirectly"
    },
    {
      "kind": "security",
      "source_path": "LICENSE.txt",
      "line": 13,
      "text": "“Non-commercial purposes” include personal use by an individual, academic research and development, journalism, testing, evaluation, interoperability work, security review, accessibility work, and internal use by your own organization where"
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 28,
      "text": "key: \"Strict-Transport-Security\","
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 32,
      "text": "key: \"Content-Security-Policy\","
    },
    {
      "kind": "unsafe",
      "source_path": "next.config.mjs",
      "line": 35,
      "text": "\"script-src 'self' 'unsafe-inline' 'unsafe-eval' https://va.vercel-scripts.com https://vitals.vercel-insights.com\","
    },
    {
      "kind": "unsafe",
      "source_path": "next.config.mjs",
      "line": 36,
      "text": "\"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com\","
    },
    {
      "kind": "security",
      "source_path": "next.config.mjs",
      "line": 63,
      "text": "// Global security headers"
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 67,
      "text": "JSON.stringify({ error: \"Request blocked by security policy\", signals: risk.signals }),"
    },
    {
      "kind": "security",
      "source_path": "proxy.ts",
      "line": 121,
      "text": "// ── Vercel security signal forwarding ────────────────────────────────────"
    },
    {
      "kind": "security",
      "source_path": "public/.well-known/security.txt",
      "line": 5,
      "text": "Policy: https://platphormnews.com/security"
    }
  ],
  "security": {
    "secret_risks": [],
    "unsafe_patterns": [
      {
        "name": "dangerously-set-html",
        "confidence": "medium",
        "evidence_paths": [
          "app/layout.tsx"
        ]
      },
      {
        "name": "sql-injection-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "app/atom.xml/route.ts"
        ]
      },
      {
        "name": "ssrf-review-needed",
        "confidence": "medium",
        "evidence_paths": [
          "lib/mcp-client.ts"
        ]
      }
    ],
    "sensitive_data_indicators": [
      {
        "name": "api_key",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/api/calendar-projects.test.ts",
          "__tests__/api/calendar.test.ts",
          "__tests__/api/onboard.test.ts",
          "__tests__/api/tasks.test.ts",
          "__tests__/proxy.test.ts",
          "app/.well-known/trust.json/route.ts",
          "app/api/mcp/route.ts",
          "app/api/v1/calendar/mcp/route.ts",
          "app/api/v1/calendar/projects/route.ts",
          "app/api/v1/calendar/route.ts",
          "app/api/v1/network/trusted-domains/route.ts",
          "app/api/v1/onboard/route.ts",
          "app/api/v1/openapi.json/route.ts",
          "app/llms-full.txt/route.ts",
          "app/llms-index.json/route.ts",
          "app/llms.txt/route.ts",
          "app/openapi.yaml/route.ts",
          "components/kanban-board.tsx",
          "lib/kanban-api-handlers.ts",
          "lib/platform-api.ts"
        ]
      },
      {
        "name": "card",
        "confidence": "medium",
        "evidence_paths": [
          ".jules/bolt.md",
          "app/api/v1/board/route.ts",
          "app/globals.css",
          "app/layout.tsx",
          "app/llms-index.json/route.ts",
          "app/og/route.tsx",
          "components/automation-rules.tsx",
          "components/column.tsx",
          "components/task-card.tsx",
          "components/ui/calendar.tsx",
          "components/ui/card.tsx",
          "components/ui/hover-card.tsx",
          "lib/constants.ts",
          "package.json",
          "pnpm-lock.yaml",
          "README.md",
          "ROADMAP.md",
          "styles/globals.css",
          "tailwind.config.ts"
        ]
      },
      {
        "name": "email",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/api/mcp-tools.test.ts",
          "app/.well-known/ai-plugin.json/route.ts",
          "app/api/mcp/route.ts",
          "app/api/v1/openapi.json/route.ts",
          "lib/mcp-client.ts"
        ]
      },
      {
        "name": "fingerprint",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/lib/vercel.test.ts",
          "__tests__/proxy.test.ts",
          "app/llms-index.json/route.ts",
          "lib/vercel.ts",
          "proxy.ts"
        ]
      },
      {
        "name": "health",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/api/health.test.ts",
          "__tests__/api/mcp-tools.test.ts",
          "__tests__/api/mcp.test.ts",
          "__tests__/api/openapi.test.ts",
          "__tests__/integration/mcp-workflow.test.ts",
          "__tests__/lib/mcp-client.test.ts",
          "__tests__/lib/vercel.test.ts",
          "app/.well-known/agent.json/route.ts",
          "app/.well-known/trust.json/route.ts",
          "app/api/health/route.ts",
          "app/api/mcp/route.ts",
          "app/api/v1/health/route.ts",
          "app/api/v1/network/route-compliance/route.ts",
          "app/api/v1/openapi.json/route.ts",
          "app/llms-full.txt/route.ts",
          "app/llms-index.json/route.ts",
          "app/llms.txt/route.ts",
          "app/network.manifest/route.ts",
          "app/robots.ts",
          "app/sitemap.ts"
        ]
      },
      {
        "name": "location",
        "confidence": "medium",
        "evidence_paths": [
          "components/calendar-integration.tsx",
          "next.config.mjs"
        ]
      },
      {
        "name": "password",
        "confidence": "medium",
        "evidence_paths": [
          "components/calendar-integration.tsx"
        ]
      },
      {
        "name": "pii",
        "confidence": "medium",
        "evidence_paths": [
          "pnpm-lock.yaml"
        ]
      },
      {
        "name": "secret-like environment variables",
        "confidence": "medium",
        "evidence_paths": [
          "package.json"
        ]
      },
      {
        "name": "token",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/api/tasks.test.ts",
          "__tests__/lib/mcp-client.test.ts",
          "__tests__/lib/storage.test.ts",
          "__tests__/proxy.test.ts",
          "app/api/v1/calendar/mcp/route.ts",
          "app/api/v1/calendar/projects/route.ts",
          "app/api/v1/calendar/route.ts",
          "app/api/v1/events/route.ts",
          "app/api/v1/onboard/route.ts",
          "app/api/v1/openapi.json/route.ts",
          "components/calendar-integration.tsx",
          "components/kanban-board.tsx",
          "lib/storage.ts",
          "next.config.mjs",
          "pnpm-lock.yaml",
          "PROJECT_PLAN.md",
          "proxy.ts",
          "README.md"
        ]
      },
      {
        "name": "x-vercel-ja4-digest",
        "confidence": "medium",
        "evidence_paths": [
          "__tests__/lib/vercel.test.ts",
          "lib/vercel.ts"
        ]
      }
    ]
  },
  "generated_at": "2026-05-16T16:44:15.509Z"
}
