{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-51b7cc60a8c6b227", "name": "Stray `console.log` in TS/JS \u2014 examples/pagination.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/pagination.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12fd60021d9b3795", "name": "Stray `console.log` in TS/JS \u2014 examples/pkce-spa.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/pkce-spa.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c15a4d88c4acad6d", "name": "Stray `console.log` in TS/JS \u2014 examples/basic-usage.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/basic-usage.ts:23"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83826d3c707cfd57", "name": "Stray `console.log` in TS/JS \u2014 examples/oauth-express/server.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/oauth-express/server.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6157f54c8ada89d", "name": "Stray `console.log` in TS/JS \u2014 src/cli.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/cli.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb4adae94b1767b5", "name": "Stray `console.log` in TS/JS \u2014 src/errors.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/errors.ts:55"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a9957c155a5bb46", "name": "Stray `console.log` in TS/JS \u2014 src/users/getWebProfiles.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getWebProfiles.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a72b5b3271dc364c", "name": "Stray `console.log` in TS/JS \u2014 src/users/getFollowers.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getFollowers.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de34fcaa7d2d8239", "name": "Stray `console.log` in TS/JS \u2014 src/users/getMe.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getMe.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c4fdb2ff7a50a58", "name": "Stray `console.log` in TS/JS \u2014 src/users/getLikesTracks.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getLikesTracks.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bdd22b6d89987569", "name": "Stray `console.log` in TS/JS \u2014 src/users/getTracks.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getTracks.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f45d02905e7bd7eb", "name": "Stray `console.log` in TS/JS \u2014 src/users/getPlaylists.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getPlaylists.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f4f075cc57692940", "name": "Stray `console.log` in TS/JS \u2014 src/users/getLikesPlaylists.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getLikesPlaylists.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c1e0b0f258a7808", "name": "Stray `console.log` in TS/JS \u2014 src/users/getFollowings.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getFollowings.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de137c30794b27f1", "name": "Stray `console.log` in TS/JS \u2014 src/users/getUser.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getUser.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b595b6393aa6d087", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getReposts.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getReposts.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c8a52ee3160e5a2", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getTracks.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getTracks.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8253566ed87a4f55", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getStreams.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getStreams.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55d1a4add72a45a5", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/updateTrack.ts:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/updateTrack.ts:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de64ffaac5c52067", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getTrack.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getTrack.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a73527d556df133", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getComments.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getComments.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a90ab386c71732a5", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getRelated.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getRelated.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d3026663fc12def", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/getLikes.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getLikes.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f5290e227f391cb", "name": "Stray `console.log` in TS/JS \u2014 src/tracks/createComment.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/createComment.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fc7939cac3ce864", "name": "Stray `console.log` in TS/JS \u2014 src/client/paginate.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/client/paginate.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8e0a2e38ea20de43", "name": "Stray `console.log` in TS/JS \u2014 src/client/raw.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/client/raw.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d19417cb807fa455", "name": "Stray `console.log` in TS/JS \u2014 src/client/SoundCloudClient.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/client/SoundCloudClient.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-127a7296ca1ed822", "name": "Stray `console.log` in TS/JS \u2014 src/playlists/createPlaylist.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/createPlaylist.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9054f7eb48d14cce", "name": "Stray `console.log` in TS/JS \u2014 src/playlists/getReposts.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getReposts.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-500a0fc85e902d71", "name": "Stray `console.log` in TS/JS \u2014 src/playlists/getTracks.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getTracks.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66a8fa9245336529", "name": "Stray `console.log` in TS/JS \u2014 src/playlists/getPlaylist.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getPlaylist.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-040b5d46f157517d", "name": "Stray `console.log` in TS/JS \u2014 src/auth/getUserToken.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/getUserToken.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b33f58f6ba4d4e5", "name": "Stray `console.log` in TS/JS \u2014 src/auth/getClientToken.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/getClientToken.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e468d85b62ebdda4", "name": "Stray `console.log` in TS/JS \u2014 src/auth/pkce.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/pkce.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7f28b6dc4411cd3", "name": "Stray `console.log` in TS/JS \u2014 src/auth/refreshUserToken.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/refreshUserToken.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d031d8104896b32d", "name": "Stray `console.log` in TS/JS \u2014 src/utils/widget.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/widget.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd3150c3db1fc28d", "name": "Stray `console.log` in TS/JS \u2014 src/resolve/resolveUrl.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/resolve/resolveUrl.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2dd0a218b35fe66", "name": "Stray `console.log` in TS/JS \u2014 src/search/searchTracks.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchTracks.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee96d1c9c49e193f", "name": "Stray `console.log` in TS/JS \u2014 src/search/searchUsers.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchUsers.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e889f02fdcea98e3", "name": "Stray `console.log` in TS/JS \u2014 src/search/searchPlaylists.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchPlaylists.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe7d7c21035299e9", "name": "Stray `console.log` in TS/JS \u2014 src/me/tracks.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/tracks.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc5f8e35ef03a88e", "name": "Stray `console.log` in TS/JS \u2014 src/me/followings.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/followings.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a969fd049f540dba", "name": "Stray `console.log` in TS/JS \u2014 src/me/activities.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/activities.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-66423b13f968b3a9", "name": "Stray `console.log` in TS/JS \u2014 src/me/playlists.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/playlists.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f8c265d05d5da38", "name": "Stray `console.log` in TS/JS \u2014 src/me/connections.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/connections.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ffe7be520b2dc41", "name": "Stray `console.log` in TS/JS \u2014 src/me/followers.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/followers.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47947fcd8b56c29f", "name": "Stray `console.log` in TS/JS \u2014 src/me/likes.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/me/likes.ts:17"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6577b736405eb003", "name": "Insecure pattern 'node_child_process' in src/cli.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in src/cli.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0763d85002569570", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/deploy-pages@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14ce8614dd03f409", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ffa33751be3d771", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3578cb56f2d254ac", "name": "Very large file: src/client/SoundCloudClient.ts (1447 lines)", "shortDescription": {"text": "Very large file: src/client/SoundCloudClient.ts (1447 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28533c34c5f246e6", "name": "Node manifest has dependencies but no lockfile: examples/oauth-express/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: examples/oauth-express/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 181 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ea8dae80f4cfb6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/client-config-wiring.test.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/client-config-wiring.test.ts:32"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-04986cb3485829da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/http.ts:351", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/http.ts:351"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-32fcdab1b1e1b4e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/SoundCloudClient.ts:497", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/SoundCloudClient.ts:497"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cded48eefd44313c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/signOut.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/signOut.ts:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-378068ceb71e1369", "name": "Dangling fetch: POST https://secure.soundcloud.com/sign-out (src/auth/signOut.ts:18)", "shortDescription": {"text": "Dangling fetch: POST https://secure.soundcloud.com/sign-out (src/auth/signOut.ts:18)"}, "fullDescription": {"text": "`src/auth/signOut.ts:18` calls `POST https://secure.soundcloud.com/sign-out` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/secure.soundcloud.com/sign-out`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a4dfcad3eb1618a", "name": "Unused endpoint: GET /login", "shortDescription": {"text": "Unused endpoint: GET /login"}, "fullDescription": {"text": "`examples/oauth-express/server.ts` declares `GET /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdfb578618cf2542", "name": "Unused endpoint: GET /callback", "shortDescription": {"text": "Unused endpoint: GET /callback"}, "fullDescription": {"text": "`examples/oauth-express/server.ts` declares `GET /callback` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`examples/oauth-express/server.ts` declares `GET /me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-22aed0869c6ce2d3", "name": "Unused endpoint: GET /tracks/123456", "shortDescription": {"text": "Unused endpoint: GET /tracks/123456"}, "fullDescription": {"text": "`src/client/raw.ts` declares `GET /tracks/123456` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21759"}, "properties": {"repository": "twin-paws/soundcloud-api-ts", "repoUrl": "https://github.com/twin-paws/soundcloud-api-ts", "branch": "main"}, "results": [{"ruleId": "scanner-51b7cc60a8c6b227", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/pagination.ts:28"}, "properties": {"repobilityId": "e557ca0e0b24f522", "scanner": "scanner-primary", "fingerprint": "51b7cc60a8c6b227", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12fd60021d9b3795", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/pkce-spa.ts:26"}, "properties": {"repobilityId": "d44b4268aba914c0", "scanner": "scanner-primary", "fingerprint": "12fd60021d9b3795", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c15a4d88c4acad6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/basic-usage.ts:23"}, "properties": {"repobilityId": "03ee9e76d616dd83", "scanner": "scanner-primary", "fingerprint": "c15a4d88c4acad6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83826d3c707cfd57", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/oauth-express/server.ts:70"}, "properties": {"repobilityId": "72910cc28edf235b", "scanner": "scanner-primary", "fingerprint": "83826d3c707cfd57", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6157f54c8ada89d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/cli.ts:70"}, "properties": {"repobilityId": "435b83b5315abc65", "scanner": "scanner-primary", "fingerprint": "b6157f54c8ada89d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eb4adae94b1767b5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/errors.ts:55"}, "properties": {"repobilityId": "42bc2373362eeb3c", "scanner": "scanner-primary", "fingerprint": "eb4adae94b1767b5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a9957c155a5bb46", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getWebProfiles.ts:17"}, "properties": {"repobilityId": "c2d6e048faca0931", "scanner": "scanner-primary", "fingerprint": "8a9957c155a5bb46", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a72b5b3271dc364c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getFollowers.ts:18"}, "properties": {"repobilityId": "2e2450aff73266f7", "scanner": "scanner-primary", "fingerprint": "a72b5b3271dc364c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de34fcaa7d2d8239", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getMe.ts:16"}, "properties": {"repobilityId": "9ba0c5a256154263", "scanner": "scanner-primary", "fingerprint": "de34fcaa7d2d8239", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1c4fdb2ff7a50a58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getLikesTracks.ts:19"}, "properties": {"repobilityId": "8d5ca13403c5b531", "scanner": "scanner-primary", "fingerprint": "1c4fdb2ff7a50a58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bdd22b6d89987569", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getTracks.ts:18"}, "properties": {"repobilityId": "2b129d296b786e52", "scanner": "scanner-primary", "fingerprint": "bdd22b6d89987569", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f45d02905e7bd7eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getPlaylists.ts:18"}, "properties": {"repobilityId": "a5e7a96938106f0d", "scanner": "scanner-primary", "fingerprint": "f45d02905e7bd7eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f4f075cc57692940", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getLikesPlaylists.ts:18"}, "properties": {"repobilityId": "fd2964760b17618f", "scanner": "scanner-primary", "fingerprint": "f4f075cc57692940", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c1e0b0f258a7808", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getFollowings.ts:18"}, "properties": {"repobilityId": "a9f851ac00cae3aa", "scanner": "scanner-primary", "fingerprint": "4c1e0b0f258a7808", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de137c30794b27f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/users/getUser.ts:17"}, "properties": {"repobilityId": "b1bdb5ffa4621ebf", "scanner": "scanner-primary", "fingerprint": "de137c30794b27f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b595b6393aa6d087", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getReposts.ts:18"}, "properties": {"repobilityId": "227cbb4c018e6e18", "scanner": "scanner-primary", "fingerprint": "b595b6393aa6d087", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c8a52ee3160e5a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getTracks.ts:22"}, "properties": {"repobilityId": "81203ae721eba9b9", "scanner": "scanner-primary", "fingerprint": "4c8a52ee3160e5a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8253566ed87a4f55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getStreams.ts:17"}, "properties": {"repobilityId": "f459e2a6eb212962", "scanner": "scanner-primary", "fingerprint": "8253566ed87a4f55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55d1a4add72a45a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/updateTrack.ts:61"}, "properties": {"repobilityId": "4d21ee59176e4f7d", "scanner": "scanner-primary", "fingerprint": "55d1a4add72a45a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de64ffaac5c52067", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getTrack.ts:17"}, "properties": {"repobilityId": "9c2170cc688c79c6", "scanner": "scanner-primary", "fingerprint": "de64ffaac5c52067", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a73527d556df133", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getComments.ts:18"}, "properties": {"repobilityId": "262b0e8d3712d908", "scanner": "scanner-primary", "fingerprint": "5a73527d556df133", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a90ab386c71732a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getRelated.ts:18"}, "properties": {"repobilityId": "a85fc25e7fecfb55", "scanner": "scanner-primary", "fingerprint": "a90ab386c71732a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d3026663fc12def", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/getLikes.ts:18"}, "properties": {"repobilityId": "56afb24d9ca05060", "scanner": "scanner-primary", "fingerprint": "2d3026663fc12def", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f5290e227f391cb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/tracks/createComment.ts:19"}, "properties": {"repobilityId": "89d54627590474c9", "scanner": "scanner-primary", "fingerprint": "9f5290e227f391cb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fc7939cac3ce864", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/client/paginate.ts:21"}, "properties": {"repobilityId": "146af8133b3904c8", "scanner": "scanner-primary", "fingerprint": "1fc7939cac3ce864", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e0a2e38ea20de43", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/client/raw.ts:21"}, "properties": {"repobilityId": "83d1eefa2262268d", "scanner": "scanner-primary", "fingerprint": "8e0a2e38ea20de43", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d19417cb807fa455", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/client/SoundCloudClient.ts:99"}, "properties": {"repobilityId": "669e034a642623e1", "scanner": "scanner-primary", "fingerprint": "d19417cb807fa455", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-127a7296ca1ed822", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/createPlaylist.ts:57"}, "properties": {"repobilityId": "c61c1c942f097336", "scanner": "scanner-primary", "fingerprint": "127a7296ca1ed822", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9054f7eb48d14cce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getReposts.ts:18"}, "properties": {"repobilityId": "19354b92e9fdc110", "scanner": "scanner-primary", "fingerprint": "9054f7eb48d14cce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-500a0fc85e902d71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getTracks.ts:19"}, "properties": {"repobilityId": "d6ba8ac95b1c5f6c", "scanner": "scanner-primary", "fingerprint": "500a0fc85e902d71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66a8fa9245336529", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/playlists/getPlaylist.ts:17"}, "properties": {"repobilityId": "30b52b4b254c7256", "scanner": "scanner-primary", "fingerprint": "66a8fa9245336529", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-040b5d46f157517d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/getUserToken.ts:28"}, "properties": {"repobilityId": "01443f56cb19b68c", "scanner": "scanner-primary", "fingerprint": "040b5d46f157517d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b33f58f6ba4d4e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/getClientToken.ts:20"}, "properties": {"repobilityId": "2c41851c8fd7a413", "scanner": "scanner-primary", "fingerprint": "1b33f58f6ba4d4e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e468d85b62ebdda4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/pkce.ts:40"}, "properties": {"repobilityId": "7a147410e5da216d", "scanner": "scanner-primary", "fingerprint": "e468d85b62ebdda4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7f28b6dc4411cd3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth/refreshUserToken.ts:26"}, "properties": {"repobilityId": "d831055bc141c8fb", "scanner": "scanner-primary", "fingerprint": "a7f28b6dc4411cd3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d031d8104896b32d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/utils/widget.ts:12"}, "properties": {"repobilityId": "a37fce3d96405011", "scanner": "scanner-primary", "fingerprint": "d031d8104896b32d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd3150c3db1fc28d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/resolve/resolveUrl.ts:18"}, "properties": {"repobilityId": "c14d6060beabf6b6", "scanner": "scanner-primary", "fingerprint": "bd3150c3db1fc28d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f2dd0a218b35fe66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchTracks.ts:18"}, "properties": {"repobilityId": "b547d01d7c028a05", "scanner": "scanner-primary", "fingerprint": "f2dd0a218b35fe66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee96d1c9c49e193f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchUsers.ts:18"}, "properties": {"repobilityId": "50f38de16590552e", "scanner": "scanner-primary", "fingerprint": "ee96d1c9c49e193f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e889f02fdcea98e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/search/searchPlaylists.ts:18"}, "properties": {"repobilityId": "ec3ce5a9e6f31c4e", "scanner": "scanner-primary", "fingerprint": "e889f02fdcea98e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe7d7c21035299e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/tracks.ts:17"}, "properties": {"repobilityId": "f21adf9aaa85d692", "scanner": "scanner-primary", "fingerprint": "fe7d7c21035299e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc5f8e35ef03a88e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/followings.ts:17"}, "properties": {"repobilityId": "bbf081a20b09f838", "scanner": "scanner-primary", "fingerprint": "cc5f8e35ef03a88e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a969fd049f540dba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/activities.ts:17"}, "properties": {"repobilityId": "587616885b867a2e", "scanner": "scanner-primary", "fingerprint": "a969fd049f540dba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66423b13f968b3a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/playlists.ts:17"}, "properties": {"repobilityId": "519bd642a55eda21", "scanner": "scanner-primary", "fingerprint": "66423b13f968b3a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f8c265d05d5da38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/connections.ts:18"}, "properties": {"repobilityId": "abfbf977f7933744", "scanner": "scanner-primary", "fingerprint": "1f8c265d05d5da38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ffe7be520b2dc41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/followers.ts:17"}, "properties": {"repobilityId": "433c8e9d167e761d", "scanner": "scanner-primary", "fingerprint": "9ffe7be520b2dc41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47947fcd8b56c29f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/me/likes.ts:17"}, "properties": {"repobilityId": "f20d54d28e2eb9ec", "scanner": "scanner-primary", "fingerprint": "47947fcd8b56c29f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6577b736405eb003", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in src/cli.ts:9"}, "properties": {"repobilityId": "74444523da4c8c23", "scanner": "scanner-primary", "fingerprint": "6577b736405eb003", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/cli.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-0763d85002569570", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "4289fb2fbaf82766", "scanner": "scanner-primary", "fingerprint": "0763d85002569570", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-14ce8614dd03f409", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "81c5c697653f94e8", "scanner": "scanner-primary", "fingerprint": "14ce8614dd03f409", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ffa33751be3d771", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "491a3ad29cbaf189", "scanner": "scanner-primary", "fingerprint": "7ffa33751be3d771", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3578cb56f2d254ac", "level": "note", "message": {"text": "Very large file: src/client/SoundCloudClient.ts (1447 lines)"}, "properties": {"repobilityId": "317df191087ba7a6", "scanner": "scanner-primary", "fingerprint": "3578cb56f2d254ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-28533c34c5f246e6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: examples/oauth-express/package.json"}, "properties": {"repobilityId": "a9640814bb0b054c", "scanner": "scanner-primary", "fingerprint": "28533c34c5f246e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "examples/oauth-express/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "1889d0ede54e9ce0", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "02fe842b7b6710ed", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "3b1b7fb2c384bb75", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "ad3ad42aba1cee12", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "63ade33c55250422", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-5ea8dae80f4cfb6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/__tests__/client-config-wiring.test.ts:32"}, "properties": {"repobilityId": "b0937d23e2f6a775", "scanner": "scanner-primary", "fingerprint": "5ea8dae80f4cfb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04986cb3485829da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/http.ts:351"}, "properties": {"repobilityId": "f82f85648a124bf4", "scanner": "scanner-primary", "fingerprint": "04986cb3485829da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-32fcdab1b1e1b4e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/client/SoundCloudClient.ts:497"}, "properties": {"repobilityId": "cfb85fcea65672e5", "scanner": "scanner-primary", "fingerprint": "32fcdab1b1e1b4e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cded48eefd44313c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/auth/signOut.ts:18"}, "properties": {"repobilityId": "6c5e961180516825", "scanner": "scanner-primary", "fingerprint": "cded48eefd44313c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-378068ceb71e1369", "level": "error", "message": {"text": "Dangling fetch: POST https://secure.soundcloud.com/sign-out (src/auth/signOut.ts:18)"}, "properties": {"repobilityId": "0a30643278bdc6ed", "scanner": "scanner-primary", "fingerprint": "378068ceb71e1369", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a4dfcad3eb1618a", "level": "note", "message": {"text": "Unused endpoint: GET /login"}, "properties": {"repobilityId": "12abdceeef9506ab", "scanner": "scanner-primary", "fingerprint": "6a4dfcad3eb1618a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdfb578618cf2542", "level": "note", "message": {"text": "Unused endpoint: GET /callback"}, "properties": {"repobilityId": "d6c2fcc79ab44ef8", "scanner": "scanner-primary", "fingerprint": "cdfb578618cf2542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "072da9f29e0a7952", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-22aed0869c6ce2d3", "level": "note", "message": {"text": "Unused endpoint: GET /tracks/123456"}, "properties": {"repobilityId": "86870e3a8cae5d02", "scanner": "scanner-primary", "fingerprint": "22aed0869c6ce2d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}