{"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-0412bd9e173dbcf2", "name": "Possibly dead Python function: cancel_irn", "shortDescription": {"text": "Possibly dead Python function: cancel_irn"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bce6843e37da0e18", "name": "Possibly dead Python function: populate_discharge_types", "shortDescription": {"text": "Possibly dead Python function: populate_discharge_types"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6a8a37a49bbabc1", "name": "Possibly dead Python function: sap_callback_view", "shortDescription": {"text": "Possibly dead Python function: sap_callback_view"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e38b570067c02e20", "name": "Possibly dead Python function: build_einvoice_from_fdcn", "shortDescription": {"text": "Possibly dead Python function: build_einvoice_from_fdcn"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a12e81a702e4c81", "name": "Possibly dead Python function: delete_bill_line", "shortDescription": {"text": "Possibly dead Python function: delete_bill_line"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ef8cb333a963823", "name": "Possibly dead Python function: delete_bill", "shortDescription": {"text": "Possibly dead Python function: delete_bill"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f72aef8c0f0dea6", "name": "Possibly dead Python function: set_credentials", "shortDescription": {"text": "Possibly dead Python function: set_credentials"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb9feb629166011b", "name": "Possibly dead Python function: fetch_by_imo", "shortDescription": {"text": "Possibly dead Python function: fetch_by_imo"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c01fa97b0d4fdcd", "name": "Possibly dead Python function: sap_callback", "shortDescription": {"text": "Possibly dead Python function: sap_callback"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75ce246712128481", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44c2ac84449042fa", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01c6cca11ce92890", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9c89741ea4363d39", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e55dde7b1d018848", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c86f5c64841ee5c1", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07c47d45232134e9", "name": "Icon-only button without accessible name \u2014 .tmp_ldud01_script_check.js:331", "shortDescription": {"text": "Icon-only button without accessible name \u2014 .tmp_ldud01_script_check.js:331"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17a67c09f6b3f02a", "name": "Insecure pattern 'debug_true' in app.py:516", "shortDescription": {"text": "Insecure pattern 'debug_true' in app.py:516"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad9a9fc9dfa9d2b8", "name": "Insecure pattern 'direct_innerhtml_assignment' in .tmp_ldud01_script_check.js:438", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .tmp_ldud01_script_check.js:438"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3bc32a2b9d504d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/password-strength.js:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/password-strength.js:67"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-341779dacd8dc06a", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/AUD01/aud01.html:274", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/AUD01/aud01.html:274"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d62ccda85acd0238", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/port_map/port_map.html:585", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/port_map/port_map.html:585"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57a69c254a44a2a0", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/dashboard/dashboard.html:471", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/dashboard/dashboard.html:471"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e6e21ddf7268646e", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_barge_report/mv_barge_report.html:1350", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_barge_report/mv_barge_report.html:1350"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a870022e074c2a67", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_master/mbc_master_list.html:1218", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_master/mbc_master_list.html:1218"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8835fecde2c01f4b", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/historical_data/historical_data.html:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/historical_data/historical_data.html:61"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a884b04fecd4ec6", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_ops/daily_ops.html:765", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_ops/daily_ops.html:765"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-de421e60485e5422", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mv_mbc_month_report/mv_mbc_report.html:812", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mv_mbc_month_report/mv_mbc_report.html:812"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2148e7485fdaeef4", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_tat/mbc_tat_report.html:322", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_tat/mbc_tat_report.html:322"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d31b2b1c84fd7447", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/custom_report/custom_report.html:718", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/custom_report/custom_report.html:718"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4ed0bf9d8a37437", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/barge_report/barge_report.html:255", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/barge_report/barge_report.html:255"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d40875cc5ca3c8b", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/live_dashboard/live_dashboard.html:672", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/live_dashboard/live_dashboard.html:672"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65db858cb010888a", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FSTM01/fstm01.html:255", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FSTM01/fstm01.html:255"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-373ab95429653580", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/LDUD01/ldud01.html:1129", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LDUD01/ldud01.html:1129"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae353dee07d134f2", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bills.html:141", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bills.html:141"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae262771a4e05723", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bill_view.html:178", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bill_view.html:178"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f5b1fa136499cdc6", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_invoice.html:246", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_invoice.html:246"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b00d3c89385c34ad", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_bill.html:284", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_bill.html:284"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-36f2bad0cc5eed28", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCRM01/fcrm01.html:111", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCRM01/fcrm01.html:111"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea772b62174e7e3b", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/VAM01/vam01.html:167", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VAM01/vam01.html:167"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b85c8825f3edd45c", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/VC01/vc01.html:419", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VC01/vc01.html:419"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4bf1cf5f66e0dfd9", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FDCN01/fdcn01_entry.html:303", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FDCN01/fdcn01_entry.html:303"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76773f2ed1d7c584", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCN01/vcn01.html:796", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCN01/vcn01.html:796"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f812835416d7ad55", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FGRM01/fgrm01.html:95", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FGRM01/fgrm01.html:95"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-beee890f60e708e0", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCN01/fcn01.html:185", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCN01/fcn01.html:185"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f885488f263551b9", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FLOG01/flog01.html:159", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FLOG01/flog01.html:159"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e40380a6f827bf9", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/SRV01/srv01.html:263", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/SRV01/srv01.html:263"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39dff57f5d839b34", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/VIEM01/viem01.html:177", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VIEM01/viem01.html:177"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c74636e17f923aed", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCUM01/vcum01.html:163", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCUM01/vcum01.html:163"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc3e989730846b40", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_generate_invoice.html:321", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_generate_invoice.html:321"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-263bcc6f94918415", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/generate_invoice.html:227", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/generate_invoice.html:227"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb1a30c87ffab837", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_doc_series.html:119", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_doc_series.html:119"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd260dee935ab628", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCAM01/entry.html:298", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCAM01/entry.html:298"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-05b33105fb1769f9", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/MBC01/mbc01.html:820", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/MBC01/mbc01.html:820"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c8f323ce4cbfa19", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01.html:417", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01.html:417"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1031922f3c28b309", "name": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01_dashboard.html:477", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01_dashboard.html:477"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f810f72543b4c309", "name": "Very large file: populate_mock_data.py (1350 lines)", "shortDescription": {"text": "Very large file: populate_mock_data.py (1350 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-4f933ba8c6b610ee", "name": "Very large file: .tmp_ldud01_script_check.js (1085 lines)", "shortDescription": {"text": "Very large file: .tmp_ldud01_script_check.js (1085 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-8f2521e21726627b", "name": "Very large file: modules/RP01/RP01/daily_barge_report/views.py (2272 lines)", "shortDescription": {"text": "Very large file: modules/RP01/RP01/daily_barge_report/views.py (2272 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-fd12d2210c94321b", "name": "Very large file: modules/RP01/RP01/mbc_master/views.py (1417 lines)", "shortDescription": {"text": "Very large file: modules/RP01/RP01/mbc_master/views.py (1417 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-90052debadf0e01c", "name": "Very large file: modules/RP01/RP01/daily_ops/views.py (5798 lines)", "shortDescription": {"text": "Very large file: modules/RP01/RP01/daily_ops/views.py (5798 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-3a4bd9f38dce0f4a", "name": "Very large file: modules/FINV01/views.py (1540 lines)", "shortDescription": {"text": "Very large file: modules/FINV01/views.py (1540 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-ab020706c3dc4c93", "name": "Very large file: modules/LUEU01/model.py (1217 lines)", "shortDescription": {"text": "Very large file: modules/LUEU01/model.py (1217 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "7 test file(s) for 299 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01f96f71d9907a8c", "name": "README lacks setup or run instructions", "shortDescription": {"text": "README lacks setup or run instructions"}, "fullDescription": {"text": "A README exists, but it does not contain common install/setup/run markers. This matches a frequent generated-code pattern: UI is present, operational handoff is thin."}, "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 214 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "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 license, ci, operator-readme. 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-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49a726e96ea5878a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_fin01_invoices.js:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_fin01_invoices.js:86"}, "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-07956e9770cc0056", "name": "Legacy-named symbol `test_apply_resolutions_empty_returns_copy` in test_rp01_historical.py:126", "shortDescription": {"text": "Legacy-named symbol `test_apply_resolutions_empty_returns_copy` in test_rp01_historical.py:126"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a612c0c292df301e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_tm01_script_check.js:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_tm01_script_check.js:77"}, "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-0c2b2ce873a9d241", "name": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_ldud01_script_check.js:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_ldud01_script_check.js:40"}, "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-d0ca8e720b5f1b8e", "name": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_discharged/views.py:627", "shortDescription": {"text": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_discharged/views.py:627"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2fddae90abf1908", "name": "Commented-code block (5 lines) in modules/RP01/RP01/port_map/views.py:143", "shortDescription": {"text": "Commented-code block (5 lines) in modules/RP01/RP01/port_map/views.py:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ae65c92b1540771", "name": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_sof/views.py:97", "shortDescription": {"text": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_sof/views.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4ad6ea8a3dd7b5d", "name": "Commented-code block (5 lines) in modules/RP01/RP01/daily_barge_report/views.py:946", "shortDescription": {"text": "Commented-code block (5 lines) in modules/RP01/RP01/daily_barge_report/views.py:946"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07e432576ae06c1b", "name": "Commented-code block (6 lines) in modules/RP01/RP01/daily_ops/views.py:1157", "shortDescription": {"text": "Commented-code block (6 lines) in modules/RP01/RP01/daily_ops/views.py:1157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54647c4bf101bd21", "name": "Commented-code block (5 lines) in modules/FINV01/views.py:217", "shortDescription": {"text": "Commented-code block (5 lines) in modules/FINV01/views.py:217"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68f35f985f0a45bc", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/cc3dd4ee5ff6_fstm01_sap_gst_gl_and_config_de", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/cc3dd4ee5ff6_fstm01_sap_gst_gl_and_config_defaults.py:29"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-481b938c8f0ff6e7", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/dd3ee4ff5aa6_fstm01_tds_tcs_gl_per_service.p", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/dd3ee4ff5aa6_fstm01_tds_tcs_gl_per_service.py:20"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02ed7fc98b8f1ba1", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/w0x1y2z3a4b5_sap_config_active_repair.py:36", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/w0x1y2z3a4b5_sap_config_active_repair.py:36"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2828346f9977ebce", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/75a1a399c282_merge_port_map_schema.py:21", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/75a1a399c282_merge_port_map_schema.py:21"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b414b7a55b87c27a", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a1b2c3d4e5f6_mail_queue_smtp_config.py:56", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a1b2c3d4e5f6_mail_queue_smtp_config.py:56"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9668c96790dc3e88", "name": "Commented-code block (5 lines) in alembic/versions/a1b2c3d4e5f8_ldud_barge_unique_trip.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in alembic/versions/a1b2c3d4e5f8_ldud_barge_unique_trip.py:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-110f8c8c3bf54963", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/v0w1x2y3z4a5_proof_documents_bytea_repair.py", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/v0w1x2y3z4a5_proof_documents_bytea_repair.py:50"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1add97647fef3e05", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/bb2cc3dd4ee5_password_reset_tokens.py:33", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/bb2cc3dd4ee5_password_reset_tokens.py:33"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fc9a58160227dc92", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a9b0c1d2e3f4_merge_heads.py:16", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a9b0c1d2e3f4_merge_heads.py:16"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65186ed837be1097", "name": "Near-duplicate function bodies in 58 places", "shortDescription": {"text": "Near-duplicate function bodies in 58 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napp.py:login_required, app.py:login, modules/PSMM01/views.py:login_required, modules/CRM01/views.py:login_required\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsap_builder.py:build_invoice_payload, sap_builder.py:build_fdcn_payload\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6297377883dd7783", "name": "Near-duplicate function bodies in 13 places", "shortDescription": {"text": "Near-duplicate function bodies in 13 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/model.py:get_all, modules/VRT01/model.py:get_all, modules/VTOD01/model.py:get_all, modules/VDM01/model.py:get_all\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6431a78879620ea3", "name": "Near-duplicate function bodies in 21 places", "shortDescription": {"text": "Near-duplicate function bodies in 21 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/model.py:get_data, modules/INVDS01/model.py:get_data, modules/VRT01/model.py:get_data, modules/VTOD01/model.py:get_data\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/model.py:save_data, modules/PSM01/model.py:save_data, modules/PSOM01/model.py:save_data\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe1d9311d6aee734", "name": "Near-duplicate function bodies in 12 places", "shortDescription": {"text": "Near-duplicate function bodies in 12 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/model.py:delete_data, modules/VAM01/model.py:delete_data, modules/MBCDS01/model.py:delete_data, modules/VC01/model.py:delete_data\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c54c6fb8e364daaa", "name": "Near-duplicate function bodies in 16 places", "shortDescription": {"text": "Near-duplicate function bodies in 16 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/views.py:get_data, modules/INVDS01/views.py:get_data, modules/VRT01/views.py:get_data, modules/VTOD01/views.py:get_data\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18728ded1c00a072", "name": "Near-duplicate function bodies in 27 places", "shortDescription": {"text": "Near-duplicate function bodies in 27 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/PSMM01/views.py:save, modules/INVDS01/views.py:save, modules/VRT01/views.py:save, modules/VTOD01/views.py:save\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/INVDS01/model.py:delete_data, modules/VRT01/model.py:delete_data, modules/VTOD01/model.py:delete_data, modules/VDM01/model.py:delete_data\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmodules/AUD01/views.py:get_perms, modules/FCN01/views.py:get_perms, modules/FLOG01/views.py:get_perms, modules/TM01/views.py:get_perms\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d271c95dcbe7a3a", "name": "Flask mutation route `login` without `@login_required` \u2014 app.py:255", "shortDescription": {"text": "Flask mutation route `login` without `@login_required` \u2014 app.py:255"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16b6c266d9a7e0cc", "name": "Flask mutation route `send_otp` without `@login_required` \u2014 app.py:279", "shortDescription": {"text": "Flask mutation route `send_otp` without `@login_required` \u2014 app.py:279"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53f427f4f6a3bbbd", "name": "Flask mutation route `verify_otp` without `@login_required` \u2014 app.py:348", "shortDescription": {"text": "Flask mutation route `verify_otp` without `@login_required` \u2014 app.py:348"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-821b1a35422383c8", "name": "Flask mutation route `set_password_otp` without `@login_required` \u2014 app.py:374", "shortDescription": {"text": "Flask mutation route `set_password_otp` without `@login_required` \u2014 app.py:374"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ba0c394bb552b39", "name": "Flask mutation route `historical_preview` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:53", "shortDescription": {"text": "Flask mutation route `historical_preview` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:53"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-124f9f6145e513b2", "name": "Flask mutation route `historical_apply` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:72", "shortDescription": {"text": "Flask mutation route `historical_apply` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:72"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55146ee473e22333", "name": "Flask mutation route `historical_row_update` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:128", "shortDescription": {"text": "Flask mutation route `historical_row_update` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:128"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d3e90cc0bffb0a7", "name": "Flask mutation route `historical_row_delete` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:140", "shortDescription": {"text": "Flask mutation route `historical_row_delete` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:140"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a7a7f18b1d17c9a", "name": "Flask mutation route `save_cargo_table` without `@login_required` \u2014 modules/RP01/RP01/daily_ops/views.py:92", "shortDescription": {"text": "Flask mutation route `save_cargo_table` without `@login_required` \u2014 modules/RP01/RP01/daily_ops/views.py:92"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2de06cfedbc9aba", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/FSTM01/views.py:27", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/FSTM01/views.py:27"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69bc4d3255222f6c", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/FSTM01/views.py:58", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/FSTM01/views.py:58"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d84458c3b7d331b", "name": "Flask mutation route `save_field` without `@login_required` \u2014 modules/FSTM01/views.py:84", "shortDescription": {"text": "Flask mutation route `save_field` without `@login_required` \u2014 modules/FSTM01/views.py:84"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b75a2b01a4318f0", "name": "Flask mutation route `delete_field` without `@login_required` \u2014 modules/FSTM01/views.py:100", "shortDescription": {"text": "Flask mutation route `delete_field` without `@login_required` \u2014 modules/FSTM01/views.py:100"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f47f626259bff518", "name": "Flask mutation route `add_user` without `@login_required` \u2014 modules/ADMIN/views.py:56", "shortDescription": {"text": "Flask mutation route `add_user` without `@login_required` \u2014 modules/ADMIN/views.py:56"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab40d87839ef50e8", "name": "Flask mutation route `reset_password` without `@login_required` \u2014 modules/ADMIN/views.py:82", "shortDescription": {"text": "Flask mutation route `reset_password` without `@login_required` \u2014 modules/ADMIN/views.py:82"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f716ae72f159f3e", "name": "Flask mutation route `edit_user` without `@login_required` \u2014 modules/ADMIN/views.py:98", "shortDescription": {"text": "Flask mutation route `edit_user` without `@login_required` \u2014 modules/ADMIN/views.py:98"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97a4b4859b821b91", "name": "Flask mutation route `send_reset_email` without `@login_required` \u2014 modules/ADMIN/views.py:125", "shortDescription": {"text": "Flask mutation route `send_reset_email` without `@login_required` \u2014 modules/ADMIN/views.py:125"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d108b1b4aeadf24a", "name": "Flask mutation route `delete_user` without `@login_required` \u2014 modules/ADMIN/views.py:202", "shortDescription": {"text": "Flask mutation route `delete_user` without `@login_required` \u2014 modules/ADMIN/views.py:202"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa2bf2a60701cfd9", "name": "Flask mutation route `save_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:252", "shortDescription": {"text": "Flask mutation route `save_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:252"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9952dbe8432885d", "name": "Flask mutation route `save_user_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:297", "shortDescription": {"text": "Flask mutation route `save_user_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:297"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2fcb4ae90debdd", "name": "Flask mutation route `save_config` without `@login_required` \u2014 modules/ADMIN/views.py:342", "shortDescription": {"text": "Flask mutation route `save_config` without `@login_required` \u2014 modules/ADMIN/views.py:342"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-998d3ce358a5f13e", "name": "Flask mutation route `save_sap_config` without `@login_required` \u2014 modules/ADMIN/views.py:365", "shortDescription": {"text": "Flask mutation route `save_sap_config` without `@login_required` \u2014 modules/ADMIN/views.py:365"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec037205c80906e9", "name": "Flask mutation route `test_sap_connection` without `@login_required` \u2014 modules/ADMIN/views.py:449", "shortDescription": {"text": "Flask mutation route `test_sap_connection` without `@login_required` \u2014 modules/ADMIN/views.py:449"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c385b33d0c6a25a", "name": "Flask mutation route `save_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:506", "shortDescription": {"text": "Flask mutation route `save_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:506"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0852327017024961", "name": "Flask mutation route `delete_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:529", "shortDescription": {"text": "Flask mutation route `delete_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:529"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0af9daeea0160e9f", "name": "Flask mutation route `save_smtp_config_route` without `@login_required` \u2014 modules/ADMIN/views.py:554", "shortDescription": {"text": "Flask mutation route `save_smtp_config_route` without `@login_required` \u2014 modules/ADMIN/views.py:554"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e13ed5dd5323e708", "name": "Flask mutation route `retry_failed_mail` without `@login_required` \u2014 modules/ADMIN/views.py:601", "shortDescription": {"text": "Flask mutation route `retry_failed_mail` without `@login_required` \u2014 modules/ADMIN/views.py:601"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fafa45eef5023425", "name": "Flask mutation route `send_mail_now` without `@login_required` \u2014 modules/ADMIN/views.py:616", "shortDescription": {"text": "Flask mutation route `send_mail_now` without `@login_required` \u2014 modules/ADMIN/views.py:616"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c425ee3be87f2a78", "name": "Flask mutation route `open_vessel` without `@login_required` \u2014 modules/ADMIN/views.py:645", "shortDescription": {"text": "Flask mutation route `open_vessel` without `@login_required` \u2014 modules/ADMIN/views.py:645"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3fcff6a21b0c0a8", "name": "Flask mutation route `save_aud_config` without `@login_required` \u2014 modules/ADMIN/views.py:691", "shortDescription": {"text": "Flask mutation route `save_aud_config` without `@login_required` \u2014 modules/ADMIN/views.py:691"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de078cf4f464dfad", "name": "Flask mutation route `clear_logs` without `@login_required` \u2014 modules/ADMIN/views.py:717", "shortDescription": {"text": "Flask mutation route `clear_logs` without `@login_required` \u2014 modules/ADMIN/views.py:717"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a95f699eefbbbb80", "name": "Flask mutation route `reset_mbc_approval` without `@login_required` \u2014 modules/ADMIN/views.py:789", "shortDescription": {"text": "Flask mutation route `reset_mbc_approval` without `@login_required` \u2014 modules/ADMIN/views.py:789"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08eff7a47a5b427a", "name": "Flask mutation route `generate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:822", "shortDescription": {"text": "Flask mutation route `generate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:822"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34499b71fbe940d5", "name": "Flask mutation route `revoke_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:836", "shortDescription": {"text": "Flask mutation route `revoke_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:836"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bb0de1b322e0ce8", "name": "Flask mutation route `reactivate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:846", "shortDescription": {"text": "Flask mutation route `reactivate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:846"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb4567b215bd3160", "name": "Flask mutation route `playground_build_payload` without `@login_required` \u2014 modules/ADMIN/views.py:877", "shortDescription": {"text": "Flask mutation route `playground_build_payload` without `@login_required` \u2014 modules/ADMIN/views.py:877"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c258ab97b61444fb", "name": "Flask mutation route `playground_send` without `@login_required` \u2014 modules/ADMIN/views.py:914", "shortDescription": {"text": "Flask mutation route `playground_send` without `@login_required` \u2014 modules/ADMIN/views.py:914"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58fb0657d24aa353", "name": "Flask mutation route `cutover_invoice_seed` without `@login_required` \u2014 modules/ADMIN/views.py:975", "shortDescription": {"text": "Flask mutation route `cutover_invoice_seed` without `@login_required` \u2014 modules/ADMIN/views.py:975"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc36cf8eb7f547ff", "name": "Flask mutation route `cutover_bill_seed` without `@login_required` \u2014 modules/ADMIN/views.py:993", "shortDescription": {"text": "Flask mutation route `cutover_bill_seed` without `@login_required` \u2014 modules/ADMIN/views.py:993"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b8ffbc0c7c97780", "name": "Flask mutation route `cutover_mark_billed` without `@login_required` \u2014 modules/ADMIN/views.py:1007", "shortDescription": {"text": "Flask mutation route `cutover_mark_billed` without `@login_required` \u2014 modules/ADMIN/views.py:1007"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c953691923a8029", "name": "Flask mutation route `cutover_lock` without `@login_required` \u2014 modules/ADMIN/views.py:1020", "shortDescription": {"text": "Flask mutation route `cutover_lock` without `@login_required` \u2014 modules/ADMIN/views.py:1020"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6bf11fc0ddbab12", "name": "Flask mutation route `save_bill` without `@login_required` \u2014 modules/FIN01/views.py:236", "shortDescription": {"text": "Flask mutation route `save_bill` without `@login_required` \u2014 modules/FIN01/views.py:236"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-652f00066208097e", "name": "Flask mutation route `approve_bill` without `@login_required` \u2014 modules/FIN01/views.py:331", "shortDescription": {"text": "Flask mutation route `approve_bill` without `@login_required` \u2014 modules/FIN01/views.py:331"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9185b32bb7f7b78e", "name": "Flask mutation route `submit_bill` without `@login_required` \u2014 modules/FIN01/views.py:358", "shortDescription": {"text": "Flask mutation route `submit_bill` without `@login_required` \u2014 modules/FIN01/views.py:358"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5daca2a364984b93", "name": "Flask mutation route `reject_bill` without `@login_required` \u2014 modules/FIN01/views.py:386", "shortDescription": {"text": "Flask mutation route `reject_bill` without `@login_required` \u2014 modules/FIN01/views.py:386"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09a659d6b15955e4", "name": "Flask mutation route `save_currency` without `@login_required` \u2014 modules/FCRM01/views.py:40", "shortDescription": {"text": "Flask mutation route `save_currency` without `@login_required` \u2014 modules/FCRM01/views.py:40"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c125d1792e20068", "name": "Flask mutation route `delete_currency` without `@login_required` \u2014 modules/FCRM01/views.py:58", "shortDescription": {"text": "Flask mutation route `delete_currency` without `@login_required` \u2014 modules/FCRM01/views.py:58"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-759a6211bd099f39", "name": "Flask mutation route `save_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:91", "shortDescription": {"text": "Flask mutation route `save_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:91"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f9c8e424d86c3d4", "name": "Flask mutation route `delete_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:109", "shortDescription": {"text": "Flask mutation route `delete_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:109"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fc984e1d9adecf1", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/VHO01/views.py:21", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VHO01/views.py:21"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28870fc37dd52e3c", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHO01/views.py:27", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHO01/views.py:27"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa7dd44bf118e594", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/VHM01/views.py:21", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VHM01/views.py:21"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb17922289471764", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHM01/views.py:27", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHM01/views.py:27"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f781092723aecfc", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/FGRM01/views.py:23", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/FGRM01/views.py:23"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2292ec1d34d1a06", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/FGRM01/views.py:41", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/FGRM01/views.py:41"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce8a73f0db22d946", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/SRV01/views.py:93", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/SRV01/views.py:93"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8a8aaa267d23d5a", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/SRV01/views.py:147", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/SRV01/views.py:147"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bcad3fdc8108376", "name": "Flask mutation route `approve` without `@login_required` \u2014 modules/SRV01/views.py:162", "shortDescription": {"text": "Flask mutation route `approve` without `@login_required` \u2014 modules/SRV01/views.py:162"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-307f8694d1dfe3ee", "name": "Flask mutation route `create_invoice` without `@login_required` \u2014 modules/FINV01/views.py:252", "shortDescription": {"text": "Flask mutation route `create_invoice` without `@login_required` \u2014 modules/FINV01/views.py:252"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86a94ecd00ff9e94", "name": "Flask mutation route `export_gstr1_b2b` without `@login_required` \u2014 modules/FINV01/views.py:766", "shortDescription": {"text": "Flask mutation route `export_gstr1_b2b` without `@login_required` \u2014 modules/FINV01/views.py:766"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d98f704ce3e0441b", "name": "Flask mutation route `retry_sap` without `@login_required` \u2014 modules/FINV01/views.py:836", "shortDescription": {"text": "Flask mutation route `retry_sap` without `@login_required` \u2014 modules/FINV01/views.py:836"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d5d120b6808e60c", "name": "Flask mutation route `fetch_irn` without `@login_required` \u2014 modules/FINV01/views.py:867", "shortDescription": {"text": "Flask mutation route `fetch_irn` without `@login_required` \u2014 modules/FINV01/views.py:867"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4eaeaa3295b0b1cd", "name": "Flask mutation route `cancel_invoice_sap` without `@login_required` \u2014 modules/FINV01/views.py:911", "shortDescription": {"text": "Flask mutation route `cancel_invoice_sap` without `@login_required` \u2014 modules/FINV01/views.py:911"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f892a956475d7b17", "name": "Flask mutation route `create_cancellation_cn` without `@login_required` \u2014 modules/FINV01/views.py:982", "shortDescription": {"text": "Flask mutation route `create_cancellation_cn` without `@login_required` \u2014 modules/FINV01/views.py:982"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5844c5614aef5118", "name": "Flask mutation route `save_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1468", "shortDescription": {"text": "Flask mutation route `save_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1468"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c40fbd20c145f223", "name": "Flask mutation route `delete_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1495", "shortDescription": {"text": "Flask mutation route `delete_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1495"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69b1d0ec53324757", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/GSTCFG/views.py:26", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/GSTCFG/views.py:26"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41c11ac2710edcb4", "name": "Flask mutation route `set_active` without `@login_required` \u2014 modules/GSTCFG/views.py:34", "shortDescription": {"text": "Flask mutation route `set_active` without `@login_required` \u2014 modules/GSTCFG/views.py:34"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd1123a0c196223c", "name": "Flask mutation route `set_default` without `@login_required` \u2014 modules/VQM01/views.py:42", "shortDescription": {"text": "Flask mutation route `set_default` without `@login_required` \u2014 modules/VQM01/views.py:42"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fd03d969c76eb38", "name": "Flask mutation route `save` without `@login_required` \u2014 modules/VQM01/views.py:48", "shortDescription": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VQM01/views.py:48"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-322bff381278b527", "name": "Flask mutation route `delete` without `@login_required` \u2014 modules/VQM01/views.py:54", "shortDescription": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VQM01/views.py:54"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caae24b3ea952ad9", "name": "Flask mutation route `save_header` without `@login_required` \u2014 modules/FCAM01/views.py:98", "shortDescription": {"text": "Flask mutation route `save_header` without `@login_required` \u2014 modules/FCAM01/views.py:98"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e4c7464af2d302a", "name": "Flask mutation route `save_line` without `@login_required` \u2014 modules/FCAM01/views.py:139", "shortDescription": {"text": "Flask mutation route `save_line` without `@login_required` \u2014 modules/FCAM01/views.py:139"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3580d64985e05a8", "name": "Flask mutation route `save_lines_batch` without `@login_required` \u2014 modules/FCAM01/views.py:153", "shortDescription": {"text": "Flask mutation route `save_lines_batch` without `@login_required` \u2014 modules/FCAM01/views.py:153"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac51b7aa0f80c86c", "name": "Flask mutation route `delete_line` without `@login_required` \u2014 modules/FCAM01/views.py:173", "shortDescription": {"text": "Flask mutation route `delete_line` without `@login_required` \u2014 modules/FCAM01/views.py:173"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a020aad711b9ffe", "name": "Flask mutation route `delete_header` without `@login_required` \u2014 modules/FCAM01/views.py:187", "shortDescription": {"text": "Flask mutation route `delete_header` without `@login_required` \u2014 modules/FCAM01/views.py:187"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-247750fc90b3bc7d", "name": "Flask mutation route `approve` without `@login_required` \u2014 modules/FCAM01/views.py:211", "shortDescription": {"text": "Flask mutation route `approve` without `@login_required` \u2014 modules/FCAM01/views.py:211"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c81faff62e26d59", "name": "Dangling fetch: POST /api/module/FIN01/export/gstr1-b2b (.tmp_fin01_invoices.js:86)", "shortDescription": {"text": "Dangling fetch: POST /api/module/FIN01/export/gstr1-b2b (.tmp_fin01_invoices.js:86)"}, "fullDescription": {"text": "`.tmp_fin01_invoices.js:86` calls `POST /api/module/FIN01/export/gstr1-b2b` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/fin01/export/gstr1-b2b`\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-4f03041e32d00cb2", "name": "Dangling fetch: POST /api/module/FIN01/export/einvoice (.tmp_fin01_invoices.js:121)", "shortDescription": {"text": "Dangling fetch: POST /api/module/FIN01/export/einvoice (.tmp_fin01_invoices.js:121)"}, "fullDescription": {"text": "`.tmp_fin01_invoices.js:121` calls `POST /api/module/FIN01/export/einvoice` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/fin01/export/einvoice`\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-3f2406cc916f1fa4", "name": "Dangling fetch: GET /api/module/VCTM01/all (.tmp_ldud01_script_check.js:43)", "shortDescription": {"text": "Dangling fetch: GET /api/module/VCTM01/all (.tmp_ldud01_script_check.js:43)"}, "fullDescription": {"text": "`.tmp_ldud01_script_check.js:43` calls `GET /api/module/VCTM01/all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/vctm01/all`\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-3fe492c979819731", "name": "Dangling fetch: GET /api/module/VCN01/stowage/${vcnId} (.tmp_ldud01_script_check.js:560)", "shortDescription": {"text": "Dangling fetch: GET /api/module/VCN01/stowage/${vcnId} (.tmp_ldud01_script_check.js:560)"}, "fullDescription": {"text": "`.tmp_ldud01_script_check.js:560` calls `GET /api/module/VCN01/stowage/${vcnId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/vcn01/stowage/<p>`\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-9e64efeb8de9512b", "name": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:954)", "shortDescription": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:954)"}, "fullDescription": {"text": "`.tmp_ldud01_script_check.js:954` calls `POST /api/module/LDUD01/${type}/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/ldud01/<p>/save`\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-77c041be8812937c", "name": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:983)", "shortDescription": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:983)"}, "fullDescription": {"text": "`.tmp_ldud01_script_check.js:983` calls `POST /api/module/LDUD01/${type}/save` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/ldud01/<p>/save`\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-4c4daf35db57a4f4", "name": "Dangling fetch: POST /api/module/LDUD01/${type}/delete (.tmp_ldud01_script_check.js:1008)", "shortDescription": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/delete (.tmp_ldud01_script_check.js:1008)"}, "fullDescription": {"text": "`.tmp_ldud01_script_check.js:1008` calls `POST /api/module/LDUD01/${type}/delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/module/ldud01/<p>/delete`\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-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`app.py` declares `ANY /` 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-4c7ad61ba1b23915", "name": "Unused endpoint: ANY /login", "shortDescription": {"text": "Unused endpoint: ANY /login"}, "fullDescription": {"text": "`app.py` declares `ANY /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-c9e449c3b9e73b73", "name": "Unused endpoint: ANY /logout", "shortDescription": {"text": "Unused endpoint: ANY /logout"}, "fullDescription": {"text": "`app.py` declares `ANY /logout` 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-b577c85c602a5a0a", "name": "Unused endpoint: ANY /auth/send-otp", "shortDescription": {"text": "Unused endpoint: ANY /auth/send-otp"}, "fullDescription": {"text": "`app.py` declares `ANY /auth/send-otp` 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-ed59dee67734c161", "name": "Unused endpoint: ANY /auth/verify-otp", "shortDescription": {"text": "Unused endpoint: ANY /auth/verify-otp"}, "fullDescription": {"text": "`app.py` declares `ANY /auth/verify-otp` 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-0522d7e7bbf92b67", "name": "Unused endpoint: ANY /auth/set-password", "shortDescription": {"text": "Unused endpoint: ANY /auth/set-password"}, "fullDescription": {"text": "`app.py` declares `ANY /auth/set-password` 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-baebe42c1606eaf4", "name": "Unused endpoint: ANY /home", "shortDescription": {"text": "Unused endpoint: ANY /home"}, "fullDescription": {"text": "`app.py` declares `ANY /home` 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-d611692bd710bb6c", "name": "Unused endpoint: ANY /api/modules/search", "shortDescription": {"text": "Unused endpoint: ANY /api/modules/search"}, "fullDescription": {"text": "`app.py` declares `ANY /api/modules/search` 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-693ae7724121812d", "name": "Unused endpoint: ANY /api/saved-filters/<module_code>", "shortDescription": {"text": "Unused endpoint: ANY /api/saved-filters/<module_code>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/saved-filters/<module_code>` 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-e61e8e6f7546d1fa", "name": "Unused endpoint: ANY /api/saved-filters", "shortDescription": {"text": "Unused endpoint: ANY /api/saved-filters"}, "fullDescription": {"text": "`app.py` declares `ANY /api/saved-filters` 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-c41365fd3b130869", "name": "Unused endpoint: ANY /api/saved-filters/<int:filter_id>", "shortDescription": {"text": "Unused endpoint: ANY /api/saved-filters/<int:filter_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/saved-filters/<int:filter_id>` 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-35f8653f309630aa", "name": "Unused endpoint: ANY /module/PSMM01/", "shortDescription": {"text": "Unused endpoint: ANY /module/PSMM01/"}, "fullDescription": {"text": "`modules/PSMM01/views.py` declares `ANY /module/PSMM01/` 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-b9b55a63af58bb0c", "name": "Unused endpoint: ANY /api/module/PSMM01/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/PSMM01/data"}, "fullDescription": {"text": "`modules/PSMM01/views.py` declares `ANY /api/module/PSMM01/data` 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-03c0df81b89bf8e8", "name": "Unused endpoint: ANY /api/module/PSMM01/all", "shortDescription": {"text": "Unused endpoint: ANY /api/module/PSMM01/all"}, "fullDescription": {"text": "`modules/PSMM01/views.py` declares `ANY /api/module/PSMM01/all` 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-10cb22ae2732f1ac", "name": "Unused endpoint: ANY /api/module/PSMM01/save", "shortDescription": {"text": "Unused endpoint: ANY /api/module/PSMM01/save"}, "fullDescription": {"text": "`modules/PSMM01/views.py` declares `ANY /api/module/PSMM01/save` 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-61cbe04fa204ff39", "name": "Unused endpoint: ANY /api/module/PSMM01/delete", "shortDescription": {"text": "Unused endpoint: ANY /api/module/PSMM01/delete"}, "fullDescription": {"text": "`modules/PSMM01/views.py` declares `ANY /api/module/PSMM01/delete` 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-7aa3d90e7d4d9712", "name": "Unused endpoint: ANY /module/CRM01/", "shortDescription": {"text": "Unused endpoint: ANY /module/CRM01/"}, "fullDescription": {"text": "`modules/CRM01/views.py` declares `ANY /module/CRM01/` 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-568f480817febf2b", "name": "Unused endpoint: ANY /api/module/CRM01/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/CRM01/data"}, "fullDescription": {"text": "`modules/CRM01/views.py` declares `ANY /api/module/CRM01/data` 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-bef740ac927676ae", "name": "Unused endpoint: ANY /api/module/CRM01/all", "shortDescription": {"text": "Unused endpoint: ANY /api/module/CRM01/all"}, "fullDescription": {"text": "`modules/CRM01/views.py` declares `ANY /api/module/CRM01/all` 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-9f63cf8a2890b26e", "name": "Unused endpoint: ANY /api/module/CRM01/save", "shortDescription": {"text": "Unused endpoint: ANY /api/module/CRM01/save"}, "fullDescription": {"text": "`modules/CRM01/views.py` declares `ANY /api/module/CRM01/save` 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-0c2559a4551ef183", "name": "Unused endpoint: ANY /api/module/CRM01/delete", "shortDescription": {"text": "Unused endpoint: ANY /api/module/CRM01/delete"}, "fullDescription": {"text": "`modules/CRM01/views.py` declares `ANY /api/module/CRM01/delete` 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-3775173156666e9b", "name": "Unused endpoint: ANY /module/INVDS01/", "shortDescription": {"text": "Unused endpoint: ANY /module/INVDS01/"}, "fullDescription": {"text": "`modules/INVDS01/views.py` declares `ANY /module/INVDS01/` 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-a2c979942f2a5f55", "name": "Unused endpoint: ANY /api/module/INVDS01/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/INVDS01/data"}, "fullDescription": {"text": "`modules/INVDS01/views.py` declares `ANY /api/module/INVDS01/data` 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-1f1998ea610f8c16", "name": "Unused endpoint: ANY /api/module/INVDS01/all", "shortDescription": {"text": "Unused endpoint: ANY /api/module/INVDS01/all"}, "fullDescription": {"text": "`modules/INVDS01/views.py` declares `ANY /api/module/INVDS01/all` 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-a74d52a624167955", "name": "Unused endpoint: ANY /api/module/INVDS01/save", "shortDescription": {"text": "Unused endpoint: ANY /api/module/INVDS01/save"}, "fullDescription": {"text": "`modules/INVDS01/views.py` declares `ANY /api/module/INVDS01/save` 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-e9df1880595b9532", "name": "Unused endpoint: ANY /api/module/INVDS01/delete", "shortDescription": {"text": "Unused endpoint: ANY /api/module/INVDS01/delete"}, "fullDescription": {"text": "`modules/INVDS01/views.py` declares `ANY /api/module/INVDS01/delete` 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-bb605d872dbb5139", "name": "Unused endpoint: ANY /module/AUD01/", "shortDescription": {"text": "Unused endpoint: ANY /module/AUD01/"}, "fullDescription": {"text": "`modules/AUD01/views.py` declares `ANY /module/AUD01/` 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-c0878ee62cb4c42a", "name": "Unused endpoint: ANY /api/module/AUD01/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/AUD01/data"}, "fullDescription": {"text": "`modules/AUD01/views.py` declares `ANY /api/module/AUD01/data` 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-2dca6be2e06b2a82", "name": "Unused endpoint: ANY /api/module/AUD01/export", "shortDescription": {"text": "Unused endpoint: ANY /api/module/AUD01/export"}, "fullDescription": {"text": "`modules/AUD01/views.py` declares `ANY /api/module/AUD01/export` 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-7f2903161a9ef982", "name": "Unused endpoint: ANY /module/RP01/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/"}, "fullDescription": {"text": "`modules/RP01/RP01/views.py` declares `ANY /module/RP01/` 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-3d84dd484a99f76f", "name": "Unused endpoint: ANY /module/RP01/vessel-discharged/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/vessel-discharged/"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_discharged/views.py` declares `ANY /module/RP01/vessel-discharged/` 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-d726a08789c5b463", "name": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/data"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_discharged/views.py` declares `ANY /api/module/RP01/vessel-discharged/data` 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-87eb46e7a5bde3b7", "name": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/download-all", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/download-all"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_discharged/views.py` declares `ANY /api/module/RP01/vessel-discharged/download-all` 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-a4ed6104e776ad02", "name": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/download", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/download"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_discharged/views.py` declares `ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/download` 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-41af469278eaa2bc", "name": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/preview", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/preview"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_discharged/views.py` declares `ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/preview` 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-1791e33112f4f712", "name": "Unused endpoint: ANY /module/RP01/port-map/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/port-map/"}, "fullDescription": {"text": "`modules/RP01/RP01/port_map/views.py` declares `ANY /module/RP01/port-map/` 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-c112968e9a3b0840", "name": "Unused endpoint: ANY /api/module/RP01/port-map/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/port-map/data"}, "fullDescription": {"text": "`modules/RP01/RP01/port_map/views.py` declares `ANY /api/module/RP01/port-map/data` 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-2ba03a2f50578043", "name": "Unused endpoint: ANY /api/module/RP01/vessel-sof/vessels", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-sof/vessels"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_sof/views.py` declares `ANY /api/module/RP01/vessel-sof/vessels` 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-df7a0df1df24fc41", "name": "Unused endpoint: ANY /module/RP01/vessel-sof/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/vessel-sof/"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_sof/views.py` declares `ANY /module/RP01/vessel-sof/` 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-beaa795d9929f768", "name": "Unused endpoint: ANY /module/RP01/barge-sof/<int:ldud_id>/<barge_name>", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/barge-sof/<int:ldud_id>/<barge_name>"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_sof/views.py` declares `ANY /module/RP01/barge-sof/<int:ldud_id>/<barge_name>` 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-046ad55247164764", "name": "Unused endpoint: ANY /module/RP01/vessel-sof/<int:ldud_id>", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/vessel-sof/<int:ldud_id>"}, "fullDescription": {"text": "`modules/RP01/RP01/vessel_sof/views.py` declares `ANY /module/RP01/vessel-sof/<int:ldud_id>` 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-6ed487fcf4da739c", "name": "Unused endpoint: ANY /module/RP01/report_24_hours/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/report_24_hours/"}, "fullDescription": {"text": "`modules/RP01/RP01/report_24_hours/views.py` declares `ANY /module/RP01/report_24_hours/` 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-cc711674ba5773d5", "name": "Unused endpoint: ANY /module/RP01/api/report_24_hours", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/api/report_24_hours"}, "fullDescription": {"text": "`modules/RP01/RP01/report_24_hours/views.py` declares `ANY /module/RP01/api/report_24_hours` 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-f752ec895da1d6e8", "name": "Unused endpoint: ANY /module/RP01/dashboard/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/dashboard/"}, "fullDescription": {"text": "`modules/RP01/RP01/dashboard/views.py` declares `ANY /module/RP01/dashboard/` 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-72f81ee24a5d4ea5", "name": "Unused endpoint: ANY /module/RP01/mv-barge-report/", "shortDescription": {"text": "Unused endpoint: ANY /module/RP01/mv-barge-report/"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /module/RP01/mv-barge-report/` 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-bc5de48f7dbbd722", "name": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/data"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /api/module/RP01/mv-barge-report/data` 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-3e472a1c2a53a860", "name": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/download-all", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/download-all"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /api/module/RP01/mv-barge-report/download-all` 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-087140815920ff72", "name": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/<int:barge_line_id>/download", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/<int:barge_line_id>/download"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /api/module/RP01/mv-barge-report/<int:barge_line_id>/download` 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-b470ec2c753cdd12", "name": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/mbc-data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/mbc-data"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /api/module/RP01/mv-barge-report/mbc-data` 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-ac63d67c951ef7b6", "name": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/shift-data", "shortDescription": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/shift-data"}, "fullDescription": {"text": "`modules/RP01/RP01/daily_barge_report/views.py` declares `ANY /api/module/RP01/mv-barge-report/shift-data` 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/19586"}, "properties": {"repository": "shubhamshnd/PORTMAN", "repoUrl": "https://github.com/shubhamshnd/PORTMAN", "branch": "main"}, "results": [{"ruleId": "scanner-0412bd9e173dbcf2", "level": "note", "message": {"text": "Possibly dead Python function: cancel_irn"}, "properties": {"repobilityId": "0f812e7c6ae102ec", "scanner": "scanner-primary", "fingerprint": "0412bd9e173dbcf2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "gsp_client.py:274"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bce6843e37da0e18", "level": "note", "message": {"text": "Possibly dead Python function: populate_discharge_types"}, "properties": {"repobilityId": "7f73dff5c4d2199b", "scanner": "scanner-primary", "fingerprint": "bce6843e37da0e18", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "populate_mock_data.py:234"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b6a8a37a49bbabc1", "level": "note", "message": {"text": "Possibly dead Python function: sap_callback_view"}, "properties": {"repobilityId": "4a6a74eee8246adc", "scanner": "scanner-primary", "fingerprint": "b6a8a37a49bbabc1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sap_inbound.py:311"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e38b570067c02e20", "level": "note", "message": {"text": "Possibly dead Python function: build_einvoice_from_fdcn"}, "properties": {"repobilityId": "1aaac87e4f47da18", "scanner": "scanner-primary", "fingerprint": "e38b570067c02e20", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "einvoice_builder.py:251"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a12e81a702e4c81", "level": "note", "message": {"text": "Possibly dead Python function: delete_bill_line"}, "properties": {"repobilityId": "f19a618516b307dc", "scanner": "scanner-primary", "fingerprint": "6a12e81a702e4c81", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/model.py:439"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8ef8cb333a963823", "level": "note", "message": {"text": "Possibly dead Python function: delete_bill"}, "properties": {"repobilityId": "0a6f261c13c9d6de", "scanner": "scanner-primary", "fingerprint": "8ef8cb333a963823", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/model.py:465"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f72aef8c0f0dea6", "level": "note", "message": {"text": "Possibly dead Python function: set_credentials"}, "properties": {"repobilityId": "4ff0c916a9ec8181", "scanner": "scanner-primary", "fingerprint": "1f72aef8c0f0dea6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VC01/equasis_rpa.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb9feb629166011b", "level": "note", "message": {"text": "Possibly dead Python function: fetch_by_imo"}, "properties": {"repobilityId": "4675a53ebf167e95", "scanner": "scanner-primary", "fingerprint": "cb9feb629166011b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VC01/equasis_rpa.py:336"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c01fa97b0d4fdcd", "level": "note", "message": {"text": "Possibly dead Python function: sap_callback"}, "properties": {"repobilityId": "695ed2bd00177cd2", "scanner": "scanner-primary", "fingerprint": "7c01fa97b0d4fdcd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSAP01/model.py:436"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-75ce246712128481", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "75ce246712128481", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/y5z6a7b8c9d0_vc01_num_cranes.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-44c2ac84449042fa", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "44c2ac84449042fa", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/m1n2o3p4q5r6_invoice_sap_error_column.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-01c6cca11ce92890", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "01c6cca11ce92890", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/q7r8s9t0u1v2_vcn_export_cargo_declaration.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9c89741ea4363d39", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "9c89741ea4363d39", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/e1f2a3b4c5d6_approval_log_and_draft_status.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e55dde7b1d018848", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "e55dde7b1d018848", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/i6j7k8l9m0n1_fcam01_nullable_service_type.py:16"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c86f5c64841ee5c1", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "c86f5c64841ee5c1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/s8t9u0v1w2x3_ldud_proof_bytea.py:15"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07c47d45232134e9", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 .tmp_ldud01_script_check.js:331"}, "properties": {"repobilityId": "fa4f9f0847b9e961", "scanner": "scanner-primary", "fingerprint": "07c47d45232134e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-17a67c09f6b3f02a", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in app.py:516"}, "properties": {"repobilityId": "820a29d1c28c9121", "scanner": "scanner-primary", "fingerprint": "17a67c09f6b3f02a", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 516}}}]}, {"ruleId": "scanner-ad9a9fc9dfa9d2b8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .tmp_ldud01_script_check.js:438"}, "properties": {"repobilityId": "2fad80891cfe352a", "scanner": "scanner-primary", "fingerprint": "ad9a9fc9dfa9d2b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".tmp_ldud01_script_check.js"}, "region": {"startLine": 438}}}]}, {"ruleId": "scanner-e3bc32a2b9d504d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/password-strength.js:67"}, "properties": {"repobilityId": "9a235e4ab2914114", "scanner": "scanner-primary", "fingerprint": "e3bc32a2b9d504d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/password-strength.js"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-341779dacd8dc06a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/AUD01/aud01.html:274"}, "properties": {"repobilityId": "3ae61b3530c4bf07", "scanner": "scanner-primary", "fingerprint": "341779dacd8dc06a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/AUD01/aud01.html"}, "region": {"startLine": 274}}}]}, {"ruleId": "scanner-d62ccda85acd0238", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/port_map/port_map.html:585"}, "properties": {"repobilityId": "013ce32a959f369f", "scanner": "scanner-primary", "fingerprint": "d62ccda85acd0238", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/port_map/port_map.html"}, "region": {"startLine": 585}}}]}, {"ruleId": "scanner-57a69c254a44a2a0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/dashboard/dashboard.html:471"}, "properties": {"repobilityId": "3b4fe6b475456ec9", "scanner": "scanner-primary", "fingerprint": "57a69c254a44a2a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/dashboard/dashboard.html"}, "region": {"startLine": 471}}}]}, {"ruleId": "scanner-e6e21ddf7268646e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_barge_report/mv_barge_report.html:1350"}, "properties": {"repobilityId": "36ee01703d6f93dc", "scanner": "scanner-primary", "fingerprint": "e6e21ddf7268646e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/daily_barge_report/mv_barge_report.html"}, "region": {"startLine": 1350}}}]}, {"ruleId": "scanner-a870022e074c2a67", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_master/mbc_master_list.html:1218"}, "properties": {"repobilityId": "3bc3810128798fc7", "scanner": "scanner-primary", "fingerprint": "a870022e074c2a67", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/mbc_master/mbc_master_list.html"}, "region": {"startLine": 1218}}}]}, {"ruleId": "scanner-8835fecde2c01f4b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/historical_data/historical_data.html:61"}, "properties": {"repobilityId": "ae4af4d7ac077f2b", "scanner": "scanner-primary", "fingerprint": "8835fecde2c01f4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/historical_data/historical_data.html"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-4a884b04fecd4ec6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/daily_ops/daily_ops.html:765"}, "properties": {"repobilityId": "6de0f68ec774d192", "scanner": "scanner-primary", "fingerprint": "4a884b04fecd4ec6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/daily_ops/daily_ops.html"}, "region": {"startLine": 765}}}]}, {"ruleId": "scanner-de421e60485e5422", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mv_mbc_month_report/mv_mbc_report.html:812"}, "properties": {"repobilityId": "fd324583eecfac96", "scanner": "scanner-primary", "fingerprint": "de421e60485e5422", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/mv_mbc_month_report/mv_mbc_report.html"}, "region": {"startLine": 812}}}]}, {"ruleId": "scanner-2148e7485fdaeef4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/mbc_tat/mbc_tat_report.html:322"}, "properties": {"repobilityId": "e41c366c4e7eff54", "scanner": "scanner-primary", "fingerprint": "2148e7485fdaeef4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/mbc_tat/mbc_tat_report.html"}, "region": {"startLine": 322}}}]}, {"ruleId": "scanner-d31b2b1c84fd7447", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/custom_report/custom_report.html:718"}, "properties": {"repobilityId": "3ded35a32645bdb4", "scanner": "scanner-primary", "fingerprint": "d31b2b1c84fd7447", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/custom_report/custom_report.html"}, "region": {"startLine": 718}}}]}, {"ruleId": "scanner-b4ed0bf9d8a37437", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/barge_report/barge_report.html:255"}, "properties": {"repobilityId": "025b61c4aaf80542", "scanner": "scanner-primary", "fingerprint": "b4ed0bf9d8a37437", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/barge_report/barge_report.html"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-3d40875cc5ca3c8b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/RP01/RP01/live_dashboard/live_dashboard.html:672"}, "properties": {"repobilityId": "3445cf400aeee368", "scanner": "scanner-primary", "fingerprint": "3d40875cc5ca3c8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/live_dashboard/live_dashboard.html"}, "region": {"startLine": 672}}}]}, {"ruleId": "scanner-65db858cb010888a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FSTM01/fstm01.html:255"}, "properties": {"repobilityId": "0df1031872a6c669", "scanner": "scanner-primary", "fingerprint": "65db858cb010888a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSTM01/fstm01.html"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-373ab95429653580", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LDUD01/ldud01.html:1129"}, "properties": {"repobilityId": "796feb1bb63128ca", "scanner": "scanner-primary", "fingerprint": "373ab95429653580", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/LDUD01/ldud01.html"}, "region": {"startLine": 1129}}}]}, {"ruleId": "scanner-ae353dee07d134f2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bills.html:141"}, "properties": {"repobilityId": "7cfe4b5ef58c273d", "scanner": "scanner-primary", "fingerprint": "ae353dee07d134f2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/bills.html"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-ae262771a4e05723", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/bill_view.html:178"}, "properties": {"repobilityId": "db6712428fdfabfe", "scanner": "scanner-primary", "fingerprint": "ae262771a4e05723", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/bill_view.html"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-f5b1fa136499cdc6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_invoice.html:246"}, "properties": {"repobilityId": "6c07781318bf55c0", "scanner": "scanner-primary", "fingerprint": "f5b1fa136499cdc6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/generate_invoice.html"}, "region": {"startLine": 246}}}]}, {"ruleId": "scanner-b00d3c89385c34ad", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FIN01/generate_bill.html:284"}, "properties": {"repobilityId": "8d2a1649232d1889", "scanner": "scanner-primary", "fingerprint": "b00d3c89385c34ad", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/generate_bill.html"}, "region": {"startLine": 284}}}]}, {"ruleId": "scanner-36f2bad0cc5eed28", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCRM01/fcrm01.html:111"}, "properties": {"repobilityId": "3b94c429760de549", "scanner": "scanner-primary", "fingerprint": "36f2bad0cc5eed28", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCRM01/fcrm01.html"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-ea772b62174e7e3b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VAM01/vam01.html:167"}, "properties": {"repobilityId": "4f8a87b48841f363", "scanner": "scanner-primary", "fingerprint": "ea772b62174e7e3b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VAM01/vam01.html"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-b85c8825f3edd45c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VC01/vc01.html:419"}, "properties": {"repobilityId": "5e118a5d3f526a80", "scanner": "scanner-primary", "fingerprint": "b85c8825f3edd45c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VC01/vc01.html"}, "region": {"startLine": 419}}}]}, {"ruleId": "scanner-4bf1cf5f66e0dfd9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FDCN01/fdcn01_entry.html:303"}, "properties": {"repobilityId": "39776670d0055e26", "scanner": "scanner-primary", "fingerprint": "4bf1cf5f66e0dfd9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FDCN01/fdcn01_entry.html"}, "region": {"startLine": 303}}}]}, {"ruleId": "scanner-76773f2ed1d7c584", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCN01/vcn01.html:796"}, "properties": {"repobilityId": "9ab5e41e27e50998", "scanner": "scanner-primary", "fingerprint": "76773f2ed1d7c584", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VCN01/vcn01.html"}, "region": {"startLine": 796}}}]}, {"ruleId": "scanner-f812835416d7ad55", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FGRM01/fgrm01.html:95"}, "properties": {"repobilityId": "d8a1030b1d750e10", "scanner": "scanner-primary", "fingerprint": "f812835416d7ad55", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FGRM01/fgrm01.html"}, "region": {"startLine": 95}}}]}, {"ruleId": "scanner-beee890f60e708e0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCN01/fcn01.html:185"}, "properties": {"repobilityId": "bab36018f11af240", "scanner": "scanner-primary", "fingerprint": "beee890f60e708e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCN01/fcn01.html"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-f885488f263551b9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FLOG01/flog01.html:159"}, "properties": {"repobilityId": "6ce5928e86bb8334", "scanner": "scanner-primary", "fingerprint": "f885488f263551b9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FLOG01/flog01.html"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-9e40380a6f827bf9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/SRV01/srv01.html:263"}, "properties": {"repobilityId": "74d0853e98adac54", "scanner": "scanner-primary", "fingerprint": "9e40380a6f827bf9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/SRV01/srv01.html"}, "region": {"startLine": 263}}}]}, {"ruleId": "scanner-39dff57f5d839b34", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VIEM01/viem01.html:177"}, "properties": {"repobilityId": "4f7727724d7eae40", "scanner": "scanner-primary", "fingerprint": "39dff57f5d839b34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VIEM01/viem01.html"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-c74636e17f923aed", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/VCUM01/vcum01.html:163"}, "properties": {"repobilityId": "416bc3f7d7425397", "scanner": "scanner-primary", "fingerprint": "c74636e17f923aed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VCUM01/vcum01.html"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-fc3e989730846b40", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_generate_invoice.html:321"}, "properties": {"repobilityId": "1e93640bccb645d3", "scanner": "scanner-primary", "fingerprint": "fc3e989730846b40", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/finv01_generate_invoice.html"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-263bcc6f94918415", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/generate_invoice.html:227"}, "properties": {"repobilityId": "da9c6bc50879092d", "scanner": "scanner-primary", "fingerprint": "263bcc6f94918415", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/generate_invoice.html"}, "region": {"startLine": 227}}}]}, {"ruleId": "scanner-cb1a30c87ffab837", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FINV01/finv01_doc_series.html:119"}, "properties": {"repobilityId": "30d5a29f8ab3047f", "scanner": "scanner-primary", "fingerprint": "cb1a30c87ffab837", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/finv01_doc_series.html"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-cd260dee935ab628", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/FCAM01/entry.html:298"}, "properties": {"repobilityId": "e6c5adb25f292de1", "scanner": "scanner-primary", "fingerprint": "cd260dee935ab628", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/entry.html"}, "region": {"startLine": 298}}}]}, {"ruleId": "scanner-05b33105fb1769f9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/MBC01/mbc01.html:820"}, "properties": {"repobilityId": "58efe220075b6a7e", "scanner": "scanner-primary", "fingerprint": "05b33105fb1769f9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/MBC01/mbc01.html"}, "region": {"startLine": 820}}}]}, {"ruleId": "scanner-0c8f323ce4cbfa19", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01.html:417"}, "properties": {"repobilityId": "5c649ff169e423c2", "scanner": "scanner-primary", "fingerprint": "0c8f323ce4cbfa19", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/LUEU01/lueu01.html"}, "region": {"startLine": 417}}}]}, {"ruleId": "scanner-1031922f3c28b309", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in modules/LUEU01/lueu01_dashboard.html:477"}, "properties": {"repobilityId": "1c442e3165e228de", "scanner": "scanner-primary", "fingerprint": "1031922f3c28b309", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/LUEU01/lueu01_dashboard.html"}, "region": {"startLine": 477}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-f810f72543b4c309", "level": "note", "message": {"text": "Very large file: populate_mock_data.py (1350 lines)"}, "properties": {"repobilityId": "f845bc6375d26a89", "scanner": "scanner-primary", "fingerprint": "f810f72543b4c309", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f933ba8c6b610ee", "level": "note", "message": {"text": "Very large file: .tmp_ldud01_script_check.js (1085 lines)"}, "properties": {"repobilityId": "fae7af0da0d5cc67", "scanner": "scanner-primary", "fingerprint": "4f933ba8c6b610ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f2521e21726627b", "level": "note", "message": {"text": "Very large file: modules/RP01/RP01/daily_barge_report/views.py (2272 lines)"}, "properties": {"repobilityId": "3a49e2764c501b33", "scanner": "scanner-primary", "fingerprint": "8f2521e21726627b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fd12d2210c94321b", "level": "note", "message": {"text": "Very large file: modules/RP01/RP01/mbc_master/views.py (1417 lines)"}, "properties": {"repobilityId": "dd93c74864ed17dc", "scanner": "scanner-primary", "fingerprint": "fd12d2210c94321b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-90052debadf0e01c", "level": "note", "message": {"text": "Very large file: modules/RP01/RP01/daily_ops/views.py (5798 lines)"}, "properties": {"repobilityId": "2073258e861bc30d", "scanner": "scanner-primary", "fingerprint": "90052debadf0e01c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3a4bd9f38dce0f4a", "level": "note", "message": {"text": "Very large file: modules/FINV01/views.py (1540 lines)"}, "properties": {"repobilityId": "0a06c71c8fed9c85", "scanner": "scanner-primary", "fingerprint": "3a4bd9f38dce0f4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ab020706c3dc4c93", "level": "note", "message": {"text": "Very large file: modules/LUEU01/model.py (1217 lines)"}, "properties": {"repobilityId": "0a9affebd9233ccd", "scanner": "scanner-primary", "fingerprint": "ab020706c3dc4c93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "94fe5d039241bfd7", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-01f96f71d9907a8c", "level": "note", "message": {"text": "README lacks setup or run instructions"}, "properties": {"repobilityId": "26ade9c7dd57e8be", "scanner": "scanner-primary", "fingerprint": "01f96f71d9907a8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "06a128600060943c", "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": "d413b9c09290bb09", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "9b37385fd45101ec", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "5916f5b8f8abb2b5", "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": "5e1829de93d80721", "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": "35fc690292597c87", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49a726e96ea5878a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_fin01_invoices.js:86"}, "properties": {"repobilityId": "fc7841fee909e440", "scanner": "scanner-primary", "fingerprint": "49a726e96ea5878a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-07956e9770cc0056", "level": "note", "message": {"text": "Legacy-named symbol `test_apply_resolutions_empty_returns_copy` in test_rp01_historical.py:126"}, "properties": {"repobilityId": "0583519718a4834b", "scanner": "scanner-primary", "fingerprint": "07956e9770cc0056", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a612c0c292df301e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_tm01_script_check.js:77"}, "properties": {"repobilityId": "530257030e6dcc82", "scanner": "scanner-primary", "fingerprint": "a612c0c292df301e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c2b2ce873a9d241", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 .tmp_ldud01_script_check.js:40"}, "properties": {"repobilityId": "2b7617ce338bb829", "scanner": "scanner-primary", "fingerprint": "0c2b2ce873a9d241", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d0ca8e720b5f1b8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_discharged/views.py:627"}, "properties": {"repobilityId": "a86e09019f978f4f", "scanner": "scanner-primary", "fingerprint": "d0ca8e720b5f1b8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2fddae90abf1908", "level": "none", "message": {"text": "Commented-code block (5 lines) in modules/RP01/RP01/port_map/views.py:143"}, "properties": {"repobilityId": "8f0aedc30d8bf38b", "scanner": "scanner-primary", "fingerprint": "f2fddae90abf1908", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ae65c92b1540771", "level": "none", "message": {"text": "Commented-code block (7 lines) in modules/RP01/RP01/vessel_sof/views.py:97"}, "properties": {"repobilityId": "4d035a2bc5d3a726", "scanner": "scanner-primary", "fingerprint": "6ae65c92b1540771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4ad6ea8a3dd7b5d", "level": "none", "message": {"text": "Commented-code block (5 lines) in modules/RP01/RP01/daily_barge_report/views.py:946"}, "properties": {"repobilityId": "e7d61055d91ee956", "scanner": "scanner-primary", "fingerprint": "a4ad6ea8a3dd7b5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07e432576ae06c1b", "level": "none", "message": {"text": "Commented-code block (6 lines) in modules/RP01/RP01/daily_ops/views.py:1157"}, "properties": {"repobilityId": "bf8ce5ec5fe4885e", "scanner": "scanner-primary", "fingerprint": "07e432576ae06c1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54647c4bf101bd21", "level": "none", "message": {"text": "Commented-code block (5 lines) in modules/FINV01/views.py:217"}, "properties": {"repobilityId": "7657876c715ab0a7", "scanner": "scanner-primary", "fingerprint": "54647c4bf101bd21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68f35f985f0a45bc", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/cc3dd4ee5ff6_fstm01_sap_gst_gl_and_config_defaults.py:29"}, "properties": {"repobilityId": "a04994f432656e41", "scanner": "scanner-primary", "fingerprint": "68f35f985f0a45bc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-481b938c8f0ff6e7", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/dd3ee4ff5aa6_fstm01_tds_tcs_gl_per_service.py:20"}, "properties": {"repobilityId": "dbef392df71579fb", "scanner": "scanner-primary", "fingerprint": "481b938c8f0ff6e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-02ed7fc98b8f1ba1", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/w0x1y2z3a4b5_sap_config_active_repair.py:36"}, "properties": {"repobilityId": "e52e6d9ac81319f6", "scanner": "scanner-primary", "fingerprint": "02ed7fc98b8f1ba1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-2828346f9977ebce", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/75a1a399c282_merge_port_map_schema.py:21"}, "properties": {"repobilityId": "0cc5af2da4294bde", "scanner": "scanner-primary", "fingerprint": "2828346f9977ebce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-b414b7a55b87c27a", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a1b2c3d4e5f6_mail_queue_smtp_config.py:56"}, "properties": {"repobilityId": "472bd91b8ce0a607", "scanner": "scanner-primary", "fingerprint": "b414b7a55b87c27a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-9668c96790dc3e88", "level": "none", "message": {"text": "Commented-code block (5 lines) in alembic/versions/a1b2c3d4e5f8_ldud_barge_unique_trip.py:34"}, "properties": {"repobilityId": "9afc22d5d939bdb8", "scanner": "scanner-primary", "fingerprint": "9668c96790dc3e88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-110f8c8c3bf54963", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/v0w1x2y3z4a5_proof_documents_bytea_repair.py:50"}, "properties": {"repobilityId": "8f4b5143d0c5bb56", "scanner": "scanner-primary", "fingerprint": "110f8c8c3bf54963", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-1add97647fef3e05", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 alembic/versions/bb2cc3dd4ee5_password_reset_tokens.py:33"}, "properties": {"repobilityId": "46d7351d5ebdb014", "scanner": "scanner-primary", "fingerprint": "1add97647fef3e05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-fc9a58160227dc92", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 alembic/versions/a9b0c1d2e3f4_merge_heads.py:16"}, "properties": {"repobilityId": "df0200388486037a", "scanner": "scanner-primary", "fingerprint": "fc9a58160227dc92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-65186ed837be1097", "level": "note", "message": {"text": "Near-duplicate function bodies in 58 places"}, "properties": {"repobilityId": "593fd00cd8b3e290", "scanner": "scanner-primary", "fingerprint": "65186ed837be1097", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-65186ed837be1097", "level": "note", "message": {"text": "Near-duplicate function bodies in 58 places"}, "properties": {"repobilityId": "f16c620827460ec3", "scanner": "scanner-primary", "fingerprint": "65186ed837be1097", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ab9b799eeba74417", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a58e755a93c02e35", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6297377883dd7783", "level": "note", "message": {"text": "Near-duplicate function bodies in 13 places"}, "properties": {"repobilityId": "0218d213abd83301", "scanner": "scanner-primary", "fingerprint": "6297377883dd7783", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-6431a78879620ea3", "level": "note", "message": {"text": "Near-duplicate function bodies in 21 places"}, "properties": {"repobilityId": "43093ffb023fd1f1", "scanner": "scanner-primary", "fingerprint": "6431a78879620ea3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9b6851b61c9c17fd", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-fe1d9311d6aee734", "level": "note", "message": {"text": "Near-duplicate function bodies in 12 places"}, "properties": {"repobilityId": "a44529ef90ad8280", "scanner": "scanner-primary", "fingerprint": "fe1d9311d6aee734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c54c6fb8e364daaa", "level": "note", "message": {"text": "Near-duplicate function bodies in 16 places"}, "properties": {"repobilityId": "c5a014d67722045b", "scanner": "scanner-primary", "fingerprint": "c54c6fb8e364daaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-18728ded1c00a072", "level": "note", "message": {"text": "Near-duplicate function bodies in 27 places"}, "properties": {"repobilityId": "bd83a902238e5b9a", "scanner": "scanner-primary", "fingerprint": "18728ded1c00a072", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c54c6fb8e364daaa", "level": "note", "message": {"text": "Near-duplicate function bodies in 16 places"}, "properties": {"repobilityId": "b0b6dedb26bcdaf7", "scanner": "scanner-primary", "fingerprint": "c54c6fb8e364daaa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "74fcf216e203c291", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "05f222a53695a51f", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "6d5ef0c346bff58d", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c87960dbc5c30c8a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "95a70da8a5612b28", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8e48207be8278e13", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8f6b260740873cdb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "1b3f1195069d4bab", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "06c318c652881c6d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-8d271c95dcbe7a3a", "level": "error", "message": {"text": "Flask mutation route `login` without `@login_required` \u2014 app.py:255"}, "properties": {"repobilityId": "0d09df93996ebf6d", "scanner": "scanner-primary", "fingerprint": "8d271c95dcbe7a3a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-16b6c266d9a7e0cc", "level": "error", "message": {"text": "Flask mutation route `send_otp` without `@login_required` \u2014 app.py:279"}, "properties": {"repobilityId": "8ce28cff0a4ac666", "scanner": "scanner-primary", "fingerprint": "16b6c266d9a7e0cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 279}}}]}, {"ruleId": "scanner-53f427f4f6a3bbbd", "level": "error", "message": {"text": "Flask mutation route `verify_otp` without `@login_required` \u2014 app.py:348"}, "properties": {"repobilityId": "ab6e009cb28a6fcf", "scanner": "scanner-primary", "fingerprint": "53f427f4f6a3bbbd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 348}}}]}, {"ruleId": "scanner-821b1a35422383c8", "level": "error", "message": {"text": "Flask mutation route `set_password_otp` without `@login_required` \u2014 app.py:374"}, "properties": {"repobilityId": "ed7a7ef42f552f00", "scanner": "scanner-primary", "fingerprint": "821b1a35422383c8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.py"}, "region": {"startLine": 374}}}]}, {"ruleId": "scanner-1ba0c394bb552b39", "level": "error", "message": {"text": "Flask mutation route `historical_preview` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:53"}, "properties": {"repobilityId": "3466d0010388fab6", "scanner": "scanner-primary", "fingerprint": "1ba0c394bb552b39", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/historical_data/views.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-124f9f6145e513b2", "level": "error", "message": {"text": "Flask mutation route `historical_apply` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:72"}, "properties": {"repobilityId": "65c20838d4bc3f1c", "scanner": "scanner-primary", "fingerprint": "124f9f6145e513b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/historical_data/views.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-55146ee473e22333", "level": "error", "message": {"text": "Flask mutation route `historical_row_update` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:128"}, "properties": {"repobilityId": "10f0284035b2203b", "scanner": "scanner-primary", "fingerprint": "55146ee473e22333", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/historical_data/views.py"}, "region": {"startLine": 128}}}]}, {"ruleId": "scanner-7d3e90cc0bffb0a7", "level": "error", "message": {"text": "Flask mutation route `historical_row_delete` without `@login_required` \u2014 modules/RP01/RP01/historical_data/views.py:140"}, "properties": {"repobilityId": "5cd2deb192a6c533", "scanner": "scanner-primary", "fingerprint": "7d3e90cc0bffb0a7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/historical_data/views.py"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-9a7a7f18b1d17c9a", "level": "error", "message": {"text": "Flask mutation route `save_cargo_table` without `@login_required` \u2014 modules/RP01/RP01/daily_ops/views.py:92"}, "properties": {"repobilityId": "ae3dbf1d5f93a0d6", "scanner": "scanner-primary", "fingerprint": "9a7a7f18b1d17c9a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/RP01/RP01/daily_ops/views.py"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-a2de06cfedbc9aba", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/FSTM01/views.py:27"}, "properties": {"repobilityId": "058ea95b4eb95f8d", "scanner": "scanner-primary", "fingerprint": "a2de06cfedbc9aba", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSTM01/views.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-69bc4d3255222f6c", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/FSTM01/views.py:58"}, "properties": {"repobilityId": "95cd6c22d6308cf9", "scanner": "scanner-primary", "fingerprint": "69bc4d3255222f6c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSTM01/views.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-2d84458c3b7d331b", "level": "error", "message": {"text": "Flask mutation route `save_field` without `@login_required` \u2014 modules/FSTM01/views.py:84"}, "properties": {"repobilityId": "c57a6e907ada84c2", "scanner": "scanner-primary", "fingerprint": "2d84458c3b7d331b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSTM01/views.py"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-0b75a2b01a4318f0", "level": "error", "message": {"text": "Flask mutation route `delete_field` without `@login_required` \u2014 modules/FSTM01/views.py:100"}, "properties": {"repobilityId": "413abf0c1e5453c6", "scanner": "scanner-primary", "fingerprint": "0b75a2b01a4318f0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FSTM01/views.py"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-f47f626259bff518", "level": "error", "message": {"text": "Flask mutation route `add_user` without `@login_required` \u2014 modules/ADMIN/views.py:56"}, "properties": {"repobilityId": "59db6527c8b313db", "scanner": "scanner-primary", "fingerprint": "f47f626259bff518", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-ab40d87839ef50e8", "level": "error", "message": {"text": "Flask mutation route `reset_password` without `@login_required` \u2014 modules/ADMIN/views.py:82"}, "properties": {"repobilityId": "fbf965993840e42d", "scanner": "scanner-primary", "fingerprint": "ab40d87839ef50e8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-5f716ae72f159f3e", "level": "error", "message": {"text": "Flask mutation route `edit_user` without `@login_required` \u2014 modules/ADMIN/views.py:98"}, "properties": {"repobilityId": "8e5be912fa35fba9", "scanner": "scanner-primary", "fingerprint": "5f716ae72f159f3e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-97a4b4859b821b91", "level": "error", "message": {"text": "Flask mutation route `send_reset_email` without `@login_required` \u2014 modules/ADMIN/views.py:125"}, "properties": {"repobilityId": "c47a0caffbc27026", "scanner": "scanner-primary", "fingerprint": "97a4b4859b821b91", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-d108b1b4aeadf24a", "level": "error", "message": {"text": "Flask mutation route `delete_user` without `@login_required` \u2014 modules/ADMIN/views.py:202"}, "properties": {"repobilityId": "255d9e69be4300d6", "scanner": "scanner-primary", "fingerprint": "d108b1b4aeadf24a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 202}}}]}, {"ruleId": "scanner-aa2bf2a60701cfd9", "level": "error", "message": {"text": "Flask mutation route `save_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:252"}, "properties": {"repobilityId": "a98c5ffd5275de90", "scanner": "scanner-primary", "fingerprint": "aa2bf2a60701cfd9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-a9952dbe8432885d", "level": "error", "message": {"text": "Flask mutation route `save_user_permissions` without `@login_required` \u2014 modules/ADMIN/views.py:297"}, "properties": {"repobilityId": "03655533bbdc7050", "scanner": "scanner-primary", "fingerprint": "a9952dbe8432885d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 297}}}]}, {"ruleId": "scanner-fa2fcb4ae90debdd", "level": "error", "message": {"text": "Flask mutation route `save_config` without `@login_required` \u2014 modules/ADMIN/views.py:342"}, "properties": {"repobilityId": "b14f067906b82dc9", "scanner": "scanner-primary", "fingerprint": "fa2fcb4ae90debdd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 342}}}]}, {"ruleId": "scanner-998d3ce358a5f13e", "level": "error", "message": {"text": "Flask mutation route `save_sap_config` without `@login_required` \u2014 modules/ADMIN/views.py:365"}, "properties": {"repobilityId": "e0b9abf7f2a1fca5", "scanner": "scanner-primary", "fingerprint": "998d3ce358a5f13e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 365}}}]}, {"ruleId": "scanner-ec037205c80906e9", "level": "error", "message": {"text": "Flask mutation route `test_sap_connection` without `@login_required` \u2014 modules/ADMIN/views.py:449"}, "properties": {"repobilityId": "56c9cb713fcd4124", "scanner": "scanner-primary", "fingerprint": "ec037205c80906e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 449}}}]}, {"ruleId": "scanner-3c385b33d0c6a25a", "level": "error", "message": {"text": "Flask mutation route `save_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:506"}, "properties": {"repobilityId": "277b343272d8b9be", "scanner": "scanner-primary", "fingerprint": "3c385b33d0c6a25a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 506}}}]}, {"ruleId": "scanner-0852327017024961", "level": "error", "message": {"text": "Flask mutation route `delete_port_bank` without `@login_required` \u2014 modules/ADMIN/views.py:529"}, "properties": {"repobilityId": "5299b89ab57550e5", "scanner": "scanner-primary", "fingerprint": "0852327017024961", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 529}}}]}, {"ruleId": "scanner-0af9daeea0160e9f", "level": "error", "message": {"text": "Flask mutation route `save_smtp_config_route` without `@login_required` \u2014 modules/ADMIN/views.py:554"}, "properties": {"repobilityId": "d4c0da7da6879615", "scanner": "scanner-primary", "fingerprint": "0af9daeea0160e9f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 554}}}]}, {"ruleId": "scanner-e13ed5dd5323e708", "level": "error", "message": {"text": "Flask mutation route `retry_failed_mail` without `@login_required` \u2014 modules/ADMIN/views.py:601"}, "properties": {"repobilityId": "245d39a59c706299", "scanner": "scanner-primary", "fingerprint": "e13ed5dd5323e708", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 601}}}]}, {"ruleId": "scanner-fafa45eef5023425", "level": "error", "message": {"text": "Flask mutation route `send_mail_now` without `@login_required` \u2014 modules/ADMIN/views.py:616"}, "properties": {"repobilityId": "b9d123e3f793f609", "scanner": "scanner-primary", "fingerprint": "fafa45eef5023425", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 616}}}]}, {"ruleId": "scanner-c425ee3be87f2a78", "level": "error", "message": {"text": "Flask mutation route `open_vessel` without `@login_required` \u2014 modules/ADMIN/views.py:645"}, "properties": {"repobilityId": "47aaefe1060e8881", "scanner": "scanner-primary", "fingerprint": "c425ee3be87f2a78", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 645}}}]}, {"ruleId": "scanner-d3fcff6a21b0c0a8", "level": "error", "message": {"text": "Flask mutation route `save_aud_config` without `@login_required` \u2014 modules/ADMIN/views.py:691"}, "properties": {"repobilityId": "beb70c87fd1091fc", "scanner": "scanner-primary", "fingerprint": "d3fcff6a21b0c0a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 691}}}]}, {"ruleId": "scanner-de078cf4f464dfad", "level": "error", "message": {"text": "Flask mutation route `clear_logs` without `@login_required` \u2014 modules/ADMIN/views.py:717"}, "properties": {"repobilityId": "6a313910491fb1f0", "scanner": "scanner-primary", "fingerprint": "de078cf4f464dfad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 717}}}]}, {"ruleId": "scanner-a95f699eefbbbb80", "level": "error", "message": {"text": "Flask mutation route `reset_mbc_approval` without `@login_required` \u2014 modules/ADMIN/views.py:789"}, "properties": {"repobilityId": "7db49479d2d23571", "scanner": "scanner-primary", "fingerprint": "a95f699eefbbbb80", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 789}}}]}, {"ruleId": "scanner-08eff7a47a5b427a", "level": "error", "message": {"text": "Flask mutation route `generate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:822"}, "properties": {"repobilityId": "66d21e58ed79b163", "scanner": "scanner-primary", "fingerprint": "08eff7a47a5b427a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 822}}}]}, {"ruleId": "scanner-34499b71fbe940d5", "level": "error", "message": {"text": "Flask mutation route `revoke_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:836"}, "properties": {"repobilityId": "c8145a0a77c03219", "scanner": "scanner-primary", "fingerprint": "34499b71fbe940d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 836}}}]}, {"ruleId": "scanner-7bb0de1b322e0ce8", "level": "error", "message": {"text": "Flask mutation route `reactivate_sap_token` without `@login_required` \u2014 modules/ADMIN/views.py:846"}, "properties": {"repobilityId": "8a6eb35524876434", "scanner": "scanner-primary", "fingerprint": "7bb0de1b322e0ce8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 846}}}]}, {"ruleId": "scanner-eb4567b215bd3160", "level": "error", "message": {"text": "Flask mutation route `playground_build_payload` without `@login_required` \u2014 modules/ADMIN/views.py:877"}, "properties": {"repobilityId": "a634197ff489c370", "scanner": "scanner-primary", "fingerprint": "eb4567b215bd3160", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 877}}}]}, {"ruleId": "scanner-c258ab97b61444fb", "level": "error", "message": {"text": "Flask mutation route `playground_send` without `@login_required` \u2014 modules/ADMIN/views.py:914"}, "properties": {"repobilityId": "5575e1c3996e6895", "scanner": "scanner-primary", "fingerprint": "c258ab97b61444fb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 914}}}]}, {"ruleId": "scanner-58fb0657d24aa353", "level": "error", "message": {"text": "Flask mutation route `cutover_invoice_seed` without `@login_required` \u2014 modules/ADMIN/views.py:975"}, "properties": {"repobilityId": "230860f9e7c92a1e", "scanner": "scanner-primary", "fingerprint": "58fb0657d24aa353", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 975}}}]}, {"ruleId": "scanner-fc36cf8eb7f547ff", "level": "error", "message": {"text": "Flask mutation route `cutover_bill_seed` without `@login_required` \u2014 modules/ADMIN/views.py:993"}, "properties": {"repobilityId": "fbc91294b8581105", "scanner": "scanner-primary", "fingerprint": "fc36cf8eb7f547ff", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 993}}}]}, {"ruleId": "scanner-8b8ffbc0c7c97780", "level": "error", "message": {"text": "Flask mutation route `cutover_mark_billed` without `@login_required` \u2014 modules/ADMIN/views.py:1007"}, "properties": {"repobilityId": "24b7dd2649b61be1", "scanner": "scanner-primary", "fingerprint": "8b8ffbc0c7c97780", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 1007}}}]}, {"ruleId": "scanner-2c953691923a8029", "level": "error", "message": {"text": "Flask mutation route `cutover_lock` without `@login_required` \u2014 modules/ADMIN/views.py:1020"}, "properties": {"repobilityId": "04fe42ba131b1b18", "scanner": "scanner-primary", "fingerprint": "2c953691923a8029", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/ADMIN/views.py"}, "region": {"startLine": 1020}}}]}, {"ruleId": "scanner-b6bf11fc0ddbab12", "level": "error", "message": {"text": "Flask mutation route `save_bill` without `@login_required` \u2014 modules/FIN01/views.py:236"}, "properties": {"repobilityId": "7d4ac338040d28fc", "scanner": "scanner-primary", "fingerprint": "b6bf11fc0ddbab12", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/views.py"}, "region": {"startLine": 236}}}]}, {"ruleId": "scanner-652f00066208097e", "level": "error", "message": {"text": "Flask mutation route `approve_bill` without `@login_required` \u2014 modules/FIN01/views.py:331"}, "properties": {"repobilityId": "8db9a564d479ace5", "scanner": "scanner-primary", "fingerprint": "652f00066208097e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/views.py"}, "region": {"startLine": 331}}}]}, {"ruleId": "scanner-9185b32bb7f7b78e", "level": "error", "message": {"text": "Flask mutation route `submit_bill` without `@login_required` \u2014 modules/FIN01/views.py:358"}, "properties": {"repobilityId": "4b8eeaa350e81393", "scanner": "scanner-primary", "fingerprint": "9185b32bb7f7b78e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/views.py"}, "region": {"startLine": 358}}}]}, {"ruleId": "scanner-5daca2a364984b93", "level": "error", "message": {"text": "Flask mutation route `reject_bill` without `@login_required` \u2014 modules/FIN01/views.py:386"}, "properties": {"repobilityId": "53cd27aaa29d05ef", "scanner": "scanner-primary", "fingerprint": "5daca2a364984b93", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FIN01/views.py"}, "region": {"startLine": 386}}}]}, {"ruleId": "scanner-09a659d6b15955e4", "level": "error", "message": {"text": "Flask mutation route `save_currency` without `@login_required` \u2014 modules/FCRM01/views.py:40"}, "properties": {"repobilityId": "d2a634b9ad905fb1", "scanner": "scanner-primary", "fingerprint": "09a659d6b15955e4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCRM01/views.py"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-6c125d1792e20068", "level": "error", "message": {"text": "Flask mutation route `delete_currency` without `@login_required` \u2014 modules/FCRM01/views.py:58"}, "properties": {"repobilityId": "f587dac1b438bb42", "scanner": "scanner-primary", "fingerprint": "6c125d1792e20068", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCRM01/views.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-759a6211bd099f39", "level": "error", "message": {"text": "Flask mutation route `save_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:91"}, "properties": {"repobilityId": "16a2eda2ef79f361", "scanner": "scanner-primary", "fingerprint": "759a6211bd099f39", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCRM01/views.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-7f9c8e424d86c3d4", "level": "error", "message": {"text": "Flask mutation route `delete_exchange_rate` without `@login_required` \u2014 modules/FCRM01/views.py:109"}, "properties": {"repobilityId": "15fa991af1c9cd40", "scanner": "scanner-primary", "fingerprint": "7f9c8e424d86c3d4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCRM01/views.py"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-7fc984e1d9adecf1", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VHO01/views.py:21"}, "properties": {"repobilityId": "d6a6fec8b2681997", "scanner": "scanner-primary", "fingerprint": "7fc984e1d9adecf1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VHO01/views.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-28870fc37dd52e3c", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHO01/views.py:27"}, "properties": {"repobilityId": "b6e95661a4d328b6", "scanner": "scanner-primary", "fingerprint": "28870fc37dd52e3c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VHO01/views.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-aa7dd44bf118e594", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VHM01/views.py:21"}, "properties": {"repobilityId": "21aaac140806ed7e", "scanner": "scanner-primary", "fingerprint": "aa7dd44bf118e594", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VHM01/views.py"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-bb17922289471764", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VHM01/views.py:27"}, "properties": {"repobilityId": "dcaf8588c47ce79a", "scanner": "scanner-primary", "fingerprint": "bb17922289471764", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VHM01/views.py"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-9f781092723aecfc", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/FGRM01/views.py:23"}, "properties": {"repobilityId": "7177e1a38cdc771b", "scanner": "scanner-primary", "fingerprint": "9f781092723aecfc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FGRM01/views.py"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-c2292ec1d34d1a06", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/FGRM01/views.py:41"}, "properties": {"repobilityId": "175fef37b8d7f024", "scanner": "scanner-primary", "fingerprint": "c2292ec1d34d1a06", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FGRM01/views.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-ce8a73f0db22d946", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/SRV01/views.py:93"}, "properties": {"repobilityId": "2be25f52b02ed3b2", "scanner": "scanner-primary", "fingerprint": "ce8a73f0db22d946", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/SRV01/views.py"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-c8a8aaa267d23d5a", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/SRV01/views.py:147"}, "properties": {"repobilityId": "632a2046814c2eb2", "scanner": "scanner-primary", "fingerprint": "c8a8aaa267d23d5a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/SRV01/views.py"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-1bcad3fdc8108376", "level": "error", "message": {"text": "Flask mutation route `approve` without `@login_required` \u2014 modules/SRV01/views.py:162"}, "properties": {"repobilityId": "bafc35ccb83a681b", "scanner": "scanner-primary", "fingerprint": "1bcad3fdc8108376", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/SRV01/views.py"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-307f8694d1dfe3ee", "level": "error", "message": {"text": "Flask mutation route `create_invoice` without `@login_required` \u2014 modules/FINV01/views.py:252"}, "properties": {"repobilityId": "5904bd668f84be7f", "scanner": "scanner-primary", "fingerprint": "307f8694d1dfe3ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 252}}}]}, {"ruleId": "scanner-86a94ecd00ff9e94", "level": "error", "message": {"text": "Flask mutation route `export_gstr1_b2b` without `@login_required` \u2014 modules/FINV01/views.py:766"}, "properties": {"repobilityId": "2c2866667306c3b9", "scanner": "scanner-primary", "fingerprint": "86a94ecd00ff9e94", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 766}}}]}, {"ruleId": "scanner-d98f704ce3e0441b", "level": "error", "message": {"text": "Flask mutation route `retry_sap` without `@login_required` \u2014 modules/FINV01/views.py:836"}, "properties": {"repobilityId": "b8b1731647d8551d", "scanner": "scanner-primary", "fingerprint": "d98f704ce3e0441b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 836}}}]}, {"ruleId": "scanner-9d5d120b6808e60c", "level": "error", "message": {"text": "Flask mutation route `fetch_irn` without `@login_required` \u2014 modules/FINV01/views.py:867"}, "properties": {"repobilityId": "bcd46ad543a2c6d7", "scanner": "scanner-primary", "fingerprint": "9d5d120b6808e60c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 867}}}]}, {"ruleId": "scanner-4eaeaa3295b0b1cd", "level": "error", "message": {"text": "Flask mutation route `cancel_invoice_sap` without `@login_required` \u2014 modules/FINV01/views.py:911"}, "properties": {"repobilityId": "263db867474c5690", "scanner": "scanner-primary", "fingerprint": "4eaeaa3295b0b1cd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 911}}}]}, {"ruleId": "scanner-f892a956475d7b17", "level": "error", "message": {"text": "Flask mutation route `create_cancellation_cn` without `@login_required` \u2014 modules/FINV01/views.py:982"}, "properties": {"repobilityId": "82a8e5224a608769", "scanner": "scanner-primary", "fingerprint": "f892a956475d7b17", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 982}}}]}, {"ruleId": "scanner-5844c5614aef5118", "level": "error", "message": {"text": "Flask mutation route `save_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1468"}, "properties": {"repobilityId": "01aec26fd62118a6", "scanner": "scanner-primary", "fingerprint": "5844c5614aef5118", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 1468}}}]}, {"ruleId": "scanner-c40fbd20c145f223", "level": "error", "message": {"text": "Flask mutation route `delete_doc_series` without `@login_required` \u2014 modules/FINV01/views.py:1495"}, "properties": {"repobilityId": "5c014954a3f039f7", "scanner": "scanner-primary", "fingerprint": "c40fbd20c145f223", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FINV01/views.py"}, "region": {"startLine": 1495}}}]}, {"ruleId": "scanner-69b1d0ec53324757", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/GSTCFG/views.py:26"}, "properties": {"repobilityId": "1861f343dcbce724", "scanner": "scanner-primary", "fingerprint": "69b1d0ec53324757", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/GSTCFG/views.py"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-41c11ac2710edcb4", "level": "error", "message": {"text": "Flask mutation route `set_active` without `@login_required` \u2014 modules/GSTCFG/views.py:34"}, "properties": {"repobilityId": "3f7c967a6f7a8eb1", "scanner": "scanner-primary", "fingerprint": "41c11ac2710edcb4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/GSTCFG/views.py"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-bd1123a0c196223c", "level": "error", "message": {"text": "Flask mutation route `set_default` without `@login_required` \u2014 modules/VQM01/views.py:42"}, "properties": {"repobilityId": "df4db935de52c582", "scanner": "scanner-primary", "fingerprint": "bd1123a0c196223c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VQM01/views.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-9fd03d969c76eb38", "level": "error", "message": {"text": "Flask mutation route `save` without `@login_required` \u2014 modules/VQM01/views.py:48"}, "properties": {"repobilityId": "619fa1b7fb439e34", "scanner": "scanner-primary", "fingerprint": "9fd03d969c76eb38", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VQM01/views.py"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-322bff381278b527", "level": "error", "message": {"text": "Flask mutation route `delete` without `@login_required` \u2014 modules/VQM01/views.py:54"}, "properties": {"repobilityId": "7c8b5846b9e06f75", "scanner": "scanner-primary", "fingerprint": "322bff381278b527", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/VQM01/views.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-caae24b3ea952ad9", "level": "error", "message": {"text": "Flask mutation route `save_header` without `@login_required` \u2014 modules/FCAM01/views.py:98"}, "properties": {"repobilityId": "ebb382045922b06a", "scanner": "scanner-primary", "fingerprint": "caae24b3ea952ad9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-3e4c7464af2d302a", "level": "error", "message": {"text": "Flask mutation route `save_line` without `@login_required` \u2014 modules/FCAM01/views.py:139"}, "properties": {"repobilityId": "e6ddab01b8d023ca", "scanner": "scanner-primary", "fingerprint": "3e4c7464af2d302a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-c3580d64985e05a8", "level": "error", "message": {"text": "Flask mutation route `save_lines_batch` without `@login_required` \u2014 modules/FCAM01/views.py:153"}, "properties": {"repobilityId": "12e793219d728de7", "scanner": "scanner-primary", "fingerprint": "c3580d64985e05a8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-ac51b7aa0f80c86c", "level": "error", "message": {"text": "Flask mutation route `delete_line` without `@login_required` \u2014 modules/FCAM01/views.py:173"}, "properties": {"repobilityId": "2485d3da7b112bc6", "scanner": "scanner-primary", "fingerprint": "ac51b7aa0f80c86c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-1a020aad711b9ffe", "level": "error", "message": {"text": "Flask mutation route `delete_header` without `@login_required` \u2014 modules/FCAM01/views.py:187"}, "properties": {"repobilityId": "6f34fbb4dc874e77", "scanner": "scanner-primary", "fingerprint": "1a020aad711b9ffe", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-247750fc90b3bc7d", "level": "error", "message": {"text": "Flask mutation route `approve` without `@login_required` \u2014 modules/FCAM01/views.py:211"}, "properties": {"repobilityId": "ebdd0e39953d89fe", "scanner": "scanner-primary", "fingerprint": "247750fc90b3bc7d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "modules/FCAM01/views.py"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-9c81faff62e26d59", "level": "error", "message": {"text": "Dangling fetch: POST /api/module/FIN01/export/gstr1-b2b (.tmp_fin01_invoices.js:86)"}, "properties": {"repobilityId": "c4da700d4ecc955d", "scanner": "scanner-primary", "fingerprint": "9c81faff62e26d59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f03041e32d00cb2", "level": "error", "message": {"text": "Dangling fetch: POST /api/module/FIN01/export/einvoice (.tmp_fin01_invoices.js:121)"}, "properties": {"repobilityId": "ab340fda109ca687", "scanner": "scanner-primary", "fingerprint": "4f03041e32d00cb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f2406cc916f1fa4", "level": "error", "message": {"text": "Dangling fetch: GET /api/module/VCTM01/all (.tmp_ldud01_script_check.js:43)"}, "properties": {"repobilityId": "cf1c5fd2b2684aca", "scanner": "scanner-primary", "fingerprint": "3f2406cc916f1fa4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fe492c979819731", "level": "error", "message": {"text": "Dangling fetch: GET /api/module/VCN01/stowage/${vcnId} (.tmp_ldud01_script_check.js:560)"}, "properties": {"repobilityId": "59ba78b0a79fff87", "scanner": "scanner-primary", "fingerprint": "3fe492c979819731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e64efeb8de9512b", "level": "error", "message": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:954)"}, "properties": {"repobilityId": "05c99dc71510f060", "scanner": "scanner-primary", "fingerprint": "9e64efeb8de9512b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77c041be8812937c", "level": "error", "message": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/save (.tmp_ldud01_script_check.js:983)"}, "properties": {"repobilityId": "ddb9563359822680", "scanner": "scanner-primary", "fingerprint": "77c041be8812937c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c4daf35db57a4f4", "level": "error", "message": {"text": "Dangling fetch: POST /api/module/LDUD01/${type}/delete (.tmp_ldud01_script_check.js:1008)"}, "properties": {"repobilityId": "2f685e9acd982e81", "scanner": "scanner-primary", "fingerprint": "4c4daf35db57a4f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "302fe621a396c5fd", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c7ad61ba1b23915", "level": "note", "message": {"text": "Unused endpoint: ANY /login"}, "properties": {"repobilityId": "2d2d4aa670f43283", "scanner": "scanner-primary", "fingerprint": "4c7ad61ba1b23915", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9e449c3b9e73b73", "level": "note", "message": {"text": "Unused endpoint: ANY /logout"}, "properties": {"repobilityId": "1d0f5ae7dd7dbf56", "scanner": "scanner-primary", "fingerprint": "c9e449c3b9e73b73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b577c85c602a5a0a", "level": "note", "message": {"text": "Unused endpoint: ANY /auth/send-otp"}, "properties": {"repobilityId": "77333d152a76999d", "scanner": "scanner-primary", "fingerprint": "b577c85c602a5a0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed59dee67734c161", "level": "note", "message": {"text": "Unused endpoint: ANY /auth/verify-otp"}, "properties": {"repobilityId": "4af486ec7d4c58e7", "scanner": "scanner-primary", "fingerprint": "ed59dee67734c161", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0522d7e7bbf92b67", "level": "note", "message": {"text": "Unused endpoint: ANY /auth/set-password"}, "properties": {"repobilityId": "1274aac41badb8ce", "scanner": "scanner-primary", "fingerprint": "0522d7e7bbf92b67", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-baebe42c1606eaf4", "level": "note", "message": {"text": "Unused endpoint: ANY /home"}, "properties": {"repobilityId": "016ba71656e036eb", "scanner": "scanner-primary", "fingerprint": "baebe42c1606eaf4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d611692bd710bb6c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/modules/search"}, "properties": {"repobilityId": "27299df1594f6a4a", "scanner": "scanner-primary", "fingerprint": "d611692bd710bb6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-693ae7724121812d", "level": "note", "message": {"text": "Unused endpoint: ANY /api/saved-filters/<module_code>"}, "properties": {"repobilityId": "af4deff5be7b7232", "scanner": "scanner-primary", "fingerprint": "693ae7724121812d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e61e8e6f7546d1fa", "level": "note", "message": {"text": "Unused endpoint: ANY /api/saved-filters"}, "properties": {"repobilityId": "8cfd04e522003639", "scanner": "scanner-primary", "fingerprint": "e61e8e6f7546d1fa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c41365fd3b130869", "level": "note", "message": {"text": "Unused endpoint: ANY /api/saved-filters/<int:filter_id>"}, "properties": {"repobilityId": "5741c66f1e93cbab", "scanner": "scanner-primary", "fingerprint": "c41365fd3b130869", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35f8653f309630aa", "level": "note", "message": {"text": "Unused endpoint: ANY /module/PSMM01/"}, "properties": {"repobilityId": "dd5cafe55122bab5", "scanner": "scanner-primary", "fingerprint": "35f8653f309630aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9b55a63af58bb0c", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/PSMM01/data"}, "properties": {"repobilityId": "ddfc2aa94d28aa5f", "scanner": "scanner-primary", "fingerprint": "b9b55a63af58bb0c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03c0df81b89bf8e8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/PSMM01/all"}, "properties": {"repobilityId": "1b67ec6038c2676b", "scanner": "scanner-primary", "fingerprint": "03c0df81b89bf8e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-10cb22ae2732f1ac", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/PSMM01/save"}, "properties": {"repobilityId": "83615edb3c28e810", "scanner": "scanner-primary", "fingerprint": "10cb22ae2732f1ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61cbe04fa204ff39", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/PSMM01/delete"}, "properties": {"repobilityId": "cdbbce7bf4abf05d", "scanner": "scanner-primary", "fingerprint": "61cbe04fa204ff39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7aa3d90e7d4d9712", "level": "note", "message": {"text": "Unused endpoint: ANY /module/CRM01/"}, "properties": {"repobilityId": "f5e3fa49af64f2e2", "scanner": "scanner-primary", "fingerprint": "7aa3d90e7d4d9712", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-568f480817febf2b", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/CRM01/data"}, "properties": {"repobilityId": "769aa23acddc024d", "scanner": "scanner-primary", "fingerprint": "568f480817febf2b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bef740ac927676ae", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/CRM01/all"}, "properties": {"repobilityId": "60f543cca89f2357", "scanner": "scanner-primary", "fingerprint": "bef740ac927676ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f63cf8a2890b26e", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/CRM01/save"}, "properties": {"repobilityId": "77b0964b268a943a", "scanner": "scanner-primary", "fingerprint": "9f63cf8a2890b26e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c2559a4551ef183", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/CRM01/delete"}, "properties": {"repobilityId": "52c5f910264b7910", "scanner": "scanner-primary", "fingerprint": "0c2559a4551ef183", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3775173156666e9b", "level": "note", "message": {"text": "Unused endpoint: ANY /module/INVDS01/"}, "properties": {"repobilityId": "2baf3d8903b9e730", "scanner": "scanner-primary", "fingerprint": "3775173156666e9b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2c979942f2a5f55", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/INVDS01/data"}, "properties": {"repobilityId": "0af06ada55604860", "scanner": "scanner-primary", "fingerprint": "a2c979942f2a5f55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f1998ea610f8c16", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/INVDS01/all"}, "properties": {"repobilityId": "eb05dd95e1bd94bf", "scanner": "scanner-primary", "fingerprint": "1f1998ea610f8c16", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a74d52a624167955", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/INVDS01/save"}, "properties": {"repobilityId": "3c725235d1f229a1", "scanner": "scanner-primary", "fingerprint": "a74d52a624167955", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9df1880595b9532", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/INVDS01/delete"}, "properties": {"repobilityId": "568e6b70cf428aeb", "scanner": "scanner-primary", "fingerprint": "e9df1880595b9532", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb605d872dbb5139", "level": "note", "message": {"text": "Unused endpoint: ANY /module/AUD01/"}, "properties": {"repobilityId": "7fa6653d889b36ba", "scanner": "scanner-primary", "fingerprint": "bb605d872dbb5139", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0878ee62cb4c42a", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/AUD01/data"}, "properties": {"repobilityId": "5d5bfe25cc289b4e", "scanner": "scanner-primary", "fingerprint": "c0878ee62cb4c42a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dca6be2e06b2a82", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/AUD01/export"}, "properties": {"repobilityId": "2b34890825154c9d", "scanner": "scanner-primary", "fingerprint": "2dca6be2e06b2a82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7f2903161a9ef982", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/"}, "properties": {"repobilityId": "0b3c680036928f7f", "scanner": "scanner-primary", "fingerprint": "7f2903161a9ef982", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d84dd484a99f76f", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/vessel-discharged/"}, "properties": {"repobilityId": "e663eb333ffa3673", "scanner": "scanner-primary", "fingerprint": "3d84dd484a99f76f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d726a08789c5b463", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/data"}, "properties": {"repobilityId": "f1d3481265197e25", "scanner": "scanner-primary", "fingerprint": "d726a08789c5b463", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87eb46e7a5bde3b7", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/download-all"}, "properties": {"repobilityId": "c05bd88a83519049", "scanner": "scanner-primary", "fingerprint": "87eb46e7a5bde3b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4ed6104e776ad02", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/download"}, "properties": {"repobilityId": "5cb1cfe125fd3219", "scanner": "scanner-primary", "fingerprint": "a4ed6104e776ad02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41af469278eaa2bc", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-discharged/<int:ldud_id>/preview"}, "properties": {"repobilityId": "078c706b60a2d4d4", "scanner": "scanner-primary", "fingerprint": "41af469278eaa2bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1791e33112f4f712", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/port-map/"}, "properties": {"repobilityId": "7793049b46de4264", "scanner": "scanner-primary", "fingerprint": "1791e33112f4f712", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c112968e9a3b0840", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/port-map/data"}, "properties": {"repobilityId": "4fac3a506e9fb389", "scanner": "scanner-primary", "fingerprint": "c112968e9a3b0840", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ba03a2f50578043", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/vessel-sof/vessels"}, "properties": {"repobilityId": "50a0d6bf92bb2d93", "scanner": "scanner-primary", "fingerprint": "2ba03a2f50578043", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-df7a0df1df24fc41", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/vessel-sof/"}, "properties": {"repobilityId": "2b267d217a3b55ec", "scanner": "scanner-primary", "fingerprint": "df7a0df1df24fc41", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-beaa795d9929f768", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/barge-sof/<int:ldud_id>/<barge_name>"}, "properties": {"repobilityId": "97e44c0b1c80ccb0", "scanner": "scanner-primary", "fingerprint": "beaa795d9929f768", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-046ad55247164764", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/vessel-sof/<int:ldud_id>"}, "properties": {"repobilityId": "39d563887005aeac", "scanner": "scanner-primary", "fingerprint": "046ad55247164764", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ed487fcf4da739c", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/report_24_hours/"}, "properties": {"repobilityId": "9f48a6f5a693c6db", "scanner": "scanner-primary", "fingerprint": "6ed487fcf4da739c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cc711674ba5773d5", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/api/report_24_hours"}, "properties": {"repobilityId": "d0b6419c20315540", "scanner": "scanner-primary", "fingerprint": "cc711674ba5773d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f752ec895da1d6e8", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/dashboard/"}, "properties": {"repobilityId": "450a1a109b276f4d", "scanner": "scanner-primary", "fingerprint": "f752ec895da1d6e8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72f81ee24a5d4ea5", "level": "note", "message": {"text": "Unused endpoint: ANY /module/RP01/mv-barge-report/"}, "properties": {"repobilityId": "adbcdbf9ba8ea14a", "scanner": "scanner-primary", "fingerprint": "72f81ee24a5d4ea5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc5de48f7dbbd722", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/data"}, "properties": {"repobilityId": "2c53e9c9679dacaf", "scanner": "scanner-primary", "fingerprint": "bc5de48f7dbbd722", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e472a1c2a53a860", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/download-all"}, "properties": {"repobilityId": "101117a56a84d03a", "scanner": "scanner-primary", "fingerprint": "3e472a1c2a53a860", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-087140815920ff72", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/<int:barge_line_id>/download"}, "properties": {"repobilityId": "b0b1e74ce91b9e2c", "scanner": "scanner-primary", "fingerprint": "087140815920ff72", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b470ec2c753cdd12", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/mbc-data"}, "properties": {"repobilityId": "a7aea2d095b34482", "scanner": "scanner-primary", "fingerprint": "b470ec2c753cdd12", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac63d67c951ef7b6", "level": "note", "message": {"text": "Unused endpoint: ANY /api/module/RP01/mv-barge-report/shift-data"}, "properties": {"repobilityId": "60fe833b4d521df4", "scanner": "scanner-primary", "fingerprint": "ac63d67c951ef7b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}