{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T14:52:00.390757Z","repo":{"ref":{"host":"github.com","owner":"DuskyElf","name":"prep-jee"},"default_branch":"main","clone_url":"https://github.com/DuskyElf/prep-jee.git","html_url":"https://github.com/DuskyElf/prep-jee","description":"Upload JEE test PDFs → interactive quiz → instant grading","stars":4,"forks":0,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":195,"primary_language":"TypeScript","license_spdx":"Unlicense","created_at":"2026-07-04T11:09:40Z","pushed_at":"2026-07-04T11:38:52Z","security_policy_url":null,"distribution":{"owner_created_at":"2021-10-04T09:33:23Z","owner_type":"User","release_assets":[]}},"commit_sha":"390745710638e2a2298077e7af4d72233fc5e1fe","profile":{"lines_by_language":{"TypeScript":3822,"JavaScript":213},"files_by_category":{"source":19,"config":4,"other":4,"docs":3,"generated":1},"source_lines":4035,"test_lines":0},"pillars":{"ai_provenance":{"score":0.0,"confidence":0.48,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0,"suspected_share":0.5038,"estimated_share":0.0,"ai_artifacts":1.0,"flagged_work_units":1.0,"flagged_releases":null,"style_index":1.983},"summary":"Weak signals consistent with AI-assisted development. Comments and strings use phrasing typical of LLM-written code (see the coding style evidence)."},"quality":{"score":55.1,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":65.0,"duplication":67.5,"lint":100.0,"testing":0.0,"docs":65.0,"type_safety":100.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 14% of function code in complex or long functions; 7% duplicated lines. Weakest area: testing."},"security":{"score":66.0,"confidence":0.85,"coverage":1.0,"label":"weak","breakdown":{"secrets":100.0,"sast":97.9,"dependencies":14.5,"ci_actions":null,"posture":20.0,"scorecard":null},"summary":"Security posture is weak: 70 known vulnerabilities in 14 dependencies. Weakest area: dependencies."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"ok","tool_version":null,"metrics":{"declared":15.0,"checked":15.0,"missing":0.0,"recent":0.0,"lookup_errors":0.0},"findings":[],"evidence":[],"data":{"phantom":false},"error":null},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":33.0,"attributed_commits":0.0,"attributed_commit_share":0.0,"effective_loc":6727.0,"attributed_loc":0.0,"attributed_loc_share":0.0,"tools_detected":0.0},"findings":[],"evidence":[],"data":{"attributed_loc_by_commit":{},"tools":{},"monthly":{"2026-06":{"loc":6593,"attributed_loc":0},"2026-07":{"loc":134,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":1.0,"workflow_agents":0.0,"tools_configured":1.0,"earliest_adoption":1782382453.0},"findings":[],"evidence":[{"kind":"ai-artifact","description":"AGENTS.md (generic-agent configuration)","ref":"AGENTS.md","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/AGENTS.md","weight":0.5}],"data":{"artifacts":[{"tool":"generic-agent","path":"AGENTS.md","added_at":1782382453}],"workflows":[],"tools":["generic-agent"]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-4","metrics":{"work_units":6.0,"flagged_units":1.0,"pre_ai_era_bursts":0.0,"pre_ai_era_measured_loc":0.0,"pre_ai_era_burst_loc":0.0,"measured_loc":6727.0,"flagged_loc":3389.0,"flagged_loc_share":0.5037906942173331,"max_loc_per_hour":896.0998898273963,"median_loc_per_hour":210.5027389579813,"pr_timed_units":0.0,"excluded_import_loc":0.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"3,389 lines of first-party code in ~3.8h (896 lines/hour, 5 commit session)","ref":"64911fa09d44e43b07e2f72bf90832be3b7ccb63","url":"https://github.com/DuskyElf/prep-jee/commit/64911fa09d44e43b07e2f72bf90832be3b7ccb63","weight":0.26882996694821887}],"data":{"flagged_loc_by_commit":{"f52e780fabf068596c3e5f84f3a077a62a4f3517":1,"f34980e9da78aafcf9c57ad1e844fad7ec727cc4":609,"67d5d5dcb0c2afaa274160bc42781961146c49be":2,"0d2c537b5a3ab97de22b50879dd30cb61b286cfd":994,"64911fa09d44e43b07e2f72bf90832be3b7ccb63":1783},"excluded_import_commits":[]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":4035.0,"index":1.983,"count:narrated_steps":4.0,"per_kloc:narrated_steps":0.991,"files:narrated_steps":1.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":8.0,"per_kloc:emoji_in_code":1.983,"files:emoji_in_code":4.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 1: Find the first type marker — questions begin after this","ref":"src/question-parser.ts:532","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/question-parser.ts#L532","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 2: Find question numbers after the first type marker","ref":"src/question-parser.ts:536","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/question-parser.ts#L536","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 3: Scan type markers","ref":"src/question-parser.ts:614","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/question-parser.ts#L614","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // Step 4: Map each question number to its type and page","ref":"src/question-parser.ts:617","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/question-parser.ts#L617","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":1.0,"findings_high":0.0,"findings_medium":1.0,"findings_low":0.0,"weighted_findings":0.25,"scanned_lines":4035.0,"parse_errors":0.0},"findings":[{"rule_id":"opengrep/javascript.lang.security.audit.detect-non-literal-regexp","severity":"medium","message":"RegExp() called with a `qnum` function argument, this might allow an attacker to cause a Regular Expression Denial-of-Service (ReDoS) within your application as RegExP blocks the main thread. For this reason, it is recommended to use hardcoded regexes instead. If your regex is run on user-controlled [confidence low]","path":"src/question-parser.ts","line":485,"fingerprint":"javascript.lang.security.audit.detect-non-literal-regexp:src/question-parser.ts:485"}],"evidence":[],"data":{"rulesets":["typescript","javascript"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"ok","tool_version":"osv-scanner version: 2.7.1","metrics":{"vulnerable_packages":14.0,"vulnerabilities":70.0,"vulns_critical":2.0,"vulns_high":40.0,"vulns_medium":24.0,"vulns_low":4.0,"vulns_unknown":0.0,"penalty":116.0},"findings":[{"rule_id":"osv/GHSA-p6vx-979v-rg4c","severity":"critical","message":"seroval@1.5.4 (npm) is affected by GHSA-p6vx-979v-rg4c","path":"package-lock.json","line":null,"fingerprint":"seroval@1.5.4 (npm):GHSA-p6vx-979v-rg4c"},{"rule_id":"osv/GHSA-23hp-3jrh-7fpw","severity":"critical","message":"tar@6.2.1 (npm) is affected by GHSA-23hp-3jrh-7fpw","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-23hp-3jrh-7fpw"},{"rule_id":"osv/GHSA-3jxr-9vmj-r5cp","severity":"high","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-3jxr-9vmj-r5cp","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-3jxr-9vmj-r5cp"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-mh99-v99m-4gvg","severity":"high","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-mh99-v99m-4gvg","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-mh99-v99m-4gvg"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-rgw5-rvv9-x895","severity":"high","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-rgw5-rvv9-x895","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-rgw5-rvv9-x895"},{"rule_id":"osv/GHSA-3jxr-9vmj-r5cp","severity":"high","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-3jxr-9vmj-r5cp","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-3jxr-9vmj-r5cp"},{"rule_id":"osv/GHSA-6j4f-fj2g-mc7p","severity":"high","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-6j4f-fj2g-mc7p","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-6j4f-fj2g-mc7p"},{"rule_id":"osv/GHSA-mh99-v99m-4gvg","severity":"high","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-mh99-v99m-4gvg","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-mh99-v99m-4gvg"},{"rule_id":"osv/GHSA-qhr7-859c-m2p7","severity":"high","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-qhr7-859c-m2p7","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-qhr7-859c-m2p7"},{"rule_id":"osv/GHSA-rgw5-rvv9-x895","severity":"high","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-rgw5-rvv9-x895","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-rgw5-rvv9-x895"},{"rule_id":"osv/GHSA-73wf-gq98-2v4g","severity":"high","message":"browserslist@4.28.4 (npm) is affected by GHSA-73wf-gq98-2v4g","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.28.4 (npm):GHSA-73wf-gq98-2v4g"},{"rule_id":"osv/GHSA-c83g-rgw3-j3cx","severity":"high","message":"browserslist@4.28.4 (npm) is affected by GHSA-c83g-rgw3-j3cx","path":"package-lock.json","line":null,"fingerprint":"browserslist@4.28.4 (npm):GHSA-c83g-rgw3-j3cx"},{"rule_id":"osv/GHSA-28wg-ghj8-5hjv","severity":"high","message":"nanoid@3.3.15 (npm) is affected by GHSA-28wg-ghj8-5hjv","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.15 (npm):GHSA-28wg-ghj8-5hjv"},{"rule_id":"osv/GHSA-2v37-7h3g-55p8","severity":"high","message":"nanoid@3.3.15 (npm) is affected by GHSA-2v37-7h3g-55p8","path":"package-lock.json","line":null,"fingerprint":"nanoid@3.3.15 (npm):GHSA-2v37-7h3g-55p8"},{"rule_id":"osv/GHSA-wgrm-67xf-hhpq","severity":"high","message":"pdfjs-dist@3.11.174 (npm) is affected by GHSA-wgrm-67xf-hhpq","path":"package-lock.json","line":null,"fingerprint":"pdfjs-dist@3.11.174 (npm):GHSA-wgrm-67xf-hhpq"},{"rule_id":"osv/GHSA-r28c-9q8g-f849","severity":"high","message":"postcss@8.5.15 (npm) is affected by GHSA-r28c-9q8g-f849","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.15 (npm):GHSA-r28c-9q8g-f849"},{"rule_id":"osv/GHSA-7rv5-mrxv-xcr9","severity":"high","message":"seroval@1.5.4 (npm) is affected by GHSA-7rv5-mrxv-xcr9","path":"package-lock.json","line":null,"fingerprint":"seroval@1.5.4 (npm):GHSA-7rv5-mrxv-xcr9"},{"rule_id":"osv/GHSA-97r2-qh9m-474h","severity":"high","message":"seroval@1.5.4 (npm) is affected by GHSA-97r2-qh9m-474h","path":"package-lock.json","line":null,"fingerprint":"seroval@1.5.4 (npm):GHSA-97r2-qh9m-474h"},{"rule_id":"osv/GHSA-jp82-f5mq-hwhp","severity":"high","message":"seroval@1.5.4 (npm) is affected by GHSA-jp82-f5mq-hwhp","path":"package-lock.json","line":null,"fingerprint":"seroval@1.5.4 (npm):GHSA-jp82-f5mq-hwhp"},{"rule_id":"osv/GHSA-wp97-x4hv-qvhp","severity":"high","message":"seroval@1.5.4 (npm) is affected by GHSA-wp97-x4hv-qvhp","path":"package-lock.json","line":null,"fingerprint":"seroval@1.5.4 (npm):GHSA-wp97-x4hv-qvhp"},{"rule_id":"osv/GHSA-f88m-g3jw-g9cj","severity":"high","message":"sharp@0.34.5 (npm) is affected by GHSA-f88m-g3jw-g9cj","path":"package-lock.json","line":null,"fingerprint":"sharp@0.34.5 (npm):GHSA-f88m-g3jw-g9cj"},{"rule_id":"osv/GHSA-rgj7-g3m4-5g8c","severity":"high","message":"sharp@0.34.5 (npm) is affected by GHSA-rgj7-g3m4-5g8c","path":"package-lock.json","line":null,"fingerprint":"sharp@0.34.5 (npm):GHSA-rgj7-g3m4-5g8c"},{"rule_id":"osv/GHSA-wq5f-xc86-pv6w","severity":"high","message":"sharp@0.34.5 (npm) is affected by GHSA-wq5f-xc86-pv6w","path":"package-lock.json","line":null,"fingerprint":"sharp@0.34.5 (npm):GHSA-wq5f-xc86-pv6w"},{"rule_id":"osv/GHSA-68fv-2mgg-jv7q","severity":"high","message":"source-map-js@1.2.1 (npm) is affected by GHSA-68fv-2mgg-jv7q","path":"package-lock.json","line":null,"fingerprint":"source-map-js@1.2.1 (npm):GHSA-68fv-2mgg-jv7q"},{"rule_id":"osv/GHSA-34x7-hfp2-rc4v","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-34x7-hfp2-rc4v","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-34x7-hfp2-rc4v"},{"rule_id":"osv/GHSA-83g3-92jg-28cx","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-83g3-92jg-28cx","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-83g3-92jg-28cx"},{"rule_id":"osv/GHSA-8qq5-rm4j-mr97","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-8qq5-rm4j-mr97","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-8qq5-rm4j-mr97"},{"rule_id":"osv/GHSA-8x88-c5mf-7j5w","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-8x88-c5mf-7j5w","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-8x88-c5mf-7j5w"},{"rule_id":"osv/GHSA-9ppj-qmqm-q256","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-9ppj-qmqm-q256","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-9ppj-qmqm-q256"},{"rule_id":"osv/GHSA-qffp-2rhf-9h96","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-qffp-2rhf-9h96","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-qffp-2rhf-9h96"},{"rule_id":"osv/GHSA-r292-9mhp-454m","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-r292-9mhp-454m","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-r292-9mhp-454m"},{"rule_id":"osv/GHSA-r6q2-hw4h-h46w","severity":"high","message":"tar@6.2.1 (npm) is affected by GHSA-r6q2-hw4h-h46w","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-r6q2-hw4h-h46w"},{"rule_id":"osv/GHSA-2m5v-pch6-74hx","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-2m5v-pch6-74hx","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-2m5v-pch6-74hx"},{"rule_id":"osv/GHSA-4cwx-7wf7-3272","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-4cwx-7wf7-3272","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-4cwx-7wf7-3272"},{"rule_id":"osv/GHSA-4w7w-5xrc-9h26","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-4w7w-5xrc-9h26","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-4w7w-5xrc-9h26"},{"rule_id":"osv/GHSA-qrxm-fqhp-jwvm","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-qrxm-fqhp-jwvm","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-qrxm-fqhp-jwvm"},{"rule_id":"osv/GHSA-rfgv-xxqx-mfg5","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-rfgv-xxqx-mfg5","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-rfgv-xxqx-mfg5"},{"rule_id":"osv/GHSA-w293-vg96-wgc3","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-w293-vg96-wgc3","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-w293-vg96-wgc3"},{"rule_id":"osv/GHSA-xjj6-f33q-929c","severity":"high","message":"undici@7.28.0 (npm) is affected by GHSA-xjj6-f33q-929c","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-xjj6-f33q-929c"},{"rule_id":"osv/GHSA-587h-7wmj-h5pm","severity":"high","message":"vite@6.4.3 (npm) is affected by GHSA-587h-7wmj-h5pm","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-587h-7wmj-h5pm"},{"rule_id":"osv/GHSA-w5vr-8v7q-w6rv","severity":"medium","message":"baseline-browser-mapping@2.10.40 (npm) is affected by GHSA-w5vr-8v7q-w6rv","path":"package-lock.json","line":null,"fingerprint":"baseline-browser-mapping@2.10.40 (npm):GHSA-w5vr-8v7q-w6rv"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@1.1.15 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@1.1.15 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-q2hr-2g5m-vwhr","severity":"medium","message":"brace-expansion@5.0.6 (npm) is affected by GHSA-q2hr-2g5m-vwhr","path":"package-lock.json","line":null,"fingerprint":"brace-expansion@5.0.6 (npm):GHSA-q2hr-2g5m-vwhr"},{"rule_id":"osv/GHSA-g3hv-75wg-m249","severity":"medium","message":"minimatch@10.2.5 (npm) is affected by GHSA-g3hv-75wg-m249","path":"package-lock.json","line":null,"fingerprint":"minimatch@10.2.5 (npm):GHSA-g3hv-75wg-m249"},{"rule_id":"osv/GHSA-fxqj-rqcc-2cmp","severity":"medium","message":"postcss@8.5.15 (npm) is affected by GHSA-fxqj-rqcc-2cmp","path":"package-lock.json","line":null,"fingerprint":"postcss@8.5.15 (npm):GHSA-fxqj-rqcc-2cmp"},{"rule_id":"osv/GHSA-gvwx-54wh-qm9j","severity":"medium","message":"tar@6.2.1 (npm) is affected by GHSA-gvwx-54wh-qm9j","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-gvwx-54wh-qm9j"},{"rule_id":"osv/GHSA-vmf3-w455-68vh","severity":"medium","message":"tar@6.2.1 (npm) is affected by GHSA-vmf3-w455-68vh","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-vmf3-w455-68vh"},{"rule_id":"osv/GHSA-w8wr-v893-vjvp","severity":"medium","message":"tar@6.2.1 (npm) is affected by GHSA-w8wr-v893-vjvp","path":"package-lock.json","line":null,"fingerprint":"tar@6.2.1 (npm):GHSA-w8wr-v893-vjvp"},{"rule_id":"osv/GHSA-2jfj-6hjv-fm6j","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-2jfj-6hjv-fm6j","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-2jfj-6hjv-fm6j"},{"rule_id":"osv/GHSA-3wwx-pv8p-q78v","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-3wwx-pv8p-q78v","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-3wwx-pv8p-q78v"},{"rule_id":"osv/GHSA-3xpg-4rpp-hhhm","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-3xpg-4rpp-hhhm","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-3xpg-4rpp-hhhm"},{"rule_id":"osv/GHSA-4qv8-2p9j-2685","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-4qv8-2p9j-2685","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-4qv8-2p9j-2685"},{"rule_id":"osv/GHSA-55wc-3pg8-jfw6","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-55wc-3pg8-jfw6","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-55wc-3pg8-jfw6"},{"rule_id":"osv/GHSA-8xcm-r25x-g524","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-8xcm-r25x-g524","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-8xcm-r25x-g524"},{"rule_id":"osv/GHSA-9fm3-97px-rjf6","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-9fm3-97px-rjf6","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-9fm3-97px-rjf6"},{"rule_id":"osv/GHSA-f72v-6w45-q472","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-f72v-6w45-q472","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-f72v-6w45-q472"},{"rule_id":"osv/GHSA-jr45-8vmc-qm54","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-jr45-8vmc-qm54","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-jr45-8vmc-qm54"},{"rule_id":"osv/GHSA-m8rv-5g2x-5cg5","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-m8rv-5g2x-5cg5","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-m8rv-5g2x-5cg5"},{"rule_id":"osv/GHSA-pmjh-fq2x-6v4x","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-pmjh-fq2x-6v4x","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-pmjh-fq2x-6v4x"},{"rule_id":"osv/GHSA-rx4f-c7p8-82vq","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-rx4f-c7p8-82vq","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-rx4f-c7p8-82vq"},{"rule_id":"osv/GHSA-v3r7-h72x-cjcm","severity":"medium","message":"undici@7.28.0 (npm) is affected by GHSA-v3r7-h72x-cjcm","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-v3r7-h72x-cjcm"},{"rule_id":"osv/GHSA-698v-4r3x-3vcv","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-698v-4r3x-3vcv","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-698v-4r3x-3vcv"},{"rule_id":"osv/GHSA-r825-w8mm-5pxw","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-r825-w8mm-5pxw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-r825-w8mm-5pxw"},{"rule_id":"osv/GHSA-rq7h-c2jc-7f22","severity":"medium","message":"vite@6.4.3 (npm) is affected by GHSA-rq7h-c2jc-7f22","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-rq7h-c2jc-7f22"},{"rule_id":"osv/GHSA-2gqq-gqf2-x968","severity":"low","message":"undici@7.28.0 (npm) is affected by GHSA-2gqq-gqf2-x968","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-2gqq-gqf2-x968"},{"rule_id":"osv/GHSA-8436-99hf-9mmv","severity":"low","message":"undici@7.28.0 (npm) is affected by GHSA-8436-99hf-9mmv","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-8436-99hf-9mmv"},{"rule_id":"osv/GHSA-r53p-7pc4-xj5r","severity":"low","message":"undici@7.28.0 (npm) is affected by GHSA-r53p-7pc4-xj5r","path":"package-lock.json","line":null,"fingerprint":"undici@7.28.0 (npm):GHSA-r53p-7pc4-xj5r"},{"rule_id":"osv/GHSA-9jrq-w75r-8gcw","severity":"low","message":"vite@6.4.3 (npm) is affected by GHSA-9jrq-w75r-8gcw","path":"package-lock.json","line":null,"fingerprint":"vite@6.4.3 (npm):GHSA-9jrq-w75r-8gcw"}],"evidence":[],"data":{"ecosystems":["npm"]},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":0.0,"check:signed_commits":1.0,"check:lockfiles":1.0,"signed_commit_share":1.0,"unpinned_manifests":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":0.0,"binary_assets":0.0,"suspicious":0.0},"findings":[],"evidence":[],"data":{"signals":[],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":243.0,"function_nloc":2379.0,"mean_ccn":2.59,"p90_ccn":5.0,"complex_functions":3.0,"long_functions":2.0,"many_param_functions":0.0,"risky_nloc_share":0.1438},"findings":[],"evidence":[{"kind":"complex-function","description":"parseQuestions in src/question-parser.ts: complexity 34, 109 lines","ref":"src/question-parser.ts","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/question-parser.ts#L527","weight":0.5666666666666667},{"kind":"complex-function","description":"(anonymous) in src/App.tsx: complexity 18, 67 lines","ref":"src/App.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/App.tsx#L47","weight":0.3},{"kind":"complex-function","description":"reconstructLines in src/pdf-utils.ts: complexity 16, 43 lines","ref":"src/pdf-utils.ts","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/pdf-utils.ts#L94","weight":0.26666666666666666},{"kind":"complex-function","description":"QuizScreen in src/components/QuizScreen.tsx: complexity 4, 123 lines","ref":"src/components/QuizScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/QuizScreen.tsx#L60","weight":0.06666666666666667}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":2856.0,"duplicated_lines":187.0,"duplicated_share":0.0655,"files":19.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: src/App.tsx:72 and src/App.tsx:173","ref":"src/App.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/App.tsx#L72","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/QuizScreen.tsx:176 and src/components/ResultsScreen.tsx:90","ref":"src/components/QuizScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/QuizScreen.tsx#L176","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/QuizScreen.tsx:288 and src/components/QuizScreen.tsx:358","ref":"src/components/QuizScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/QuizScreen.tsx#L288","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/QuizScreen.tsx:355 and src/components/QuizTimer.tsx:106","ref":"src/components/QuizScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/QuizScreen.tsx#L355","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/QuizTimer.tsx:110 and src/components/UploadScreen.tsx:209","ref":"src/components/QuizTimer.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/QuizTimer.tsx#L110","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/ResultsScreen.tsx:55 and src/quiz-engine.ts:136","ref":"src/components/ResultsScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/ResultsScreen.tsx#L55","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/ResultsScreen.tsx:199 and src/components/ResultsScreen.tsx:211","ref":"src/components/ResultsScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/ResultsScreen.tsx#L199","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/components/UploadScreen.tsx:41 and src/components/UploadScreen.tsx:151","ref":"src/components/UploadScreen.tsx","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/components/UploadScreen.tsx#L41","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: src/store.ts:31 and src/store.ts:154","ref":"src/store.ts","url":"https://github.com/DuskyElf/prep-jee/blob/390745710638e2a2298077e7af4d72233fc5e1fe/src/store.ts#L31","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":0.0,"weighted_findings":0.0,"scanned_lines":4035.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":0.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":4035.0,"test_ratio":0.0,"ci_files":0.0,"cochange_share":0.0,"cochange_commits":23.0},"findings":[],"evidence":[],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":28.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":1.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[{"kind":"typing","description":"TypeScript strict type checking: tsconfig.json","ref":"tsconfig.json","url":null,"weight":0.0}],"data":{},"error":null}],"flags":[]}