torusguard 1.3.6 → 2.0.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/.torusguard/.manifest.json +9 -8
  2. package/.torusguard/auth.json +5 -0
  3. package/.torusguard/rules_catalog.json +242 -518
  4. package/.torusguard/runs/report-latest.html +3529 -364
  5. package/.torusguard/runs/run-20260918-105940-audit/manifest.json +2 -1
  6. package/.torusguard/runs/run-20260918-105940-audit/remediation.md +7 -0
  7. package/.torusguard/runs/run-20260919-145701-audit/findings.json +1 -0
  8. package/.torusguard/runs/run-20260919-145701-audit/findings.md +8 -0
  9. package/.torusguard/runs/run-20260919-145701-audit/manifest.json +12 -0
  10. package/.torusguard/runs/run-20260919-145701-audit/summary.md +5 -0
  11. package/.torusguard/runs/run-20260919-151729-audit/findings.json +1 -0
  12. package/.torusguard/runs/run-20260919-151729-audit/findings.md +8 -0
  13. package/.torusguard/runs/run-20260919-151729-audit/manifest.json +13 -0
  14. package/.torusguard/runs/run-20260919-151729-audit/remediation.md +7 -0
  15. package/.torusguard/runs/run-20260919-151729-audit/summary.md +5 -0
  16. package/.torusguard/runs/run-20260919-152340-audit/findings.json +1 -0
  17. package/.torusguard/runs/run-20260919-152340-audit/findings.md +8 -0
  18. package/.torusguard/runs/run-20260919-152340-audit/manifest.json +12 -0
  19. package/.torusguard/runs/run-20260919-152340-audit/summary.md +5 -0
  20. package/.torusguard/runs/run-20260919-152345-audit/findings.json +1 -0
  21. package/.torusguard/runs/run-20260919-152345-audit/findings.md +8 -0
  22. package/.torusguard/runs/run-20260919-152345-audit/manifest.json +12 -0
  23. package/.torusguard/runs/run-20260919-152345-audit/summary.md +5 -0
  24. package/.torusguard/runs/run-20260919-153500-audit/findings.json +1 -0
  25. package/.torusguard/runs/run-20260919-153500-audit/findings.md +8 -0
  26. package/.torusguard/runs/run-20260919-153500-audit/manifest.json +12 -0
  27. package/.torusguard/runs/run-20260919-153500-audit/summary.md +5 -0
  28. package/.torusguard/scripts/__pycache__/apply_runner.cpython-314.pyc +0 -0
  29. package/.torusguard/scripts/__pycache__/audit_runner.cpython-314.pyc +0 -0
  30. package/.torusguard/scripts/__pycache__/harden_runner.cpython-314.pyc +0 -0
  31. package/.torusguard/scripts/__pycache__/html_reporter.cpython-314.pyc +0 -0
  32. package/.torusguard/scripts/__pycache__/manifest_builder.cpython-314.pyc +0 -0
  33. package/.torusguard/scripts/__pycache__/recipes_runner.cpython-314.pyc +0 -0
  34. package/.torusguard/scripts/__pycache__/report_sync.cpython-314.pyc +0 -0
  35. package/.torusguard/scripts/apply_runner.py +101 -8
  36. package/.torusguard/scripts/audit_runner.py +116 -11
  37. package/.torusguard/scripts/harden_runner.py +122 -68
  38. package/.torusguard/scripts/html_reporter.py +1170 -253
  39. package/.torusguard/scripts/manifest_builder.py +2 -0
  40. package/.torusguard/scripts/recheck_runner.py +2 -1
  41. package/.torusguard/scripts/recipes_runner.py +91 -8
  42. package/.torusguard/scripts/report_sync.py +134 -7
  43. package/.torusguard/scripts/status_runner.py +267 -0
  44. package/.torusguard/snapshots/20260921-182638/go.mod.bak +11 -0
  45. package/.torusguard/snapshots/20260921-185213/file.go.bak +5 -0
  46. package/README.md +314 -364
  47. package/bin/torusguard.js +190 -20
  48. package/package.json +6 -2
  49. package/skills/torusguard/__pycache__/bootstrap.cpython-314.pyc +0 -0
  50. package/skills/torusguard/bootstrap.py +45 -6
  51. package/skills/torusguard/payload/.manifest.json +29 -14
  52. package/skills/torusguard/payload/TORUSGUARD.md +145 -145
  53. package/skills/torusguard/payload/agents/auditor.md +41 -41
  54. package/skills/torusguard/payload/agents/profiler.md +49 -49
  55. package/skills/torusguard/payload/agents/remediator.md +41 -41
  56. package/skills/torusguard/payload/agents/reviewer.md +39 -39
  57. package/skills/torusguard/payload/agents/validator.md +46 -46
  58. package/skills/torusguard/payload/config/scope.json +24 -24
  59. package/skills/torusguard/payload/references/csharp-security.md +41 -41
  60. package/skills/torusguard/payload/references/go-security.md +41 -41
  61. package/skills/torusguard/payload/references/java-security.md +40 -40
  62. package/skills/torusguard/payload/references/polyglot-security-matrix.md +25 -25
  63. package/skills/torusguard/payload/references/rust-security.md +40 -40
  64. package/skills/torusguard/payload/rules/custom/.gitkeep +1 -1
  65. package/skills/torusguard/payload/rules/custom/README.md +30 -30
  66. package/skills/torusguard/payload/scripts/__pycache__/audit_runner.cpython-314.pyc +0 -0
  67. package/skills/torusguard/payload/scripts/__pycache__/html_reporter.cpython-314.pyc +0 -0
  68. package/skills/torusguard/payload/scripts/__pycache__/report_sync.cpython-314.pyc +0 -0
  69. package/skills/torusguard/payload/scripts/__pycache__/sarif_exporter.cpython-314.pyc +0 -0
  70. package/skills/torusguard/payload/scripts/__pycache__/term_ui.cpython-314.pyc +0 -0
  71. package/skills/torusguard/payload/scripts/apply_runner.py +101 -8
  72. package/skills/torusguard/payload/scripts/audit_runner.py +116 -11
  73. package/skills/torusguard/payload/scripts/harden_runner.py +122 -68
  74. package/skills/torusguard/payload/scripts/html_reporter.py +1170 -253
  75. package/skills/torusguard/payload/scripts/manifest_builder.py +2 -0
  76. package/skills/torusguard/payload/scripts/recheck_runner.py +2 -1
  77. package/skills/torusguard/payload/scripts/recipes_runner.py +91 -8
  78. package/skills/torusguard/payload/scripts/report_sync.py +134 -7
  79. package/skills/torusguard/payload/scripts/rules_sync.py +321 -321
  80. package/skills/torusguard/payload/scripts/safety_gate.py +64 -64
  81. package/skills/torusguard/payload/scripts/status_runner.py +267 -0
  82. package/skills/torusguard/payload/skills/torusguard/references/csharp-security.md +41 -41
  83. package/skills/torusguard/payload/skills/torusguard/references/go-security.md +41 -41
  84. package/skills/torusguard/payload/skills/torusguard/references/java-security.md +40 -40
  85. package/skills/torusguard/payload/skills/torusguard/references/polyglot-security-matrix.md +25 -25
  86. package/skills/torusguard/payload/skills/torusguard/references/rust-security.md +40 -40
  87. package/skills/torusguard/payload/templates/audit-report.template.md +54 -54
  88. package/skills/torusguard/payload/templates/authorization.template.md +34 -34
  89. package/skills/torusguard/payload/templates/finding-card.template.md +32 -32
  90. package/skills/torusguard/payload/templates/remediation-bundle.template.md +35 -35
  91. package/skills/torusguard/payload/workflows/apply.md +9 -1
  92. package/skills/torusguard/payload/workflows/audit.md +8 -2
  93. package/skills/torusguard/payload/workflows/harden.md +6 -1
  94. package/skills/torusguard/payload/workflows/init.md +7 -1
  95. package/skills/torusguard/payload/workflows/recipes.md +55 -0
  96. package/skills/torusguard/payload/workflows/report.md +59 -55
  97. package/skills/torusguard/payload/workflows/status.md +4 -1
  98. package/skills/torusguard/payload/workflows/torusguard-apply.md +110 -0
  99. package/skills/torusguard/payload/workflows/torusguard-audit.md +105 -0
  100. package/skills/torusguard/payload/workflows/torusguard-authorize.md +96 -0
  101. package/skills/torusguard/payload/workflows/torusguard-exploit-check.md +98 -0
  102. package/skills/torusguard/payload/workflows/torusguard-harden.md +104 -0
  103. package/skills/torusguard/payload/workflows/torusguard-init.md +106 -0
  104. package/skills/torusguard/payload/workflows/torusguard-recheck.md +101 -0
  105. package/skills/torusguard/payload/workflows/torusguard-recipes.md +55 -0
  106. package/skills/torusguard/payload/workflows/torusguard-report.md +105 -0
  107. package/skills/torusguard/payload/workflows/torusguard-status.md +103 -0
  108. package/skills/torusguard/payload/workflows/torusguard-verify.md +100 -0
  109. package/skills/torusguard/payload/workflows/torusguard-web-validate.md +96 -0
  110. package/skills/torusguard/payload/workflows/torusguard.md +19 -0
@@ -133,6 +133,117 @@
133
133
  .sev-card:hover { transform: translateY(-2px); border-color: var(--accent-blue); }
134
134
  .sev-card .sev-count { font-size: 34px; font-weight: 800; }
135
135
  .sev-card .sev-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); margin-top: 4px; }
136
+ .sev-sub-badge {
137
+ font-size: 11px;
138
+ font-weight: 600;
139
+ margin-top: 6px;
140
+ padding: 2px 8px;
141
+ border-radius: 12px;
142
+ background: rgba(88, 166, 255, 0.1);
143
+ border: 1px solid rgba(88, 166, 255, 0.25);
144
+ color: var(--accent-blue);
145
+ display: inline-block;
146
+ }
147
+ .sev-sub-badge.badge-sub-clean {
148
+ background: rgba(63, 185, 80, 0.15);
149
+ border-color: rgba(63, 185, 80, 0.4);
150
+ color: var(--accent-green);
151
+ }
152
+ .sev-sub-badge.badge-sub-warn {
153
+ background: rgba(210, 153, 34, 0.15);
154
+ border-color: rgba(210, 153, 34, 0.4);
155
+ color: var(--accent-yellow);
156
+ }
157
+
158
+ /* Governed Remediation Ledger */
159
+ .remediation-ledger-card {
160
+ margin-bottom: 24px;
161
+ background: var(--bg-surface);
162
+ border: 1px solid var(--border-subtle);
163
+ border-radius: 8px;
164
+ padding: 18px;
165
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
166
+ border-top: 3px solid var(--accent-green);
167
+ }
168
+ .remediation-header {
169
+ display: flex;
170
+ justify-content: space-between;
171
+ align-items: center;
172
+ flex-wrap: wrap;
173
+ gap: 12px;
174
+ margin-bottom: 14px;
175
+ }
176
+ .remediation-title-group {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 10px;
180
+ }
181
+ .rem-progress-bar-bg {
182
+ width: 100%;
183
+ height: 8px;
184
+ background: var(--bg-card);
185
+ border-radius: 4px;
186
+ overflow: hidden;
187
+ margin-bottom: 16px;
188
+ }
189
+ .rem-progress-bar-fill {
190
+ height: 100%;
191
+ background: linear-gradient(90deg, #2ea043, #3fb950);
192
+ border-radius: 4px;
193
+ transition: width 0.8s ease;
194
+ }
195
+ .rem-stat-chips-grid {
196
+ display: grid;
197
+ grid-template-columns: repeat(4, 1fr);
198
+ gap: 12px;
199
+ }
200
+ @media (max-width: 900px) { .rem-stat-chips-grid { grid-template-columns: 1fr 1fr; } }
201
+ @media (max-width: 550px) { .rem-stat-chips-grid { grid-template-columns: 1fr; } }
202
+ .rem-chip {
203
+ background: var(--bg-card);
204
+ border: 1px solid var(--border-subtle);
205
+ border-radius: 6px;
206
+ padding: 12px;
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: 6px;
210
+ }
211
+ .rem-chip-top {
212
+ display: flex;
213
+ justify-content: space-between;
214
+ align-items: center;
215
+ }
216
+ .rem-chip-sev { font-size: 10px; font-weight: 700; padding: 2px 6px; border-radius: 4px; }
217
+ .rem-chip-status { font-size: 11px; font-weight: 600; }
218
+ .rem-chip-main {
219
+ display: flex;
220
+ align-items: baseline;
221
+ gap: 6px;
222
+ }
223
+ .rem-chip-num { font-size: 22px; font-weight: 800; color: var(--text-main); }
224
+ .rem-chip-lbl { font-size: 11px; color: var(--text-muted); }
225
+ .rem-chip-bar {
226
+ width: 100%;
227
+ height: 4px;
228
+ background: rgba(255, 255, 255, 0.05);
229
+ border-radius: 2px;
230
+ overflow: hidden;
231
+ margin-top: 2px;
232
+ }
233
+ .rem-chip-bar-fill { height: 100%; border-radius: 2px; }
234
+ .rem-chip-total {
235
+ border-color: rgba(63, 185, 80, 0.35);
236
+ background: rgba(63, 185, 80, 0.05);
237
+ }
238
+ .heatmap-badge-clean {
239
+ font-size: 10px;
240
+ font-weight: 700;
241
+ color: var(--accent-green);
242
+ background: rgba(63, 185, 80, 0.12);
243
+ border: 1px solid rgba(63, 185, 80, 0.3);
244
+ border-radius: 4px;
245
+ padding: 1px 6px;
246
+ }
136
247
 
137
248
  /* What-If Posture Simulator Card */
138
249
  .simulator-card {
@@ -402,6 +513,46 @@
402
513
  justify-content: space-between;
403
514
  }
404
515
 
516
+ /* Clean Baseline Card & Findings Archive */
517
+ .clean-baseline-card {
518
+ background: var(--bg-surface);
519
+ border: 1px solid var(--border-subtle);
520
+ border-left: 4px solid var(--accent-green);
521
+ border-radius: 8px;
522
+ padding: 16px 20px;
523
+ margin-bottom: 24px;
524
+ transition: border-color 0.2s;
525
+ }
526
+ .clean-baseline-header {
527
+ display: flex;
528
+ justify-content: space-between;
529
+ align-items: center;
530
+ flex-wrap: wrap;
531
+ gap: 14px;
532
+ }
533
+ .btn-archive-toggle {
534
+ background: var(--bg-card);
535
+ border: 1px solid var(--border-subtle);
536
+ color: var(--text-main);
537
+ padding: 6px 14px;
538
+ border-radius: 6px;
539
+ font-size: 12px;
540
+ font-weight: 600;
541
+ cursor: pointer;
542
+ display: inline-flex;
543
+ align-items: center;
544
+ gap: 8px;
545
+ transition: all 0.2s ease;
546
+ }
547
+ .btn-archive-toggle:hover {
548
+ background: #30363d;
549
+ border-color: var(--accent-blue);
550
+ color: var(--accent-blue);
551
+ }
552
+ body.light-theme .btn-archive-toggle:hover {
553
+ background: #e1e4e8;
554
+ }
555
+
405
556
  /* Table & Drawers */
406
557
  .table-container {
407
558
  background: var(--bg-surface);
@@ -512,11 +663,18 @@
512
663
  }
513
664
 
514
665
  /* OWASP Grid */
666
+ .owasp-card-wrapper {
667
+ padding: 10px 14px;
668
+ display: flex;
669
+ flex-direction: column;
670
+ justify-content: flex-start;
671
+ gap: 6px;
672
+ }
515
673
  .grid-owasp {
516
674
  display: grid;
517
675
  grid-template-columns: repeat(4, 1fr);
518
- gap: 12px;
519
- margin-bottom: 24px;
676
+ gap: 8px;
677
+ margin-bottom: 0;
520
678
  }
521
679
  @media (max-width: 950px) { .grid-owasp { grid-template-columns: repeat(2, 1fr); } }
522
680
  @media (max-width: 550px) { .grid-owasp { grid-template-columns: 1fr; } }
@@ -524,37 +682,44 @@
524
682
  background: var(--bg-surface);
525
683
  border: 1px solid var(--border-subtle);
526
684
  border-radius: 6px;
527
- padding: 12px;
685
+ padding: 8px 10px;
528
686
  }
529
- .owasp-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
687
+ .owasp-top { display: flex; justify-content: space-between; align-items: center; margin-bottom: 6px; }
530
688
  .owasp-title { font-size: 11px; font-weight: 600; color: var(--text-main); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
531
- .owasp-badge { font-size: 10px; font-weight: 700; border: 1px solid; border-radius: 8px; padding: 1px 6px; }
532
- .owasp-bar-bg { width: 100%; height: 6px; background: var(--bg-card); border-radius: 3px; overflow: hidden; }
689
+ .owasp-badge { font-size: 9.5px; font-weight: 700; border: 1px solid; border-radius: 8px; padding: 1px 5px; white-space: nowrap; }
690
+ .owasp-bar-bg { width: 100%; height: 5px; background: var(--bg-card); border-radius: 3px; overflow: hidden; }
533
691
  .owasp-bar { height: 100%; border-radius: 3px; }
534
692
 
535
693
  /* Compliance Framework Grid */
694
+ .comp-card-wrapper {
695
+ padding: 10px 14px;
696
+ display: flex;
697
+ flex-direction: column;
698
+ justify-content: flex-start;
699
+ gap: 6px;
700
+ }
536
701
  .grid-compliance {
537
702
  display: grid;
538
703
  grid-template-columns: repeat(3, 1fr);
539
- gap: 14px;
540
- margin-bottom: 24px;
704
+ gap: 8px;
705
+ margin-bottom: 0;
541
706
  }
542
707
  @media (max-width: 900px) { .grid-compliance { grid-template-columns: 1fr; } }
543
- .comp-card { padding: 14px; }
708
+ .comp-card { padding: 8px 10px; }
544
709
  .comp-card-header {
545
710
  display: flex;
546
711
  justify-content: space-between;
547
- align-items: flex-start;
548
- margin-bottom: 12px;
712
+ align-items: center;
713
+ margin-bottom: 6px;
549
714
  border-bottom: 1px solid var(--border-subtle);
550
- padding-bottom: 10px;
715
+ padding-bottom: 4px;
551
716
  }
552
- .comp-title { font-size: 13px; font-weight: 700; color: var(--text-main); }
553
- .comp-sub { font-size: 11px; color: var(--text-muted); margin-top: 2px; }
554
- .comp-ctrl-list { display: flex; flex-direction: column; gap: 8px; }
555
- .comp-ctrl-row { display: flex; justify-content: space-between; align-items: center; font-size: 11px; }
556
- .comp-ctrl-code { font-weight: 600; color: var(--text-main); }
557
- .comp-ctrl-fams { color: var(--text-muted); font-size: 10px; }
717
+ .comp-title { font-size: 12px; font-weight: 700; color: var(--text-main); }
718
+ .comp-sub { font-size: 9.5px; color: var(--text-muted); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 120px; }
719
+ .comp-ctrl-list { display: flex; flex-direction: column; gap: 4px; }
720
+ .comp-ctrl-row { display: flex; justify-content: space-between; align-items: center; font-size: 10.5px; padding: 1px 0; }
721
+ .comp-ctrl-code { font-weight: 600; color: var(--text-main); font-size: 10px; }
722
+ .comp-ctrl-fams { color: var(--text-muted); font-size: 9px; line-height: 1.1; }
558
723
 
559
724
  /* Dual Grids */
560
725
  .grid-bottom {
@@ -565,24 +730,251 @@
565
730
  }
566
731
  @media (max-width: 850px) { .grid-bottom { grid-template-columns: 1fr; } }
567
732
 
733
+ .clusters-card {
734
+ padding: 10px 14px;
735
+ display: flex;
736
+ flex-direction: column;
737
+ justify-content: flex-start;
738
+ gap: 6px;
739
+ }
740
+ .clusters-compact-list {
741
+ display: grid;
742
+ grid-template-columns: repeat(2, 1fr);
743
+ gap: 6px;
744
+ max-height: 140px;
745
+ overflow-y: auto;
746
+ }
747
+ .clusters-compact-list .empty-state {
748
+ grid-column: 1 / -1;
749
+ }
750
+ @media (max-width: 600px) { .clusters-compact-list { grid-template-columns: 1fr; } }
568
751
  .cluster-item {
569
752
  background: var(--bg-card);
570
753
  border: 1px solid var(--border-subtle);
571
- border-radius: 6px;
572
- padding: 10px 12px;
573
- margin-bottom: 8px;
754
+ border-radius: 5px;
755
+ padding: 5px 8px;
756
+ margin-bottom: 0;
757
+ }
758
+ .cluster-header { display: flex; justify-content: space-between; align-items: center; font-size: 11px; gap: 4px; }
759
+ .cluster-header strong { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 130px; }
760
+ .cluster-sub { font-size: 9.5px; color: var(--text-muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
761
+
762
+ /* Compact Single-Page Layout */
763
+ .header-compact {
764
+ display: flex;
765
+ justify-content: space-between;
766
+ align-items: center;
767
+ padding-bottom: 8px;
768
+ border-bottom: 1px solid var(--border-subtle);
769
+ margin-bottom: 4px;
770
+ }
771
+ .row-top {
772
+ display: grid;
773
+ grid-template-columns: 150px 1fr;
774
+ gap: 12px;
775
+ align-items: stretch;
776
+ }
777
+ @media (max-width: 800px) { .row-top { grid-template-columns: 1fr; } }
778
+ .gauge-card-compact {
779
+ display: flex;
780
+ flex-direction: column;
781
+ align-items: center;
782
+ justify-content: center;
783
+ padding: 10px;
784
+ background: var(--bg-surface);
785
+ border: 1px solid var(--border-subtle);
786
+ border-radius: 8px;
787
+ text-align: center;
788
+ }
789
+ .row-middle {
790
+ display: grid;
791
+ grid-template-columns: 1.15fr 0.85fr;
792
+ gap: 12px;
793
+ align-items: start;
794
+ }
795
+ @media (max-width: 880px) { .row-middle { grid-template-columns: 1fr; } }
796
+ .row-bottom {
797
+ display: grid;
798
+ grid-template-columns: 1fr 1fr;
799
+ gap: 12px;
800
+ align-items: start;
801
+ }
802
+ @media (max-width: 880px) { .row-bottom { grid-template-columns: 1fr; } }
803
+ .footer-compact {
804
+ display: flex;
805
+ justify-content: space-between;
806
+ align-items: center;
807
+ border-top: 1px solid var(--border-subtle);
808
+ padding-top: 8px;
809
+ margin-top: 4px;
810
+ font-size: 11px;
811
+ color: var(--text-muted);
812
+ flex-wrap: wrap;
813
+ gap: 8px;
814
+ }
815
+ .footer-actions {
816
+ display: flex;
817
+ align-items: center;
818
+ gap: 8px;
819
+ flex-wrap: wrap;
820
+ }
821
+ .footer-meta {
822
+ display: flex;
823
+ align-items: center;
824
+ gap: 12px;
825
+ }
826
+ .footer-links a {
827
+ color: var(--accent-blue);
828
+ text-decoration: none;
829
+ }
830
+ .footer-links a:hover {
831
+ text-decoration: underline;
574
832
  }
575
- .cluster-header { display: flex; justify-content: space-between; align-items: center; font-size: 13px; }
576
- .cluster-sub { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
577
833
 
578
- /* Heatmap */
579
- .heatmap-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; cursor: pointer; padding: 4px 6px; border-radius: 4px; }
580
- .heatmap-row:hover { background: rgba(255, 255, 255, 0.03); }
581
- body.light-theme .heatmap-row:hover { background: rgba(0, 0, 0, 0.03); }
582
- .heatmap-label { font-size: 12px; font-family: monospace; color: var(--text-main); min-width: 110px; text-align: right; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
583
- .heatmap-bar-bg { flex: 1; height: 16px; background: var(--bg-card); border-radius: 4px; overflow: hidden; }
584
- .heatmap-bar { height: 100%; border-radius: 4px; }
585
- .heatmap-count { font-size: 12px; font-weight: 600; color: var(--text-muted); min-width: 25px; }
834
+ /* 2D Directory Attack Surface Heatmap Matrix */
835
+ .heatmap-card {
836
+ background: var(--bg-surface);
837
+ border: 1px solid var(--border-subtle);
838
+ border-radius: 8px;
839
+ padding: 10px 14px;
840
+ display: flex;
841
+ flex-direction: column;
842
+ justify-content: flex-start;
843
+ gap: 6px;
844
+ }
845
+ .card-compact-header {
846
+ display: flex;
847
+ justify-content: space-between;
848
+ align-items: center;
849
+ margin-bottom: 6px;
850
+ flex-wrap: wrap;
851
+ gap: 6px;
852
+ }
853
+ .heatmap-legend {
854
+ display: flex;
855
+ align-items: center;
856
+ gap: 8px;
857
+ font-size: 10px;
858
+ color: var(--text-muted);
859
+ }
860
+ .heat-leg-item {
861
+ display: inline-flex;
862
+ align-items: center;
863
+ gap: 3px;
864
+ }
865
+ .heat-leg-dot {
866
+ display: inline-flex;
867
+ align-items: center;
868
+ justify-content: center;
869
+ width: 14px;
870
+ height: 14px;
871
+ border-radius: 3px;
872
+ font-size: 9px;
873
+ font-weight: 700;
874
+ }
875
+ .heatmap-table-wrap {
876
+ overflow-x: auto;
877
+ }
878
+ .heatmap-table {
879
+ width: 100%;
880
+ border-collapse: separate;
881
+ border-spacing: 4px;
882
+ font-size: 11px;
883
+ }
884
+ .heatmap-table th {
885
+ color: var(--text-muted);
886
+ font-weight: 600;
887
+ padding: 2px 4px;
888
+ text-align: center;
889
+ font-size: 10px;
890
+ text-transform: uppercase;
891
+ letter-spacing: 0.5px;
892
+ }
893
+ .heatmap-row {
894
+ cursor: pointer;
895
+ transition: background 0.15s ease;
896
+ }
897
+ .heatmap-row:hover {
898
+ background: rgba(255, 255, 255, 0.04);
899
+ }
900
+ body.light-theme .heatmap-row:hover {
901
+ background: rgba(0, 0, 0, 0.04);
902
+ }
903
+ .heatmap-label-cell {
904
+ padding: 4px 6px;
905
+ font-family: monospace;
906
+ font-size: 11px;
907
+ color: var(--text-main);
908
+ white-space: nowrap;
909
+ font-weight: 600;
910
+ }
911
+ .heat-cell {
912
+ text-align: center;
913
+ padding: 4px 6px;
914
+ border-radius: 4px;
915
+ font-weight: 700;
916
+ font-size: 11px;
917
+ transition: transform 0.1s ease, filter 0.1s ease;
918
+ cursor: pointer;
919
+ }
920
+ .heat-cell:hover {
921
+ transform: scale(1.08);
922
+ filter: brightness(1.2);
923
+ }
924
+ .heat-cell-safe {
925
+ background: rgba(46, 160, 67, 0.22);
926
+ border: 1px solid rgba(63, 185, 80, 0.45);
927
+ color: #7ee787;
928
+ }
929
+ body.light-theme .heat-cell-safe {
930
+ background: rgba(46, 160, 67, 0.15);
931
+ border-color: rgba(46, 160, 67, 0.4);
932
+ color: #1a7f37;
933
+ }
934
+ .heat-cell-warn {
935
+ background: rgba(210, 153, 34, 0.22);
936
+ border: 1px solid rgba(210, 153, 34, 0.5);
937
+ color: #e3b341;
938
+ }
939
+ body.light-theme .heat-cell-warn {
940
+ background: rgba(210, 153, 34, 0.15);
941
+ border-color: rgba(210, 153, 34, 0.4);
942
+ color: #9a6700;
943
+ }
944
+ .heat-cell-crit {
945
+ background: rgba(248, 81, 73, 0.25);
946
+ border: 1px solid rgba(248, 81, 73, 0.55);
947
+ color: #ffa198;
948
+ }
949
+ body.light-theme .heat-cell-crit {
950
+ background: rgba(248, 81, 73, 0.15);
951
+ border-color: rgba(248, 81, 73, 0.4);
952
+ color: #cf222e;
953
+ }
954
+ .heat-cell-idle {
955
+ background: var(--bg-card);
956
+ border: 1px solid var(--border-subtle);
957
+ color: var(--text-muted);
958
+ opacity: 0.6;
959
+ }
960
+
961
+ /* Modal Large for Details Overlays */
962
+ .modal-lg {
963
+ max-width: 1040px;
964
+ width: 95%;
965
+ max-height: 88vh;
966
+ display: flex;
967
+ flex-direction: column;
968
+ padding: 18px 22px;
969
+ }
970
+ .modal-lg .modal-body {
971
+ overflow-y: auto;
972
+ flex: 1;
973
+ padding-right: 6px;
974
+ }
975
+
976
+ /* Existing Heatmap Row fallback */
977
+ .heatmap-row { display: table-row; }
586
978
 
587
979
  /* Golden Recipes & Diff Engine */
588
980
  .recipe-card {
@@ -693,29 +1085,32 @@
693
1085
  </head>
694
1086
  <body>
695
1087
  <div class="container">
696
- <header>
1088
+ <header class="header-compact">
697
1089
  <div class="logo-group">
698
- <h1><span class="shield-icon">&#128737;</span> TorusGuard Security Report</h1>
1090
+ <h1 style="font-size: 16px; margin: 0; display: flex; align-items: center; gap: 8px;">
1091
+ <span class="shield-icon">&#128737;</span> TorusGuard Security Posture
1092
+ </h1>
699
1093
  <div class="project-meta">
700
1094
  <strong>TorusGuard</strong> &middot;
701
1095
  TypeScript &middot;
702
- 2026-09-18 16:20:01 IST
1096
+ <span class="badge badge-subtle">v1.3.6</span>
1097
+ <span class="badge badge-success">&#9679; 100% HARDENED</span>
703
1098
  </div>
704
1099
  </div>
705
1100
  <div class="header-actions">
706
- <button class="btn" id="themeToggleBtn" onclick="toggleTheme()">☀️ Light Mode</button>
707
- <button class="btn" onclick="downloadSarif()">&#128229; Export SARIF</button>
708
- <button class="btn" onclick="downloadCsv()">&#128202; Export CSV</button>
709
- <button class="btn" onclick="window.print()">&#128438; Print / PDF</button>
1101
+ <button class="btn btn-sm" id="themeToggleBtn" onclick="toggleTheme()">☀️ Light Mode</button>
1102
+ <button class="btn btn-sm" onclick="downloadSarif()">&#128229; SARIF</button>
1103
+ <button class="btn btn-sm" onclick="downloadCsv()">&#128202; CSV</button>
1104
+ <button class="btn btn-sm" onclick="window.print()">&#128438; Print</button>
710
1105
  <div class="status-badge status-clean">🟢 HARDENED & SECURE</div>
711
1106
  </div>
712
1107
  </header>
713
1108
 
714
- <!-- KPI Cards -->
715
- <div class="grid-kpi">
716
- <div class="card gauge-card">
1109
+ <!-- Row 1: Dynamic Circular Gauge & Governed Remediation Velocity Ledger -->
1110
+ <div class="row-top">
1111
+ <div class="card gauge-card-compact">
717
1112
  <div style="position: relative; display: flex; align-items: center; justify-content: center;">
718
- <svg class="gauge-svg" viewBox="0 0 100 100">
1113
+ <svg class="gauge-svg" style="width: 76px; height: 76px;" viewBox="0 0 100 100">
719
1114
  <defs>
720
1115
  <linearGradient id="gaugeGradient" x1="0%" y1="0%" x2="100%" y2="100%">
721
1116
  <stop offset="0%" stop-color="#3fb950" />
@@ -728,82 +1123,3008 @@
728
1123
  <circle class="gauge-bg" cx="50" cy="50" r="40" />
729
1124
  <circle class="gauge-fill" id="gaugeCircleFill" cx="50" cy="50" r="40" stroke="url(#gaugeGradient)" filter="url(#gaugeGlow)" />
730
1125
  </svg>
731
- <div class="gauge-value" id="postureScoreText">0</div>
1126
+ <div class="gauge-value" id="postureScoreText" style="font-size: 20px;">0</div>
732
1127
  </div>
733
- <div class="stat-label" style="font-size: 12px; color: var(--text-muted); text-transform: uppercase; margin-top: 10px;">Posture Score</div>
1128
+ <div class="stat-label" style="font-size: 11px; color: var(--text-muted); text-transform: uppercase; margin-top: 4px; font-weight: 700;">Posture Score</div>
734
1129
  </div>
735
1130
 
736
- <div class="card sev-card" onclick="filterBySeverity('critical')">
737
- <div class="sev-count" style="color: var(--accent-red);">0</div>
738
- <div class="sev-label">Critical Exposure</div>
1131
+
1132
+ <!-- Governed Remediation & Problem-Solved Velocity Ledger -->
1133
+ <div class="card remediation-ledger-card">
1134
+ <div class="remediation-header">
1135
+ <div class="remediation-title-group">
1136
+ <span style="font-size: 22px;">⚡</span>
1137
+ <div>
1138
+ <div style="font-size: 15px; font-weight: 700; color: var(--text-main);">
1139
+ Governed Remediation &amp; Problem-Solved Velocity
1140
+ </div>
1141
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 2px;">
1142
+ Historical closure ledger of vulnerabilities discovered, formulated into Ponytail patches, and verified fixed.
1143
+ </div>
1144
+ </div>
1145
+ </div>
1146
+ <div class="remediation-overall-badge">
1147
+ <span class="badge badge-success" style="font-size: 12px; padding: 4px 10px;">
1148
+ &#10004; 68 of 68 Fixed (100% Defended)
1149
+ </span>
1150
+ </div>
1151
+ </div>
1152
+
1153
+ <div class="rem-progress-bar-bg">
1154
+ <div class="rem-progress-bar-fill" style="width: 100%;"></div>
739
1155
  </div>
740
1156
 
741
- <div class="card sev-card" onclick="filterBySeverity('high')">
742
- <div class="sev-count" style="color: var(--accent-orange);">0</div>
743
- <div class="sev-label">High Exposure</div>
1157
+ <div class="rem-stat-chips-grid">
1158
+ <div class="rem-chip">
1159
+ <div class="rem-chip-top">
1160
+ <span class="rem-chip-sev badge badge-critical">Critical</span>
1161
+ <span class="rem-chip-status" style="color: var(--accent-green);">
1162
+ 🟢 100% Defended
1163
+ </span>
1164
+ </div>
1165
+ <div class="rem-chip-main">
1166
+ <span class="rem-chip-num">0</span>
1167
+ <span class="rem-chip-lbl">Solved / 0 Discovered</span>
1168
+ </div>
1169
+ <div class="sev-sub-badge badge-sub-clean">0 Discovered</div>
1170
+ <div class="rem-chip-bar"><div class="rem-chip-bar-fill" style="width: 100%; background: var(--accent-green);"></div></div>
1171
+ </div>
1172
+
1173
+ <div class="rem-chip">
1174
+ <div class="rem-chip-top">
1175
+ <span class="rem-chip-sev badge badge-high">High</span>
1176
+ <span class="rem-chip-status" style="color: var(--accent-green);">
1177
+ 🟢 100% Defended
1178
+ </span>
1179
+ </div>
1180
+ <div class="rem-chip-main">
1181
+ <span class="rem-chip-num">28</span>
1182
+ <span class="rem-chip-lbl">Solved / 28 Discovered</span>
1183
+ </div>
1184
+ <div class="sev-sub-badge badge-sub-clean">🟢 28 Remediated (100% Defended)</div>
1185
+ <div class="rem-chip-bar"><div class="rem-chip-bar-fill" style="width: 100%; background: var(--accent-green);"></div></div>
1186
+ </div>
1187
+
1188
+ <div class="rem-chip">
1189
+ <div class="rem-chip-top">
1190
+ <span class="rem-chip-sev badge badge-medium">Medium / Low</span>
1191
+ <span class="rem-chip-status" style="color: var(--accent-green);">
1192
+ 🟢 100% Defended
1193
+ </span>
1194
+ </div>
1195
+ <div class="rem-chip-main">
1196
+ <span class="rem-chip-num">40</span>
1197
+ <span class="rem-chip-lbl">Solved / 40 Discovered</span>
1198
+ </div>
1199
+ <div class="sev-sub-badge badge-sub-clean">🟢 40 Remediated (100% Defended)</div>
1200
+ <div class="rem-chip-bar"><div class="rem-chip-bar-fill" style="width: 100%; background: var(--accent-green);"></div></div>
1201
+ </div>
1202
+
1203
+ <div class="rem-chip rem-chip-total">
1204
+ <div class="rem-chip-top">
1205
+ <span class="rem-chip-sev badge badge-success">Guards Defended</span>
1206
+ <span class="rem-chip-status" style="color: var(--accent-green);">
1207
+ 🟢 100% Hardened
1208
+ </span>
1209
+ </div>
1210
+ <div class="rem-chip-main">
1211
+ <span class="rem-chip-num">68</span>
1212
+ <span class="rem-chip-lbl">Total Flaws Neutralized</span>
1213
+ </div>
1214
+ <div class="rem-chip-bar"><div class="rem-chip-bar-fill" style="width: 100%; background: var(--accent-green);"></div></div>
1215
+ </div>
744
1216
  </div>
1217
+ </div>
1218
+
1219
+ </div>
745
1220
 
746
- <div class="card sev-card" onclick="filterBySeverity('medium')">
747
- <div class="sev-count" style="color: var(--accent-yellow);">0</div>
748
- <div class="sev-label">Medium / Low</div>
1221
+ <!-- Row 2: 2D Directory Attack Surface Heatmap & Architectural Clusters -->
1222
+ <div class="row-middle">
1223
+ <div class="card heatmap-card">
1224
+ <div class="card-compact-header">
1225
+ <div class="section-title" style="margin-bottom: 0;">&#128293; Directory Attack Surface Heatmap</div>
1226
+ <div class="heatmap-legend">
1227
+ <span class="heat-leg-item"><span class="heat-leg-dot heat-cell-safe">✔</span> Defended</span>
1228
+ <span class="heat-leg-item"><span class="heat-leg-dot heat-cell-warn">🟡</span> Warning</span>
1229
+ <span class="heat-leg-item"><span class="heat-leg-dot heat-cell-crit">🔴</span> High Risk</span>
1230
+ <span class="heat-leg-item"><span class="heat-leg-dot heat-cell-idle">—</span> Clean</span>
1231
+ </div>
1232
+ </div>
1233
+ <div class="heatmap-table-wrap">
1234
+ <table class="heatmap-table">
1235
+ <thead>
1236
+ <tr>
1237
+ <th style="text-align: left; width: 90px;">Module</th>
1238
+ <th>AUTH</th>
1239
+ <th>DB</th>
1240
+ <th>INPUT</th>
1241
+ <th>NET</th>
1242
+ <th>PLAT</th>
1243
+ <th>SEC</th>
1244
+ <th style="text-align: right; width: 85px;">Posture</th>
1245
+ </tr>
1246
+ </thead>
1247
+ <tbody>
1248
+
1249
+ <tr class="heatmap-row" onclick="filterByDirectory('harness/')" title="Click to filter findings in harness/">
1250
+ <td class="heatmap-label-cell"><code>harness/</code></td>
1251
+ <td class="heat-cell heat-cell-safe" title="harness/ • Identity &amp; Auth: 9 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 9</td><td class="heat-cell heat-cell-safe" title="harness/ • Database &amp; Isolation: 12 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 12</td><td class="heat-cell heat-cell-safe" title="harness/ • Input &amp; LLM Defense: 10 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 10</td><td class="heat-cell heat-cell-safe" title="harness/ • Network &amp; SSRF: 1 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 1</td><td class="heat-cell heat-cell-safe" title="harness/ • Platform &amp; Supply: 23 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 23</td><td class="heat-cell heat-cell-safe" title="harness/ • Secrets &amp; Keys: 11 Invariants Hardened" onclick="filterByDirectory('harness/'); event.stopPropagation();">✔ 11</td>
1252
+ <td style="text-align: right;"><span class="heatmap-badge-clean">🟢 66 Defended</span></td>
1253
+ </tr>
1254
+ <tr class="heatmap-row" onclick="filterByDirectory('tests/')" title="Click to filter findings in tests/">
1255
+ <td class="heatmap-label-cell"><code>tests/</code></td>
1256
+ <td class="heat-cell heat-cell-idle" title="tests/ • Identity &amp; Auth: Clean / Zero Flaws" onclick="filterByDirectory('tests/'); event.stopPropagation();">—</td><td class="heat-cell heat-cell-safe" title="tests/ • Database &amp; Isolation: 2 Invariants Hardened" onclick="filterByDirectory('tests/'); event.stopPropagation();">✔ 2</td><td class="heat-cell heat-cell-idle" title="tests/ • Input &amp; LLM Defense: Clean / Zero Flaws" onclick="filterByDirectory('tests/'); event.stopPropagation();">—</td><td class="heat-cell heat-cell-idle" title="tests/ • Network &amp; SSRF: Clean / Zero Flaws" onclick="filterByDirectory('tests/'); event.stopPropagation();">—</td><td class="heat-cell heat-cell-idle" title="tests/ • Platform &amp; Supply: Clean / Zero Flaws" onclick="filterByDirectory('tests/'); event.stopPropagation();">—</td><td class="heat-cell heat-cell-idle" title="tests/ • Secrets &amp; Keys: Clean / Zero Flaws" onclick="filterByDirectory('tests/'); event.stopPropagation();">—</td>
1257
+ <td style="text-align: right;"><span class="heatmap-badge-clean">🟢 2 Defended</span></td>
1258
+ </tr>
1259
+ </tbody>
1260
+ </table>
1261
+ </div>
749
1262
  </div>
750
1263
 
751
- <div class="card sev-card" onclick="toggleDefendedSection()">
752
- <div class="sev-count" style="color: var(--accent-green);">74<span style="font-size: 16px; color: var(--text-muted);">/74</span></div>
753
- <div class="sev-label">Guards Defended</div>
1264
+ <div class="card clusters-card">
1265
+ <div class="section-title" style="margin-bottom: 8px;">&#128736; Root-Cause Architectural Clusters</div>
1266
+ <div class="clusters-compact-list">
1267
+
1268
+ <div class="cluster-item">
1269
+ <div class="cluster-header">
1270
+ <strong>Cluster Transport Security</strong>
1271
+ <span class="badge badge-success">&#10004; 13 Dismantled</span>
1272
+ </div>
1273
+ <div class="cluster-sub">Blast Radius: 3 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1274
+ </div>
1275
+ <div class="cluster-item">
1276
+ <div class="cluster-header">
1277
+ <strong>Cluster Tenant Isolation</strong>
1278
+ <span class="badge badge-success">&#10004; 12 Dismantled</span>
1279
+ </div>
1280
+ <div class="cluster-sub">Blast Radius: 6 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1281
+ </div>
1282
+ <div class="cluster-item">
1283
+ <div class="cluster-header">
1284
+ <strong>Cluster Credentials Exposure</strong>
1285
+ <span class="badge badge-success">&#10004; 11 Dismantled</span>
1286
+ </div>
1287
+ <div class="cluster-sub">Blast Radius: 5 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1288
+ </div>
1289
+ <div class="cluster-item">
1290
+ <div class="cluster-header">
1291
+ <strong>Cluster Injection</strong>
1292
+ <span class="badge badge-success">&#10004; 10 Dismantled</span>
1293
+ </div>
1294
+ <div class="cluster-sub">Blast Radius: 6 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1295
+ </div>
1296
+ <div class="cluster-item">
1297
+ <div class="cluster-header">
1298
+ <strong>Cluster Auth Bypass</strong>
1299
+ <span class="badge badge-success">&#10004; 9 Dismantled</span>
1300
+ </div>
1301
+ <div class="cluster-sub">Blast Radius: 2 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1302
+ </div>
1303
+ <div class="cluster-item">
1304
+ <div class="cluster-header">
1305
+ <strong>Cluster Platform</strong>
1306
+ <span class="badge badge-success">&#10004; 6 Dismantled</span>
1307
+ </div>
1308
+ <div class="cluster-sub">Blast Radius: 2 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1309
+ </div>
1310
+ <div class="cluster-item">
1311
+ <div class="cluster-header">
1312
+ <strong>Cluster Client Leak</strong>
1313
+ <span class="badge badge-success">&#10004; 3 Dismantled</span>
1314
+ </div>
1315
+ <div class="cluster-sub">Blast Radius: 2 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1316
+ </div>
1317
+ <div class="cluster-item">
1318
+ <div class="cluster-header">
1319
+ <strong>Cluster Supply Chain</strong>
1320
+ <span class="badge badge-success">&#10004; 3 Dismantled</span>
1321
+ </div>
1322
+ <div class="cluster-sub">Blast Radius: 2 file(s) &middot; <span style="color: var(--accent-green); font-weight: 600;">🟢 Neutralized &amp; Defended</span></div>
1323
+ </div>
1324
+ </div>
754
1325
  </div>
755
1326
  </div>
756
1327
 
757
- <!-- What-If Posture Score Simulator -->
758
- <div class="card simulator-card simulator-clean">
759
- <div>
760
- <div style="display: flex; align-items: center; gap: 8px;">
761
- <strong style="font-size: 13px;">⚡ Interactive "What-If" Posture Score Simulator</strong>
762
- <span class="badge badge-primary">Dynamic Recalculation</span>
1328
+ <!-- Row 3: OWASP Top 10 & Enterprise Compliance -->
1329
+ <div class="row-bottom">
1330
+ <div class="card owasp-card-wrapper">
1331
+ <div class="section-title" style="margin-bottom: 8px;">&#128737; OWASP Top 10 (2021/2026) Compliance Matrix</div>
1332
+ <div class="grid-owasp">
1333
+
1334
+ <div class="owasp-card">
1335
+ <div class="owasp-top">
1336
+ <span class="owasp-title">A01: Broken Access Control</span>
1337
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1338
+ </div>
1339
+ <div class="owasp-bar-bg">
1340
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1341
+ </div>
1342
+ </div>
1343
+ <div class="owasp-card">
1344
+ <div class="owasp-top">
1345
+ <span class="owasp-title">A02: Cryptographic Failures</span>
1346
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1347
+ </div>
1348
+ <div class="owasp-bar-bg">
1349
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1350
+ </div>
1351
+ </div>
1352
+ <div class="owasp-card">
1353
+ <div class="owasp-top">
1354
+ <span class="owasp-title">A03: Injection Defense</span>
1355
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1356
+ </div>
1357
+ <div class="owasp-bar-bg">
1358
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1359
+ </div>
1360
+ </div>
1361
+ <div class="owasp-card">
1362
+ <div class="owasp-top">
1363
+ <span class="owasp-title">A05: Security Configuration</span>
1364
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1365
+ </div>
1366
+ <div class="owasp-bar-bg">
1367
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1368
+ </div>
1369
+ </div>
1370
+ <div class="owasp-card">
1371
+ <div class="owasp-top">
1372
+ <span class="owasp-title">A06: Supply Chain Health</span>
1373
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1374
+ </div>
1375
+ <div class="owasp-bar-bg">
1376
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1377
+ </div>
1378
+ </div>
1379
+ <div class="owasp-card">
1380
+ <div class="owasp-top">
1381
+ <span class="owasp-title">A07: Identity & Auth</span>
1382
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1383
+ </div>
1384
+ <div class="owasp-bar-bg">
1385
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1386
+ </div>
1387
+ </div>
1388
+ <div class="owasp-card">
1389
+ <div class="owasp-top">
1390
+ <span class="owasp-title">A08: Software Integrity</span>
1391
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1392
+ </div>
1393
+ <div class="owasp-bar-bg">
1394
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1395
+ </div>
1396
+ </div>
1397
+ <div class="owasp-card">
1398
+ <div class="owasp-top">
1399
+ <span class="owasp-title">A10: SSRF Defense</span>
1400
+ <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1401
+ </div>
1402
+ <div class="owasp-bar-bg">
1403
+ <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1404
+ </div>
1405
+ </div>
1406
+ </div>
1407
+ </div>
1408
+
1409
+ <div class="card comp-card-wrapper">
1410
+ <div class="section-title" style="margin-bottom: 8px;">&#127963; Enterprise Compliance Framework Mapping (SOC 2 &middot; ISO 27001 &middot; HIPAA)</div>
1411
+ <div class="grid-compliance" id="gridCompliance">
1412
+
1413
+ <div class="card comp-card">
1414
+ <div class="comp-card-header">
1415
+ <div>
1416
+ <div class="comp-title">SOC 2 Type II</div>
1417
+ <div class="comp-sub">AICPA Trust Services Criteria (Security & Boundary)</div>
1418
+ </div>
1419
+ <span class="badge badge-success">100% Met</span>
1420
+ </div>
1421
+ <div class="comp-ctrl-list">
1422
+
1423
+ <div class="comp-ctrl-row">
1424
+ <div>
1425
+ <div class="comp-ctrl-code">CC6.1 Logical Access</div>
1426
+ <div class="comp-ctrl-fams">TG-AUTH, TG-CLIENT</div>
1427
+ </div>
1428
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1429
+ </div>
1430
+ <div class="comp-ctrl-row">
1431
+ <div>
1432
+ <div class="comp-ctrl-code">CC6.6 Network Boundary</div>
1433
+ <div class="comp-ctrl-fams">TG-SSRF, TG-RATE, TG-WS</div>
1434
+ </div>
1435
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1436
+ </div>
1437
+ <div class="comp-ctrl-row">
1438
+ <div>
1439
+ <div class="comp-ctrl-code">CC6.7 Transmission Security</div>
1440
+ <div class="comp-ctrl-fams">TG-PLATFORM, TG-SEC</div>
1441
+ </div>
1442
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1443
+ </div>
1444
+ <div class="comp-ctrl-row">
1445
+ <div>
1446
+ <div class="comp-ctrl-code">CC7.1 Vulnerability & Churn</div>
1447
+ <div class="comp-ctrl-fams">TG-DIFF, TG-SUPPLY</div>
1448
+ </div>
1449
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1450
+ </div>
1451
+ </div>
1452
+ </div>
1453
+ <div class="card comp-card">
1454
+ <div class="comp-card-header">
1455
+ <div>
1456
+ <div class="comp-title">ISO/IEC 27001:2022</div>
1457
+ <div class="comp-sub">Annex A Controls for Technological & Application Security</div>
1458
+ </div>
1459
+ <span class="badge badge-success">100% Met</span>
1460
+ </div>
1461
+ <div class="comp-ctrl-list">
1462
+
1463
+ <div class="comp-ctrl-row">
1464
+ <div>
1465
+ <div class="comp-ctrl-code">A.8.20 Network Security</div>
1466
+ <div class="comp-ctrl-fams">TG-SSRF, TG-WEBHOOK, TG-RATE</div>
1467
+ </div>
1468
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1469
+ </div>
1470
+ <div class="comp-ctrl-row">
1471
+ <div>
1472
+ <div class="comp-ctrl-code">A.8.24 Cryptography Usage</div>
1473
+ <div class="comp-ctrl-fams">TG-SEC, TG-AUTH</div>
1474
+ </div>
1475
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1476
+ </div>
1477
+ <div class="comp-ctrl-row">
1478
+ <div>
1479
+ <div class="comp-ctrl-code">A.8.28 Secure Coding</div>
1480
+ <div class="comp-ctrl-fams">TG-INPUT, TG-DB, TG-GQL, TG-AGENT</div>
1481
+ </div>
1482
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1483
+ </div>
1484
+ </div>
1485
+ </div>
1486
+ <div class="card comp-card">
1487
+ <div class="comp-card-header">
1488
+ <div>
1489
+ <div class="comp-title">HIPAA Security Rule</div>
1490
+ <div class="comp-sub">45 CFR Part 164 Technical Safeguards for ePHI</div>
1491
+ </div>
1492
+ <span class="badge badge-success">100% Met</span>
1493
+ </div>
1494
+ <div class="comp-ctrl-list">
1495
+
1496
+ <div class="comp-ctrl-row">
1497
+ <div>
1498
+ <div class="comp-ctrl-code">§ 164.312(a)(1) Access Control</div>
1499
+ <div class="comp-ctrl-fams">TG-AUTH, TG-DB (Tenant Isolation)</div>
1500
+ </div>
1501
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1502
+ </div>
1503
+ <div class="comp-ctrl-row">
1504
+ <div>
1505
+ <div class="comp-ctrl-code">§ 164.312(c)(1) ePHI Integrity</div>
1506
+ <div class="comp-ctrl-fams">TG-WEBHOOK, TG-BIZ, TG-DIFF</div>
1507
+ </div>
1508
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1509
+ </div>
1510
+ <div class="comp-ctrl-row">
1511
+ <div>
1512
+ <div class="comp-ctrl-code">§ 164.312(e)(1) Transmission Security</div>
1513
+ <div class="comp-ctrl-fams">TG-PLATFORM, TG-SEC, TG-CLIENT</div>
1514
+ </div>
1515
+ <div><span class="badge badge-success">&#10004; Passing</span></div>
1516
+ </div>
1517
+ </div>
1518
+ </div>
1519
+ </div>
1520
+ </div>
1521
+ </div>
1522
+
1523
+ <!-- Executive Action Footer Bar (Zero Scroll Navigation) -->
1524
+ <footer class="footer-compact">
1525
+ <div class="footer-actions">
1526
+ <button class="btn btn-sm" onclick="openFindingsModal()">&#128269; View Findings &amp; Evidence (68)</button>
1527
+ <button class="btn btn-sm" onclick="openInvariantsModal()">&#128737; 74 Invariants Catalog</button>
1528
+ <button class="btn btn-sm" onclick="openRecipesModal()">&#10024; Golden Fix Recipes (15)</button>
1529
+ <button class="btn btn-sm" onclick="openAdvisoryModal()">&#128161; Defenses Advisory</button>
1530
+ </div>
1531
+ <div class="footer-meta">
1532
+ <span>TorusGuard v1.3.6 &middot; 100% Local-First &middot; Zero Cloud Telemetry</span>
1533
+ </div>
1534
+ </footer>
1535
+ </div>
1536
+
1537
+ <!-- Deep Inspection Modals -->
1538
+ <!-- 1. Findings & Evidence Modal -->
1539
+ <div id="findingsModal" class="modal-backdrop" style="display: none;" onclick="closeModal('findingsModal', event)">
1540
+ <div class="modal-card modal-lg" onclick="event.stopPropagation()">
1541
+ <div class="modal-header">
1542
+ <div>
1543
+ <h3 style="font-size: 16px; margin: 0; color: var(--text-main);">&#128269; Governed Security Findings &amp; Evidence Archive</h3>
1544
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 2px;">
1545
+ 68 findings discovered across repository AST inspection.
1546
+ </div>
1547
+ </div>
1548
+ <button class="modal-close-btn" onclick="closeModal('findingsModal', event)">&times;</button>
1549
+ </div>
1550
+ <div class="modal-body" style="padding-top: 10px;">
1551
+ <!-- Interactive What-If Posture Score Simulator -->
1552
+ <div class="card simulator-card simulator-clean" style="margin-bottom: 14px;">
1553
+ <div>
1554
+ <div style="display: flex; align-items: center; gap: 8px;">
1555
+ <strong style="font-size: 13px;">⚡ Interactive "What-If" Posture Score Simulator</strong>
1556
+ <span class="badge badge-primary">Dynamic Recalculation</span>
1557
+ </div>
1558
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 4px;">
1559
+ All 74 security invariants are currently defended. Simulator is ready for live remediation modeling during audit cycles.
1560
+ </div>
1561
+ </div>
1562
+ <div class="sim-stats">
1563
+ <div>Current: <strong id="simCurrentVal">100</strong>/100</div>
1564
+ <div>&rarr;</div>
1565
+ <div>Projected: <strong id="simProjectedVal" style="color: var(--accent-blue);">100</strong>/100 <span id="simDeltaBadge" class="badge badge-success">+0 pts</span></div>
1566
+ </div>
1567
+ <div class="sim-actions">
1568
+ <button class="btn btn-sm" onclick="simulateFixAll('Critical')">&#9889; Simulate Criticals</button>
1569
+ <button class="btn btn-sm" onclick="simulateFixAll('all')">&#9889; Simulate All Fixes</button>
1570
+ <button class="btn btn-sm" onclick="resetSimulatedFixes()">Reset Simulator</button>
1571
+ </div>
1572
+ </div>
1573
+
1574
+
1575
+ <!-- Clean & Hardened Baseline Summary (Zero Active Vulnerabilities) -->
1576
+ <div class="clean-baseline-card">
1577
+ <div class="clean-baseline-header">
1578
+ <div style="display: flex; align-items: center; gap: 12px;">
1579
+ <span style="font-size: 26px;">🛡️</span>
1580
+ <div>
1581
+ <div style="font-size: 15px; font-weight: 700; color: var(--accent-green); letter-spacing: -0.01em;">
1582
+ Clean &amp; Hardened Baseline &middot; 0 Active Vulnerabilities
1583
+ </div>
1584
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 2px;">
1585
+ All 68 identified issues have been governed, hardened, and verified across all architectural layers.
1586
+ </div>
1587
+ </div>
1588
+ </div>
1589
+ <button class="btn-archive-toggle" id="btnArchiveToggle" onclick="toggleFindingsArchive()">
1590
+ <span id="archiveToggleIcon">&#9654;</span> View Findings Archive (68)
1591
+ </button>
1592
+ </div>
1593
+ <div id="findingsArchiveBody" style="display: block; margin-top: 16px; border-top: 1px solid var(--border-subtle); padding-top: 16px;">
1594
+ <div class="filter-bar">
1595
+ <div class="filter-pills">
1596
+ <span class="pill-group-label">Severity:</span>
1597
+ <span class="pill active" data-sev-filter="all" onclick="filterBySeverity('all')">All</span>
1598
+ <span class="pill" data-sev-filter="critical" onclick="filterBySeverity('critical')">&#128308; Critical (0)</span>
1599
+ <span class="pill" data-sev-filter="high" onclick="filterBySeverity('high')">&#128992; High (0)</span>
1600
+ <span class="pill" data-sev-filter="medium" onclick="filterBySeverity('medium')">&#128993; Med/Low (0)</span>
1601
+
1602
+ <span class="pill-group-label" style="margin-left: 8px;">Status:</span>
1603
+ <span class="pill active" data-status-filter="all" onclick="filterByStatus('all')">All (68)</span>
1604
+ <span class="pill" data-status-filter="open" onclick="filterByStatus('open')">&#9888; Open (0)</span>
1605
+ <span class="pill" data-status-filter="resolved" onclick="filterByStatus('resolved')">&#10004; Resolved (68)</span>
1606
+
1607
+ <span class="dir-filter-chip" id="dirFilterChip" onclick="clearDirectoryFilter()">
1608
+ Folder: <strong id="dirFilterName"></strong> &times;
1609
+ </span>
1610
+ <button class="btn-reset-filters" id="btnResetFilters" onclick="resetAllFilters()">&times; Reset Filters</button>
1611
+ </div>
1612
+ <div class="search-wrapper">
1613
+ <input type="text" id="searchInput" class="search-input" placeholder="Search rules, titles, files..." oninput="searchFindings()">
1614
+ <button class="search-clear-btn" id="searchClearBtn" onclick="clearSearch()">&times;</button>
1615
+ </div>
763
1616
  </div>
764
- <div style="font-size: 12px; color: var(--text-muted); margin-top: 4px;">
765
- All 74 security invariants are currently defended. Simulator is ready for live remediation modeling during audit cycles.
1617
+ <div class="filter-stats-bar">
1618
+ <div>Showing <span id="visibleCount" style="font-weight: 700; color: var(--text-main);">50</span> of <span id="totalCount" style="font-weight: 700; color: var(--text-main);">68</span> cataloged findings</div>
1619
+ <div id="activeFilterSummary" style="font-size: 11px; color: var(--accent-blue);"></div>
1620
+ </div>
1621
+ <div class="table-container">
1622
+ <table>
1623
+ <thead>
1624
+ <tr>
1625
+ <th style="width: 70px; text-align: center;">Simulate</th>
1626
+ <th style="width: 110px;">Severity</th>
1627
+ <th style="width: 130px;">Rule ID</th>
1628
+ <th>Finding Title</th>
1629
+ <th style="width: 250px;">File &amp; Location</th>
1630
+ <th style="width: 90px;">Confidence</th>
1631
+ <th style="width: 30px;"></th>
1632
+ </tr>
1633
+ </thead>
1634
+ <tbody id="findingsTableBody">
1635
+
1636
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-002 raw sql concatenation harness/runner.py high resolved" data-path="harness/runner.py" data-drawer-id="drawer-0" onclick="toggleDrawer(this)">
1637
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1638
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1639
+ </td>
1640
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1641
+ <td><code class="rule-id">TG-INPUT-002</code></td>
1642
+ <td class="finding-title">Raw SQL Concatenation</td>
1643
+ <td><code>harness/runner.py:258</code></td>
1644
+ <td><span class="conf-score">84%</span></td>
1645
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1646
+ </tr>
1647
+ <tr id="drawer-0" class="drawer-row" style="display: none;">
1648
+ <td colspan="7">
1649
+ <div class="drawer-content">
1650
+
1651
+ <div class="drawer-header">
1652
+ <div>
1653
+ <strong>Finding ID:</strong> <code>TG-INPUT-002-f8cd11b9</code> &middot;
1654
+ <strong>File:</strong> <code>harness/runner.py:258</code> &middot;
1655
+ <strong>Confidence:</strong> 84/100 &middot;
1656
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1657
+ </div>
1658
+ </div>
1659
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1660
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1661
+ </div>
1662
+ <div class="drawer-desc">Python f-string interpolation in raw SQL query</div>
1663
+ <div class="drawer-actions">
1664
+ <div class="cmd-box">
1665
+ <code>npx torusguard recheck --rule TG-INPUT-002</code>
1666
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1667
+ </div>
1668
+ </div>
1669
+ </div>
1670
+ </td>
1671
+ </tr>
1672
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/runner.py high resolved" data-path="harness/runner.py" data-drawer-id="drawer-1" onclick="toggleDrawer(this)">
1673
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1674
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1675
+ </td>
1676
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1677
+ <td><code class="rule-id">TG-SEC-001</code></td>
1678
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1679
+ <td><code>harness/runner.py:211</code></td>
1680
+ <td><span class="conf-score">81%</span></td>
1681
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1682
+ </tr>
1683
+ <tr id="drawer-1" class="drawer-row" style="display: none;">
1684
+ <td colspan="7">
1685
+ <div class="drawer-content">
1686
+
1687
+ <div class="drawer-header">
1688
+ <div>
1689
+ <strong>Finding ID:</strong> <code>TG-SEC-001-593d6437</code> &middot;
1690
+ <strong>File:</strong> <code>harness/runner.py:211</code> &middot;
1691
+ <strong>Confidence:</strong> 81/100 &middot;
1692
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1693
+ </div>
1694
+ </div>
1695
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1696
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1697
+ </div>
1698
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1699
+ <div class="drawer-actions">
1700
+ <div class="cmd-box">
1701
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1702
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1703
+ </div>
1704
+ </div>
1705
+ </div>
1706
+ </td>
1707
+ </tr>
1708
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_qa_v0_6_0.py high resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-2" onclick="toggleDrawer(this)">
1709
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1710
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1711
+ </td>
1712
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1713
+ <td><code class="rule-id">TG-SEC-001</code></td>
1714
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1715
+ <td><code>harness/validate_qa_v0_6_0.py:64</code></td>
1716
+ <td><span class="conf-score">77%</span></td>
1717
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1718
+ </tr>
1719
+ <tr id="drawer-2" class="drawer-row" style="display: none;">
1720
+ <td colspan="7">
1721
+ <div class="drawer-content">
1722
+
1723
+ <div class="drawer-header">
1724
+ <div>
1725
+ <strong>Finding ID:</strong> <code>TG-SEC-001-c616aefd</code> &middot;
1726
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:64</code> &middot;
1727
+ <strong>Confidence:</strong> 77/100 &middot;
1728
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1729
+ </div>
1730
+ </div>
1731
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1732
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1733
+ </div>
1734
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1735
+ <div class="drawer-actions">
1736
+ <div class="cmd-box">
1737
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1738
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1739
+ </div>
1740
+ </div>
1741
+ </div>
1742
+ </td>
1743
+ </tr>
1744
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_qa_v0_6_0.py high resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-3" onclick="toggleDrawer(this)">
1745
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1746
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1747
+ </td>
1748
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1749
+ <td><code class="rule-id">TG-SEC-001</code></td>
1750
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1751
+ <td><code>harness/validate_qa_v0_6_0.py:90</code></td>
1752
+ <td><span class="conf-score">77%</span></td>
1753
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1754
+ </tr>
1755
+ <tr id="drawer-3" class="drawer-row" style="display: none;">
1756
+ <td colspan="7">
1757
+ <div class="drawer-content">
1758
+
1759
+ <div class="drawer-header">
1760
+ <div>
1761
+ <strong>Finding ID:</strong> <code>TG-SEC-001-d5b3684f</code> &middot;
1762
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:90</code> &middot;
1763
+ <strong>Confidence:</strong> 77/100 &middot;
1764
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1765
+ </div>
1766
+ </div>
1767
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1768
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1769
+ </div>
1770
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1771
+ <div class="drawer-actions">
1772
+ <div class="cmd-box">
1773
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1774
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1775
+ </div>
1776
+ </div>
1777
+ </div>
1778
+ </td>
1779
+ </tr>
1780
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_v0_6_2_modern_stacks.py high resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-4" onclick="toggleDrawer(this)">
1781
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1782
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1783
+ </td>
1784
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1785
+ <td><code class="rule-id">TG-SEC-001</code></td>
1786
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1787
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:341</code></td>
1788
+ <td><span class="conf-score">77%</span></td>
1789
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1790
+ </tr>
1791
+ <tr id="drawer-4" class="drawer-row" style="display: none;">
1792
+ <td colspan="7">
1793
+ <div class="drawer-content">
1794
+
1795
+ <div class="drawer-header">
1796
+ <div>
1797
+ <strong>Finding ID:</strong> <code>TG-SEC-001-54f1a02a</code> &middot;
1798
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:341</code> &middot;
1799
+ <strong>Confidence:</strong> 77/100 &middot;
1800
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1801
+ </div>
1802
+ </div>
1803
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1804
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1805
+ </div>
1806
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1807
+ <div class="drawer-actions">
1808
+ <div class="cmd-box">
1809
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1810
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1811
+ </div>
1812
+ </div>
1813
+ </div>
1814
+ </td>
1815
+ </tr>
1816
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_v0_6_2_modern_stacks.py high resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-5" onclick="toggleDrawer(this)">
1817
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1818
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1819
+ </td>
1820
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1821
+ <td><code class="rule-id">TG-SEC-001</code></td>
1822
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1823
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:356</code></td>
1824
+ <td><span class="conf-score">77%</span></td>
1825
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1826
+ </tr>
1827
+ <tr id="drawer-5" class="drawer-row" style="display: none;">
1828
+ <td colspan="7">
1829
+ <div class="drawer-content">
1830
+
1831
+ <div class="drawer-header">
1832
+ <div>
1833
+ <strong>Finding ID:</strong> <code>TG-SEC-001-676f776e</code> &middot;
1834
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:356</code> &middot;
1835
+ <strong>Confidence:</strong> 77/100 &middot;
1836
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1837
+ </div>
1838
+ </div>
1839
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1840
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1841
+ </div>
1842
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1843
+ <div class="drawer-actions">
1844
+ <div class="cmd-box">
1845
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1846
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1847
+ </div>
1848
+ </div>
1849
+ </div>
1850
+ </td>
1851
+ </tr>
1852
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_v0_6_2_modern_stacks.py high resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-6" onclick="toggleDrawer(this)">
1853
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1854
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1855
+ </td>
1856
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1857
+ <td><code class="rule-id">TG-SEC-001</code></td>
1858
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
1859
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:362</code></td>
1860
+ <td><span class="conf-score">77%</span></td>
1861
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1862
+ </tr>
1863
+ <tr id="drawer-6" class="drawer-row" style="display: none;">
1864
+ <td colspan="7">
1865
+ <div class="drawer-content">
1866
+
1867
+ <div class="drawer-header">
1868
+ <div>
1869
+ <strong>Finding ID:</strong> <code>TG-SEC-001-58f70e46</code> &middot;
1870
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:362</code> &middot;
1871
+ <strong>Confidence:</strong> 77/100 &middot;
1872
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1873
+ </div>
1874
+ </div>
1875
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1876
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1877
+ </div>
1878
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
1879
+ <div class="drawer-actions">
1880
+ <div class="cmd-box">
1881
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
1882
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1883
+ </div>
1884
+ </div>
1885
+ </div>
1886
+ </td>
1887
+ </tr>
1888
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/runner.py high resolved" data-path="harness/runner.py" data-drawer-id="drawer-7" onclick="toggleDrawer(this)">
1889
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1890
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1891
+ </td>
1892
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1893
+ <td><code class="rule-id">TG-DB-004</code></td>
1894
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
1895
+ <td><code>harness/runner.py:505</code></td>
1896
+ <td><span class="conf-score">74%</span></td>
1897
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1898
+ </tr>
1899
+ <tr id="drawer-7" class="drawer-row" style="display: none;">
1900
+ <td colspan="7">
1901
+ <div class="drawer-content">
1902
+
1903
+ <div class="drawer-header">
1904
+ <div>
1905
+ <strong>Finding ID:</strong> <code>TG-DB-004-e8cc000a</code> &middot;
1906
+ <strong>File:</strong> <code>harness/runner.py:505</code> &middot;
1907
+ <strong>Confidence:</strong> 74/100 &middot;
1908
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1909
+ </div>
1910
+ </div>
1911
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1912
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1913
+ </div>
1914
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
1915
+ <div class="drawer-actions">
1916
+ <div class="cmd-box">
1917
+ <code>npx torusguard recheck --rule TG-DB-004</code>
1918
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1919
+ </div>
1920
+ </div>
1921
+ </div>
1922
+ </td>
1923
+ </tr>
1924
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/runner.py high resolved" data-path="harness/runner.py" data-drawer-id="drawer-8" onclick="toggleDrawer(this)">
1925
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1926
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1927
+ </td>
1928
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1929
+ <td><code class="rule-id">TG-DB-004</code></td>
1930
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
1931
+ <td><code>harness/runner.py:506</code></td>
1932
+ <td><span class="conf-score">74%</span></td>
1933
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1934
+ </tr>
1935
+ <tr id="drawer-8" class="drawer-row" style="display: none;">
1936
+ <td colspan="7">
1937
+ <div class="drawer-content">
1938
+
1939
+ <div class="drawer-header">
1940
+ <div>
1941
+ <strong>Finding ID:</strong> <code>TG-DB-004-89b581f9</code> &middot;
1942
+ <strong>File:</strong> <code>harness/runner.py:506</code> &middot;
1943
+ <strong>Confidence:</strong> 74/100 &middot;
1944
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1945
+ </div>
1946
+ </div>
1947
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1948
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1949
+ </div>
1950
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
1951
+ <div class="drawer-actions">
1952
+ <div class="cmd-box">
1953
+ <code>npx torusguard recheck --rule TG-DB-004</code>
1954
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1955
+ </div>
1956
+ </div>
1957
+ </div>
1958
+ </td>
1959
+ </tr>
1960
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-002 raw sql concatenation harness/validate_v1_1_0_advanced_memory.py high resolved" data-path="harness/validate_v1_1_0_advanced_memory.py" data-drawer-id="drawer-9" onclick="toggleDrawer(this)">
1961
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1962
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1963
+ </td>
1964
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
1965
+ <td><code class="rule-id">TG-INPUT-002</code></td>
1966
+ <td class="finding-title">Raw SQL Concatenation</td>
1967
+ <td><code>harness/validate_v1_1_0_advanced_memory.py:109</code></td>
1968
+ <td><span class="conf-score">74%</span></td>
1969
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
1970
+ </tr>
1971
+ <tr id="drawer-9" class="drawer-row" style="display: none;">
1972
+ <td colspan="7">
1973
+ <div class="drawer-content">
1974
+
1975
+ <div class="drawer-header">
1976
+ <div>
1977
+ <strong>Finding ID:</strong> <code>TG-INPUT-002-266bcaa1</code> &middot;
1978
+ <strong>File:</strong> <code>harness/validate_v1_1_0_advanced_memory.py:109</code> &middot;
1979
+ <strong>Confidence:</strong> 74/100 &middot;
1980
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
1981
+ </div>
1982
+ </div>
1983
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
1984
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
1985
+ </div>
1986
+ <div class="drawer-desc">Python f-string interpolation in raw SQL query</div>
1987
+ <div class="drawer-actions">
1988
+ <div class="cmd-box">
1989
+ <code>npx torusguard recheck --rule TG-INPUT-002</code>
1990
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
1991
+ </div>
1992
+ </div>
1993
+ </div>
1994
+ </td>
1995
+ </tr>
1996
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/master_validation.py high resolved" data-path="harness/master_validation.py" data-drawer-id="drawer-10" onclick="toggleDrawer(this)">
1997
+ <td style="text-align: center;" onclick="event.stopPropagation()">
1998
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
1999
+ </td>
2000
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2001
+ <td><code class="rule-id">TG-SEC-001</code></td>
2002
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
2003
+ <td><code>harness/master_validation.py:257</code></td>
2004
+ <td><span class="conf-score">74%</span></td>
2005
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2006
+ </tr>
2007
+ <tr id="drawer-10" class="drawer-row" style="display: none;">
2008
+ <td colspan="7">
2009
+ <div class="drawer-content">
2010
+
2011
+ <div class="drawer-header">
2012
+ <div>
2013
+ <strong>Finding ID:</strong> <code>TG-SEC-001-7c852ff3</code> &middot;
2014
+ <strong>File:</strong> <code>harness/master_validation.py:257</code> &middot;
2015
+ <strong>Confidence:</strong> 74/100 &middot;
2016
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2017
+ </div>
2018
+ </div>
2019
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2020
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2021
+ </div>
2022
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
2023
+ <div class="drawer-actions">
2024
+ <div class="cmd-box">
2025
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
2026
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2027
+ </div>
2028
+ </div>
2029
+ </div>
2030
+ </td>
2031
+ </tr>
2032
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/master_validation.py high resolved" data-path="harness/master_validation.py" data-drawer-id="drawer-11" onclick="toggleDrawer(this)">
2033
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2034
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2035
+ </td>
2036
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2037
+ <td><code class="rule-id">TG-SEC-001</code></td>
2038
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
2039
+ <td><code>harness/master_validation.py:460</code></td>
2040
+ <td><span class="conf-score">74%</span></td>
2041
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2042
+ </tr>
2043
+ <tr id="drawer-11" class="drawer-row" style="display: none;">
2044
+ <td colspan="7">
2045
+ <div class="drawer-content">
2046
+
2047
+ <div class="drawer-header">
2048
+ <div>
2049
+ <strong>Finding ID:</strong> <code>TG-SEC-001-02761dbb</code> &middot;
2050
+ <strong>File:</strong> <code>harness/master_validation.py:460</code> &middot;
2051
+ <strong>Confidence:</strong> 74/100 &middot;
2052
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2053
+ </div>
2054
+ </div>
2055
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2056
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2057
+ </div>
2058
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
2059
+ <div class="drawer-actions">
2060
+ <div class="cmd-box">
2061
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
2062
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2063
+ </div>
2064
+ </div>
2065
+ </div>
2066
+ </td>
2067
+ </tr>
2068
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/validate_e2e.py high resolved" data-path="harness/validate_e2e.py" data-drawer-id="drawer-12" onclick="toggleDrawer(this)">
2069
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2070
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2071
+ </td>
2072
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2073
+ <td><code class="rule-id">TG-SEC-001</code></td>
2074
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
2075
+ <td><code>harness/validate_e2e.py:355</code></td>
2076
+ <td><span class="conf-score">74%</span></td>
2077
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2078
+ </tr>
2079
+ <tr id="drawer-12" class="drawer-row" style="display: none;">
2080
+ <td colspan="7">
2081
+ <div class="drawer-content">
2082
+
2083
+ <div class="drawer-header">
2084
+ <div>
2085
+ <strong>Finding ID:</strong> <code>TG-SEC-001-3a2b5eca</code> &middot;
2086
+ <strong>File:</strong> <code>harness/validate_e2e.py:355</code> &middot;
2087
+ <strong>Confidence:</strong> 74/100 &middot;
2088
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2089
+ </div>
2090
+ </div>
2091
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2092
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2093
+ </div>
2094
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
2095
+ <div class="drawer-actions">
2096
+ <div class="cmd-box">
2097
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
2098
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2099
+ </div>
2100
+ </div>
2101
+ </div>
2102
+ </td>
2103
+ </tr>
2104
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-002 privileged database credential in browser context harness/validate_v0_7_0_runtime.py high resolved" data-path="harness/validate_v0_7_0_runtime.py" data-drawer-id="drawer-13" onclick="toggleDrawer(this)">
2105
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2106
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2107
+ </td>
2108
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2109
+ <td><code class="rule-id">TG-DB-002</code></td>
2110
+ <td class="finding-title">Privileged Database Credential in Browser Context</td>
2111
+ <td><code>harness/validate_v0_7_0_runtime.py:129</code></td>
2112
+ <td><span class="conf-score">71%</span></td>
2113
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2114
+ </tr>
2115
+ <tr id="drawer-13" class="drawer-row" style="display: none;">
2116
+ <td colspan="7">
2117
+ <div class="drawer-content">
2118
+
2119
+ <div class="drawer-header">
2120
+ <div>
2121
+ <strong>Finding ID:</strong> <code>TG-DB-002-14cf4139</code> &middot;
2122
+ <strong>File:</strong> <code>harness/validate_v0_7_0_runtime.py:129</code> &middot;
2123
+ <strong>Confidence:</strong> 71/100 &middot;
2124
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2125
+ </div>
2126
+ </div>
2127
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2128
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2129
+ </div>
2130
+ <div class="drawer-desc">Service role key or raw database connection string reference in frontend code</div>
2131
+ <div class="drawer-actions">
2132
+ <div class="cmd-box">
2133
+ <code>npx torusguard recheck --rule TG-DB-002</code>
2134
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2135
+ </div>
2136
+ </div>
2137
+ </div>
2138
+ </td>
2139
+ </tr>
2140
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py high resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-14" onclick="toggleDrawer(this)">
2141
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2142
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2143
+ </td>
2144
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2145
+ <td><code class="rule-id">TG-DIFF-001</code></td>
2146
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
2147
+ <td><code>harness/evaluate_portfolio_polyglot.py:74</code></td>
2148
+ <td><span class="conf-score">69%</span></td>
2149
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2150
+ </tr>
2151
+ <tr id="drawer-14" class="drawer-row" style="display: none;">
2152
+ <td colspan="7">
2153
+ <div class="drawer-content">
2154
+
2155
+ <div class="drawer-header">
2156
+ <div>
2157
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-04571685</code> &middot;
2158
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:74</code> &middot;
2159
+ <strong>Confidence:</strong> 69/100 &middot;
2160
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2161
+ </div>
2162
+ </div>
2163
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2164
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2165
+ </div>
2166
+ <div class="drawer-desc">Disabled TLS certificate verification (verify=False)</div>
2167
+ <div class="drawer-actions">
2168
+ <div class="cmd-box">
2169
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
2170
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2171
+ </div>
2172
+ </div>
2173
+ </div>
2174
+ </td>
2175
+ </tr>
2176
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_3_hardening.py high resolved" data-path="harness/validate_v0_6_3_hardening.py" data-drawer-id="drawer-15" onclick="toggleDrawer(this)">
2177
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2178
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2179
+ </td>
2180
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2181
+ <td><code class="rule-id">TG-DB-004</code></td>
2182
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
2183
+ <td><code>harness/validate_v0_6_3_hardening.py:119</code></td>
2184
+ <td><span class="conf-score">67%</span></td>
2185
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2186
+ </tr>
2187
+ <tr id="drawer-15" class="drawer-row" style="display: none;">
2188
+ <td colspan="7">
2189
+ <div class="drawer-content">
2190
+
2191
+ <div class="drawer-header">
2192
+ <div>
2193
+ <strong>Finding ID:</strong> <code>TG-DB-004-e33fd263</code> &middot;
2194
+ <strong>File:</strong> <code>harness/validate_v0_6_3_hardening.py:119</code> &middot;
2195
+ <strong>Confidence:</strong> 67/100 &middot;
2196
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2197
+ </div>
2198
+ </div>
2199
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2200
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2201
+ </div>
2202
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
2203
+ <div class="drawer-actions">
2204
+ <div class="cmd-box">
2205
+ <code>npx torusguard recheck --rule TG-DB-004</code>
2206
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2207
+ </div>
2208
+ </div>
2209
+ </div>
2210
+ </td>
2211
+ </tr>
2212
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_3_hardening.py high resolved" data-path="harness/validate_v0_6_3_hardening.py" data-drawer-id="drawer-16" onclick="toggleDrawer(this)">
2213
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2214
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2215
+ </td>
2216
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2217
+ <td><code class="rule-id">TG-DB-004</code></td>
2218
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
2219
+ <td><code>harness/validate_v0_6_3_hardening.py:127</code></td>
2220
+ <td><span class="conf-score">67%</span></td>
2221
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2222
+ </tr>
2223
+ <tr id="drawer-16" class="drawer-row" style="display: none;">
2224
+ <td colspan="7">
2225
+ <div class="drawer-content">
2226
+
2227
+ <div class="drawer-header">
2228
+ <div>
2229
+ <strong>Finding ID:</strong> <code>TG-DB-004-ff3f7499</code> &middot;
2230
+ <strong>File:</strong> <code>harness/validate_v0_6_3_hardening.py:127</code> &middot;
2231
+ <strong>Confidence:</strong> 67/100 &middot;
2232
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2233
+ </div>
2234
+ </div>
2235
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2236
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2237
+ </div>
2238
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
2239
+ <div class="drawer-actions">
2240
+ <div class="cmd-box">
2241
+ <code>npx torusguard recheck --rule TG-DB-004</code>
2242
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2243
+ </div>
2244
+ </div>
2245
+ </div>
2246
+ </td>
2247
+ </tr>
2248
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_3_hardening.py high resolved" data-path="harness/validate_v0_6_3_hardening.py" data-drawer-id="drawer-17" onclick="toggleDrawer(this)">
2249
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2250
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2251
+ </td>
2252
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2253
+ <td><code class="rule-id">TG-DB-004</code></td>
2254
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
2255
+ <td><code>harness/validate_v0_6_3_hardening.py:135</code></td>
2256
+ <td><span class="conf-score">67%</span></td>
2257
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2258
+ </tr>
2259
+ <tr id="drawer-17" class="drawer-row" style="display: none;">
2260
+ <td colspan="7">
2261
+ <div class="drawer-content">
2262
+
2263
+ <div class="drawer-header">
2264
+ <div>
2265
+ <strong>Finding ID:</strong> <code>TG-DB-004-a7c00c05</code> &middot;
2266
+ <strong>File:</strong> <code>harness/validate_v0_6_3_hardening.py:135</code> &middot;
2267
+ <strong>Confidence:</strong> 67/100 &middot;
2268
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2269
+ </div>
2270
+ </div>
2271
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2272
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2273
+ </div>
2274
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
2275
+ <div class="drawer-actions">
2276
+ <div class="cmd-box">
2277
+ <code>npx torusguard recheck --rule TG-DB-004</code>
2278
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2279
+ </div>
2280
+ </div>
2281
+ </div>
2282
+ </td>
2283
+ </tr>
2284
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/evaluate_portfolio_polyglot.py high resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-18" onclick="toggleDrawer(this)">
2285
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2286
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2287
+ </td>
2288
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2289
+ <td><code class="rule-id">TG-AUTH-004</code></td>
2290
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
2291
+ <td><code>harness/evaluate_portfolio_polyglot.py:107</code></td>
2292
+ <td><span class="conf-score">66%</span></td>
2293
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2294
+ </tr>
2295
+ <tr id="drawer-18" class="drawer-row" style="display: none;">
2296
+ <td colspan="7">
2297
+ <div class="drawer-content">
2298
+
2299
+ <div class="drawer-header">
2300
+ <div>
2301
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-33adb2d9</code> &middot;
2302
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:107</code> &middot;
2303
+ <strong>Confidence:</strong> 66/100 &middot;
2304
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2305
+ </div>
2306
+ </div>
2307
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2308
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2309
+ </div>
2310
+ <div class="drawer-desc">Session cookie secure flag disabled in Django settings</div>
2311
+ <div class="drawer-actions">
2312
+ <div class="cmd-box">
2313
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
2314
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2315
+ </div>
2316
+ </div>
2317
+ </div>
2318
+ </td>
2319
+ </tr>
2320
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/evaluate_portfolio_polyglot.py high resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-19" onclick="toggleDrawer(this)">
2321
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2322
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2323
+ </td>
2324
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2325
+ <td><code class="rule-id">TG-AUTH-004</code></td>
2326
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
2327
+ <td><code>harness/evaluate_portfolio_polyglot.py:239</code></td>
2328
+ <td><span class="conf-score">66%</span></td>
2329
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2330
+ </tr>
2331
+ <tr id="drawer-19" class="drawer-row" style="display: none;">
2332
+ <td colspan="7">
2333
+ <div class="drawer-content">
2334
+
2335
+ <div class="drawer-header">
2336
+ <div>
2337
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-4a33f7e7</code> &middot;
2338
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:239</code> &middot;
2339
+ <strong>Confidence:</strong> 66/100 &middot;
2340
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2341
+ </div>
2342
+ </div>
2343
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2344
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2345
+ </div>
2346
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
2347
+ <div class="drawer-actions">
2348
+ <div class="cmd-box">
2349
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
2350
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2351
+ </div>
2352
+ </div>
2353
+ </div>
2354
+ </td>
2355
+ </tr>
2356
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/runner.py high resolved" data-path="harness/runner.py" data-drawer-id="drawer-20" onclick="toggleDrawer(this)">
2357
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2358
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2359
+ </td>
2360
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2361
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
2362
+ <td class="finding-title">Production Stack Trace Exposure</td>
2363
+ <td><code>harness/runner.py:392</code></td>
2364
+ <td><span class="conf-score">56%</span></td>
2365
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2366
+ </tr>
2367
+ <tr id="drawer-20" class="drawer-row" style="display: none;">
2368
+ <td colspan="7">
2369
+ <div class="drawer-content">
2370
+
2371
+ <div class="drawer-header">
2372
+ <div>
2373
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-69f083d6</code> &middot;
2374
+ <strong>File:</strong> <code>harness/runner.py:392</code> &middot;
2375
+ <strong>Confidence:</strong> 56/100 &middot;
2376
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2377
+ </div>
2378
+ </div>
2379
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2380
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2381
+ </div>
2382
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
2383
+ <div class="drawer-actions">
2384
+ <div class="cmd-box">
2385
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
2386
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2387
+ </div>
2388
+ </div>
2389
+ </div>
2390
+ </td>
2391
+ </tr>
2392
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/validate_qa_v0_6_0.py high resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-21" onclick="toggleDrawer(this)">
2393
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2394
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2395
+ </td>
2396
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2397
+ <td><code class="rule-id">TG-INPUT-005</code></td>
2398
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
2399
+ <td><code>harness/validate_qa_v0_6_0.py:177</code></td>
2400
+ <td><span class="conf-score">52%</span></td>
2401
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2402
+ </tr>
2403
+ <tr id="drawer-21" class="drawer-row" style="display: none;">
2404
+ <td colspan="7">
2405
+ <div class="drawer-content">
2406
+
2407
+ <div class="drawer-header">
2408
+ <div>
2409
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-7f81ea7f</code> &middot;
2410
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:177</code> &middot;
2411
+ <strong>Confidence:</strong> 52/100 &middot;
2412
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2413
+ </div>
2414
+ </div>
2415
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2416
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2417
+ </div>
2418
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
2419
+ <div class="drawer-actions">
2420
+ <div class="cmd-box">
2421
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
2422
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2423
+ </div>
2424
+ </div>
2425
+ </div>
2426
+ </td>
2427
+ </tr>
2428
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/validate_qa_v0_6_0.py high resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-22" onclick="toggleDrawer(this)">
2429
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2430
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2431
+ </td>
2432
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2433
+ <td><code class="rule-id">TG-INPUT-005</code></td>
2434
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
2435
+ <td><code>harness/validate_qa_v0_6_0.py:193</code></td>
2436
+ <td><span class="conf-score">52%</span></td>
2437
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2438
+ </tr>
2439
+ <tr id="drawer-22" class="drawer-row" style="display: none;">
2440
+ <td colspan="7">
2441
+ <div class="drawer-content">
2442
+
2443
+ <div class="drawer-header">
2444
+ <div>
2445
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-e0ffb03b</code> &middot;
2446
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:193</code> &middot;
2447
+ <strong>Confidence:</strong> 52/100 &middot;
2448
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2449
+ </div>
2450
+ </div>
2451
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2452
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2453
+ </div>
2454
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
2455
+ <div class="drawer-actions">
2456
+ <div class="cmd-box">
2457
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
2458
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2459
+ </div>
2460
+ </div>
2461
+ </div>
2462
+ </td>
2463
+ </tr>
2464
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/validate_e2e.py high resolved" data-path="harness/validate_e2e.py" data-drawer-id="drawer-23" onclick="toggleDrawer(this)">
2465
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2466
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2467
+ </td>
2468
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2469
+ <td><code class="rule-id">TG-INPUT-005</code></td>
2470
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
2471
+ <td><code>harness/validate_e2e.py:457</code></td>
2472
+ <td><span class="conf-score">49%</span></td>
2473
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2474
+ </tr>
2475
+ <tr id="drawer-23" class="drawer-row" style="display: none;">
2476
+ <td colspan="7">
2477
+ <div class="drawer-content">
2478
+
2479
+ <div class="drawer-header">
2480
+ <div>
2481
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-d7ef73f1</code> &middot;
2482
+ <strong>File:</strong> <code>harness/validate_e2e.py:457</code> &middot;
2483
+ <strong>Confidence:</strong> 49/100 &middot;
2484
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2485
+ </div>
2486
+ </div>
2487
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2488
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2489
+ </div>
2490
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
2491
+ <div class="drawer-actions">
2492
+ <div class="cmd-box">
2493
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
2494
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2495
+ </div>
2496
+ </div>
2497
+ </div>
2498
+ </td>
2499
+ </tr>
2500
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-supply-004 unpinned ci action harness/validate_v0_6_2_modern_stacks.py high resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-24" onclick="toggleDrawer(this)">
2501
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2502
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2503
+ </td>
2504
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2505
+ <td><code class="rule-id">TG-SUPPLY-004</code></td>
2506
+ <td class="finding-title">Unpinned CI Action</td>
2507
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:383</code></td>
2508
+ <td><span class="conf-score">47%</span></td>
2509
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2510
+ </tr>
2511
+ <tr id="drawer-24" class="drawer-row" style="display: none;">
2512
+ <td colspan="7">
2513
+ <div class="drawer-content">
2514
+
2515
+ <div class="drawer-header">
2516
+ <div>
2517
+ <strong>Finding ID:</strong> <code>TG-SUPPLY-004-e52415c0</code> &middot;
2518
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:383</code> &middot;
2519
+ <strong>Confidence:</strong> 47/100 &middot;
2520
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2521
+ </div>
2522
+ </div>
2523
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2524
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2525
+ </div>
2526
+ <div class="drawer-desc">GitHub Action referenced by mutable tag instead of immutable commit SHA</div>
2527
+ <div class="drawer-actions">
2528
+ <div class="cmd-box">
2529
+ <code>npx torusguard recheck --rule TG-SUPPLY-004</code>
2530
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SUPPLY-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2531
+ </div>
2532
+ </div>
2533
+ </div>
2534
+ </td>
2535
+ </tr>
2536
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-supply-004 unpinned ci action harness/validate_v0_6_2_modern_stacks.py high resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-25" onclick="toggleDrawer(this)">
2537
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2538
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2539
+ </td>
2540
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2541
+ <td><code class="rule-id">TG-SUPPLY-004</code></td>
2542
+ <td class="finding-title">Unpinned CI Action</td>
2543
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:404</code></td>
2544
+ <td><span class="conf-score">47%</span></td>
2545
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2546
+ </tr>
2547
+ <tr id="drawer-25" class="drawer-row" style="display: none;">
2548
+ <td colspan="7">
2549
+ <div class="drawer-content">
2550
+
2551
+ <div class="drawer-header">
2552
+ <div>
2553
+ <strong>Finding ID:</strong> <code>TG-SUPPLY-004-b9d15743</code> &middot;
2554
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:404</code> &middot;
2555
+ <strong>Confidence:</strong> 47/100 &middot;
2556
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2557
+ </div>
2558
+ </div>
2559
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2560
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2561
+ </div>
2562
+ <div class="drawer-desc">GitHub Action referenced by mutable tag instead of immutable commit SHA</div>
2563
+ <div class="drawer-actions">
2564
+ <div class="cmd-box">
2565
+ <code>npx torusguard recheck --rule TG-SUPPLY-004</code>
2566
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SUPPLY-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2567
+ </div>
2568
+ </div>
2569
+ </div>
2570
+ </td>
2571
+ </tr>
2572
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/engine/fixture_manager.py high resolved" data-path="harness/engine/fixture_manager.py" data-drawer-id="drawer-26" onclick="toggleDrawer(this)">
2573
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2574
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2575
+ </td>
2576
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2577
+ <td><code class="rule-id">TG-INPUT-005</code></td>
2578
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
2579
+ <td><code>harness/engine/fixture_manager.py:176</code></td>
2580
+ <td><span class="conf-score">46%</span></td>
2581
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2582
+ </tr>
2583
+ <tr id="drawer-26" class="drawer-row" style="display: none;">
2584
+ <td colspan="7">
2585
+ <div class="drawer-content">
2586
+
2587
+ <div class="drawer-header">
2588
+ <div>
2589
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-95cb57ba</code> &middot;
2590
+ <strong>File:</strong> <code>harness/engine/fixture_manager.py:176</code> &middot;
2591
+ <strong>Confidence:</strong> 46/100 &middot;
2592
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2593
+ </div>
2594
+ </div>
2595
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2596
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2597
+ </div>
2598
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
2599
+ <div class="drawer-actions">
2600
+ <div class="cmd-box">
2601
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
2602
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2603
+ </div>
2604
+ </div>
2605
+ </div>
2606
+ </td>
2607
+ </tr>
2608
+ <tr class="finding-row" data-severity="high" data-status="resolved" data-search="tg-supply-004 unpinned ci action harness/validate_v0_6_3_hardening.py high resolved" data-path="harness/validate_v0_6_3_hardening.py" data-drawer-id="drawer-27" onclick="toggleDrawer(this)">
2609
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2610
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2611
+ </td>
2612
+ <td><span class="badge badge-high">High</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2613
+ <td><code class="rule-id">TG-SUPPLY-004</code></td>
2614
+ <td class="finding-title">Unpinned CI Action</td>
2615
+ <td><code>harness/validate_v0_6_3_hardening.py:251</code></td>
2616
+ <td><span class="conf-score">44%</span></td>
2617
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2618
+ </tr>
2619
+ <tr id="drawer-27" class="drawer-row" style="display: none;">
2620
+ <td colspan="7">
2621
+ <div class="drawer-content">
2622
+
2623
+ <div class="drawer-header">
2624
+ <div>
2625
+ <strong>Finding ID:</strong> <code>TG-SUPPLY-004-9240a873</code> &middot;
2626
+ <strong>File:</strong> <code>harness/validate_v0_6_3_hardening.py:251</code> &middot;
2627
+ <strong>Confidence:</strong> 44/100 &middot;
2628
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2629
+ </div>
2630
+ </div>
2631
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2632
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2633
+ </div>
2634
+ <div class="drawer-desc">GitHub Action referenced by mutable tag instead of immutable commit SHA</div>
2635
+ <div class="drawer-actions">
2636
+ <div class="cmd-box">
2637
+ <code>npx torusguard recheck --rule TG-SUPPLY-004</code>
2638
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SUPPLY-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2639
+ </div>
2640
+ </div>
2641
+ </div>
2642
+ </td>
2643
+ </tr>
2644
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/runner.py medium resolved" data-path="harness/runner.py" data-drawer-id="drawer-28" onclick="toggleDrawer(this)">
2645
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2646
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2647
+ </td>
2648
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2649
+ <td><code class="rule-id">TG-SEC-001</code></td>
2650
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
2651
+ <td><code>harness/runner.py:392</code></td>
2652
+ <td><span class="conf-score">81%</span></td>
2653
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2654
+ </tr>
2655
+ <tr id="drawer-28" class="drawer-row" style="display: none;">
2656
+ <td colspan="7">
2657
+ <div class="drawer-content">
2658
+
2659
+ <div class="drawer-header">
2660
+ <div>
2661
+ <strong>Finding ID:</strong> <code>TG-SEC-001-88c9bb29</code> &middot;
2662
+ <strong>File:</strong> <code>harness/runner.py:392</code> &middot;
2663
+ <strong>Confidence:</strong> 81/100 &middot;
2664
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2665
+ </div>
2666
+ </div>
2667
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2668
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2669
+ </div>
2670
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
2671
+ <div class="drawer-actions">
2672
+ <div class="cmd-box">
2673
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
2674
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2675
+ </div>
2676
+ </div>
2677
+ </div>
2678
+ </td>
2679
+ </tr>
2680
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-sec-001 hardcoded secret or api key in tracked source harness/runner.py medium resolved" data-path="harness/runner.py" data-drawer-id="drawer-29" onclick="toggleDrawer(this)">
2681
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2682
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2683
+ </td>
2684
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2685
+ <td><code class="rule-id">TG-SEC-001</code></td>
2686
+ <td class="finding-title">Hardcoded Secret or API Key in Tracked Source</td>
2687
+ <td><code>harness/runner.py:221</code></td>
2688
+ <td><span class="conf-score">81%</span></td>
2689
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2690
+ </tr>
2691
+ <tr id="drawer-29" class="drawer-row" style="display: none;">
2692
+ <td colspan="7">
2693
+ <div class="drawer-content">
2694
+
2695
+ <div class="drawer-header">
2696
+ <div>
2697
+ <strong>Finding ID:</strong> <code>TG-SEC-001-e0a84cf3</code> &middot;
2698
+ <strong>File:</strong> <code>harness/runner.py:221</code> &middot;
2699
+ <strong>Confidence:</strong> 81/100 &middot;
2700
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2701
+ </div>
2702
+ </div>
2703
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2704
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2705
+ </div>
2706
+ <div class="drawer-desc">Hardcoded credential or API secret string</div>
2707
+ <div class="drawer-actions">
2708
+ <div class="cmd-box">
2709
+ <code>npx torusguard recheck --rule TG-SEC-001</code>
2710
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-SEC-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2711
+ </div>
2712
+ </div>
2713
+ </div>
2714
+ </td>
2715
+ </tr>
2716
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-002 privileged database credential in browser context harness/validate_v0_9_2_diff_and_monorepo.py medium resolved" data-path="harness/validate_v0_9_2_diff_and_monorepo.py" data-drawer-id="drawer-30" onclick="toggleDrawer(this)">
2717
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2718
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2719
+ </td>
2720
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2721
+ <td><code class="rule-id">TG-DB-002</code></td>
2722
+ <td class="finding-title">Privileged Database Credential in Browser Context</td>
2723
+ <td><code>harness/validate_v0_9_2_diff_and_monorepo.py:134</code></td>
2724
+ <td><span class="conf-score">74%</span></td>
2725
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2726
+ </tr>
2727
+ <tr id="drawer-30" class="drawer-row" style="display: none;">
2728
+ <td colspan="7">
2729
+ <div class="drawer-content">
2730
+
2731
+ <div class="drawer-header">
2732
+ <div>
2733
+ <strong>Finding ID:</strong> <code>TG-DB-002-08d11e50</code> &middot;
2734
+ <strong>File:</strong> <code>harness/validate_v0_9_2_diff_and_monorepo.py:134</code> &middot;
2735
+ <strong>Confidence:</strong> 74/100 &middot;
2736
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2737
+ </div>
2738
+ </div>
2739
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2740
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2741
+ </div>
2742
+ <div class="drawer-desc">Service role key or raw database connection string reference in frontend code</div>
2743
+ <div class="drawer-actions">
2744
+ <div class="cmd-box">
2745
+ <code>npx torusguard recheck --rule TG-DB-002</code>
2746
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2747
+ </div>
2748
+ </div>
2749
+ </div>
2750
+ </td>
2751
+ </tr>
2752
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-input-002 raw sql concatenation harness/validate_v1_1_0_advanced_memory.py medium resolved" data-path="harness/validate_v1_1_0_advanced_memory.py" data-drawer-id="drawer-31" onclick="toggleDrawer(this)">
2753
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2754
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2755
+ </td>
2756
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2757
+ <td><code class="rule-id">TG-INPUT-002</code></td>
2758
+ <td class="finding-title">Raw SQL Concatenation</td>
2759
+ <td><code>harness/validate_v1_1_0_advanced_memory.py:107</code></td>
2760
+ <td><span class="conf-score">74%</span></td>
2761
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2762
+ </tr>
2763
+ <tr id="drawer-31" class="drawer-row" style="display: none;">
2764
+ <td colspan="7">
2765
+ <div class="drawer-content">
2766
+
2767
+ <div class="drawer-header">
2768
+ <div>
2769
+ <strong>Finding ID:</strong> <code>TG-INPUT-002-8f877a5f</code> &middot;
2770
+ <strong>File:</strong> <code>harness/validate_v1_1_0_advanced_memory.py:107</code> &middot;
2771
+ <strong>Confidence:</strong> 74/100 &middot;
2772
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2773
+ </div>
2774
+ </div>
2775
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2776
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2777
+ </div>
2778
+ <div class="drawer-desc">Python f-string interpolation in raw SQL query</div>
2779
+ <div class="drawer-actions">
2780
+ <div class="cmd-box">
2781
+ <code>npx torusguard recheck --rule TG-INPUT-002</code>
2782
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2783
+ </div>
2784
+ </div>
2785
+ </div>
2786
+ </td>
2787
+ </tr>
2788
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-input-002 raw sql concatenation harness/engine/fixture_manager.py medium resolved" data-path="harness/engine/fixture_manager.py" data-drawer-id="drawer-32" onclick="toggleDrawer(this)">
2789
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2790
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2791
+ </td>
2792
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2793
+ <td><code class="rule-id">TG-INPUT-002</code></td>
2794
+ <td class="finding-title">Raw SQL Concatenation</td>
2795
+ <td><code>harness/engine/fixture_manager.py:128</code></td>
2796
+ <td><span class="conf-score">74%</span></td>
2797
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2798
+ </tr>
2799
+ <tr id="drawer-32" class="drawer-row" style="display: none;">
2800
+ <td colspan="7">
2801
+ <div class="drawer-content">
2802
+
2803
+ <div class="drawer-header">
2804
+ <div>
2805
+ <strong>Finding ID:</strong> <code>TG-INPUT-002-02f8e274</code> &middot;
2806
+ <strong>File:</strong> <code>harness/engine/fixture_manager.py:128</code> &middot;
2807
+ <strong>Confidence:</strong> 74/100 &middot;
2808
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2809
+ </div>
2810
+ </div>
2811
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2812
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2813
+ </div>
2814
+ <div class="drawer-desc">Python f-string interpolation in raw SQL query</div>
2815
+ <div class="drawer-actions">
2816
+ <div class="cmd-box">
2817
+ <code>npx torusguard recheck --rule TG-INPUT-002</code>
2818
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2819
+ </div>
2820
+ </div>
2821
+ </div>
2822
+ </td>
2823
+ </tr>
2824
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-002 privileged database credential in browser context harness/validate_v0_7_0_runtime.py medium resolved" data-path="harness/validate_v0_7_0_runtime.py" data-drawer-id="drawer-33" onclick="toggleDrawer(this)">
2825
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2826
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2827
+ </td>
2828
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2829
+ <td><code class="rule-id">TG-DB-002</code></td>
2830
+ <td class="finding-title">Privileged Database Credential in Browser Context</td>
2831
+ <td><code>harness/validate_v0_7_0_runtime.py:423</code></td>
2832
+ <td><span class="conf-score">71%</span></td>
2833
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2834
+ </tr>
2835
+ <tr id="drawer-33" class="drawer-row" style="display: none;">
2836
+ <td colspan="7">
2837
+ <div class="drawer-content">
2838
+
2839
+ <div class="drawer-header">
2840
+ <div>
2841
+ <strong>Finding ID:</strong> <code>TG-DB-002-b53ad22c</code> &middot;
2842
+ <strong>File:</strong> <code>harness/validate_v0_7_0_runtime.py:423</code> &middot;
2843
+ <strong>Confidence:</strong> 71/100 &middot;
2844
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2845
+ </div>
2846
+ </div>
2847
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2848
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2849
+ </div>
2850
+ <div class="drawer-desc">Service role key or raw database connection string reference in frontend code</div>
2851
+ <div class="drawer-actions">
2852
+ <div class="cmd-box">
2853
+ <code>npx torusguard recheck --rule TG-DB-002</code>
2854
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-002', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2855
+ </div>
2856
+ </div>
2857
+ </div>
2858
+ </td>
2859
+ </tr>
2860
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-34" onclick="toggleDrawer(this)">
2861
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2862
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2863
+ </td>
2864
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2865
+ <td><code class="rule-id">TG-DIFF-001</code></td>
2866
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
2867
+ <td><code>harness/evaluate_portfolio_polyglot.py:151</code></td>
2868
+ <td><span class="conf-score">69%</span></td>
2869
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2870
+ </tr>
2871
+ <tr id="drawer-34" class="drawer-row" style="display: none;">
2872
+ <td colspan="7">
2873
+ <div class="drawer-content">
2874
+
2875
+ <div class="drawer-header">
2876
+ <div>
2877
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-8b55ac4b</code> &middot;
2878
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:151</code> &middot;
2879
+ <strong>Confidence:</strong> 69/100 &middot;
2880
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2881
+ </div>
2882
+ </div>
2883
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2884
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2885
+ </div>
2886
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
2887
+ <div class="drawer-actions">
2888
+ <div class="cmd-box">
2889
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
2890
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2891
+ </div>
2892
+ </div>
2893
+ </div>
2894
+ </td>
2895
+ </tr>
2896
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-35" onclick="toggleDrawer(this)">
2897
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2898
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2899
+ </td>
2900
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2901
+ <td><code class="rule-id">TG-DIFF-001</code></td>
2902
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
2903
+ <td><code>harness/evaluate_portfolio_polyglot.py:162</code></td>
2904
+ <td><span class="conf-score">69%</span></td>
2905
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2906
+ </tr>
2907
+ <tr id="drawer-35" class="drawer-row" style="display: none;">
2908
+ <td colspan="7">
2909
+ <div class="drawer-content">
2910
+
2911
+ <div class="drawer-header">
2912
+ <div>
2913
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-cf8d252d</code> &middot;
2914
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:162</code> &middot;
2915
+ <strong>Confidence:</strong> 69/100 &middot;
2916
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2917
+ </div>
2918
+ </div>
2919
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2920
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2921
+ </div>
2922
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
2923
+ <div class="drawer-actions">
2924
+ <div class="cmd-box">
2925
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
2926
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2927
+ </div>
2928
+ </div>
2929
+ </div>
2930
+ </td>
2931
+ </tr>
2932
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-36" onclick="toggleDrawer(this)">
2933
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2934
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2935
+ </td>
2936
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2937
+ <td><code class="rule-id">TG-DIFF-001</code></td>
2938
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
2939
+ <td><code>harness/evaluate_portfolio_polyglot.py:173</code></td>
2940
+ <td><span class="conf-score">69%</span></td>
2941
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2942
+ </tr>
2943
+ <tr id="drawer-36" class="drawer-row" style="display: none;">
2944
+ <td colspan="7">
2945
+ <div class="drawer-content">
2946
+
2947
+ <div class="drawer-header">
2948
+ <div>
2949
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-3543946e</code> &middot;
2950
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:173</code> &middot;
2951
+ <strong>Confidence:</strong> 69/100 &middot;
2952
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2953
+ </div>
2954
+ </div>
2955
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2956
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2957
+ </div>
2958
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
2959
+ <div class="drawer-actions">
2960
+ <div class="cmd-box">
2961
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
2962
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2963
+ </div>
2964
+ </div>
2965
+ </div>
2966
+ </td>
2967
+ </tr>
2968
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-37" onclick="toggleDrawer(this)">
2969
+ <td style="text-align: center;" onclick="event.stopPropagation()">
2970
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
2971
+ </td>
2972
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
2973
+ <td><code class="rule-id">TG-DIFF-001</code></td>
2974
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
2975
+ <td><code>harness/evaluate_portfolio_polyglot.py:349</code></td>
2976
+ <td><span class="conf-score">69%</span></td>
2977
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
2978
+ </tr>
2979
+ <tr id="drawer-37" class="drawer-row" style="display: none;">
2980
+ <td colspan="7">
2981
+ <div class="drawer-content">
2982
+
2983
+ <div class="drawer-header">
2984
+ <div>
2985
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-efffaad0</code> &middot;
2986
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:349</code> &middot;
2987
+ <strong>Confidence:</strong> 69/100 &middot;
2988
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
2989
+ </div>
2990
+ </div>
2991
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
2992
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
2993
+ </div>
2994
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
2995
+ <div class="drawer-actions">
2996
+ <div class="cmd-box">
2997
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
2998
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
2999
+ </div>
3000
+ </div>
3001
+ </div>
3002
+ </td>
3003
+ </tr>
3004
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-38" onclick="toggleDrawer(this)">
3005
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3006
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3007
+ </td>
3008
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3009
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3010
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3011
+ <td><code>harness/evaluate_portfolio_polyglot.py:129</code></td>
3012
+ <td><span class="conf-score">69%</span></td>
3013
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3014
+ </tr>
3015
+ <tr id="drawer-38" class="drawer-row" style="display: none;">
3016
+ <td colspan="7">
3017
+ <div class="drawer-content">
3018
+
3019
+ <div class="drawer-header">
3020
+ <div>
3021
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-91bd06b8</code> &middot;
3022
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:129</code> &middot;
3023
+ <strong>Confidence:</strong> 69/100 &middot;
3024
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3025
+ </div>
3026
+ </div>
3027
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3028
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3029
+ </div>
3030
+ <div class="drawer-desc">Disabled Node.js TLS rejectUnauthorized</div>
3031
+ <div class="drawer-actions">
3032
+ <div class="cmd-box">
3033
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3034
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3035
+ </div>
3036
+ </div>
3037
+ </div>
3038
+ </td>
3039
+ </tr>
3040
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-39" onclick="toggleDrawer(this)">
3041
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3042
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3043
+ </td>
3044
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3045
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3046
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3047
+ <td><code>harness/evaluate_portfolio_polyglot.py:261</code></td>
3048
+ <td><span class="conf-score">69%</span></td>
3049
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3050
+ </tr>
3051
+ <tr id="drawer-39" class="drawer-row" style="display: none;">
3052
+ <td colspan="7">
3053
+ <div class="drawer-content">
3054
+
3055
+ <div class="drawer-header">
3056
+ <div>
3057
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-cb245735</code> &middot;
3058
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:261</code> &middot;
3059
+ <strong>Confidence:</strong> 69/100 &middot;
3060
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3061
+ </div>
3062
+ </div>
3063
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3064
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3065
+ </div>
3066
+ <div class="drawer-desc">Disabled PHP curl SSL verification</div>
3067
+ <div class="drawer-actions">
3068
+ <div class="cmd-box">
3069
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3070
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3071
+ </div>
3072
+ </div>
3073
+ </div>
3074
+ </td>
3075
+ </tr>
3076
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v0_9_2_diff_and_monorepo.py medium resolved" data-path="harness/validate_v0_9_2_diff_and_monorepo.py" data-drawer-id="drawer-40" onclick="toggleDrawer(this)">
3077
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3078
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3079
+ </td>
3080
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3081
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3082
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3083
+ <td><code>harness/validate_v0_9_2_diff_and_monorepo.py:60</code></td>
3084
+ <td><span class="conf-score">69%</span></td>
3085
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3086
+ </tr>
3087
+ <tr id="drawer-40" class="drawer-row" style="display: none;">
3088
+ <td colspan="7">
3089
+ <div class="drawer-content">
3090
+
3091
+ <div class="drawer-header">
3092
+ <div>
3093
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-6667680a</code> &middot;
3094
+ <strong>File:</strong> <code>harness/validate_v0_9_2_diff_and_monorepo.py:60</code> &middot;
3095
+ <strong>Confidence:</strong> 69/100 &middot;
3096
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3097
+ </div>
3098
+ </div>
3099
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3100
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3101
+ </div>
3102
+ <div class="drawer-desc">Disabled TLS certificate verification (verify=False)</div>
3103
+ <div class="drawer-actions">
3104
+ <div class="cmd-box">
3105
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3106
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3107
+ </div>
3108
+ </div>
3109
+ </div>
3110
+ </td>
3111
+ </tr>
3112
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v0_9_2_diff_and_monorepo.py medium resolved" data-path="harness/validate_v0_9_2_diff_and_monorepo.py" data-drawer-id="drawer-41" onclick="toggleDrawer(this)">
3113
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3114
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3115
+ </td>
3116
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3117
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3118
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3119
+ <td><code>harness/validate_v0_9_2_diff_and_monorepo.py:67</code></td>
3120
+ <td><span class="conf-score">69%</span></td>
3121
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3122
+ </tr>
3123
+ <tr id="drawer-41" class="drawer-row" style="display: none;">
3124
+ <td colspan="7">
3125
+ <div class="drawer-content">
3126
+
3127
+ <div class="drawer-header">
3128
+ <div>
3129
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-00b3b8ca</code> &middot;
3130
+ <strong>File:</strong> <code>harness/validate_v0_9_2_diff_and_monorepo.py:67</code> &middot;
3131
+ <strong>Confidence:</strong> 69/100 &middot;
3132
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3133
+ </div>
3134
+ </div>
3135
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3136
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3137
+ </div>
3138
+ <div class="drawer-desc">Disabled TLS certificate verification (verify=False)</div>
3139
+ <div class="drawer-actions">
3140
+ <div class="cmd-box">
3141
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3142
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3143
+ </div>
3144
+ </div>
3145
+ </div>
3146
+ </td>
3147
+ </tr>
3148
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-42" onclick="toggleDrawer(this)">
3149
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3150
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3151
+ </td>
3152
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3153
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3154
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3155
+ <td><code>harness/validate_v1_3_0_polyglot.py:16</code></td>
3156
+ <td><span class="conf-score">69%</span></td>
3157
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3158
+ </tr>
3159
+ <tr id="drawer-42" class="drawer-row" style="display: none;">
3160
+ <td colspan="7">
3161
+ <div class="drawer-content">
3162
+
3163
+ <div class="drawer-header">
3164
+ <div>
3165
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-f209dec6</code> &middot;
3166
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:16</code> &middot;
3167
+ <strong>Confidence:</strong> 69/100 &middot;
3168
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3169
+ </div>
3170
+ </div>
3171
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3172
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3173
+ </div>
3174
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
3175
+ <div class="drawer-actions">
3176
+ <div class="cmd-box">
3177
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3178
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3179
+ </div>
3180
+ </div>
3181
+ </div>
3182
+ </td>
3183
+ </tr>
3184
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-43" onclick="toggleDrawer(this)">
3185
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3186
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3187
+ </td>
3188
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3189
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3190
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3191
+ <td><code>harness/validate_v1_3_0_polyglot.py:182</code></td>
3192
+ <td><span class="conf-score">69%</span></td>
3193
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3194
+ </tr>
3195
+ <tr id="drawer-43" class="drawer-row" style="display: none;">
3196
+ <td colspan="7">
3197
+ <div class="drawer-content">
3198
+
3199
+ <div class="drawer-header">
3200
+ <div>
3201
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-d9adecdb</code> &middot;
3202
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:182</code> &middot;
3203
+ <strong>Confidence:</strong> 69/100 &middot;
3204
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3205
+ </div>
3206
+ </div>
3207
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3208
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3209
+ </div>
3210
+ <div class="drawer-desc">Disabled Go TLS certificate verification (InsecureSkipVerify: true)</div>
3211
+ <div class="drawer-actions">
3212
+ <div class="cmd-box">
3213
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3214
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3215
+ </div>
3216
+ </div>
3217
+ </div>
3218
+ </td>
3219
+ </tr>
3220
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-44" onclick="toggleDrawer(this)">
3221
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3222
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3223
+ </td>
3224
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3225
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3226
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3227
+ <td><code>harness/validate_v1_3_0_polyglot.py:19</code></td>
3228
+ <td><span class="conf-score">69%</span></td>
3229
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3230
+ </tr>
3231
+ <tr id="drawer-44" class="drawer-row" style="display: none;">
3232
+ <td colspan="7">
3233
+ <div class="drawer-content">
3234
+
3235
+ <div class="drawer-header">
3236
+ <div>
3237
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-ddbf5cf0</code> &middot;
3238
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:19</code> &middot;
3239
+ <strong>Confidence:</strong> 69/100 &middot;
3240
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3241
+ </div>
3242
+ </div>
3243
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3244
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3245
+ </div>
3246
+ <div class="drawer-desc">Disabled PHP curl SSL verification</div>
3247
+ <div class="drawer-actions">
3248
+ <div class="cmd-box">
3249
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3250
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3251
+ </div>
3252
+ </div>
3253
+ </div>
3254
+ </td>
3255
+ </tr>
3256
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-001 accidental security check bypass in patch additions harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-45" onclick="toggleDrawer(this)">
3257
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3258
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3259
+ </td>
3260
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3261
+ <td><code class="rule-id">TG-DIFF-001</code></td>
3262
+ <td class="finding-title">Accidental Security Check Bypass in Patch Additions</td>
3263
+ <td><code>harness/validate_v1_3_0_polyglot.py:215</code></td>
3264
+ <td><span class="conf-score">69%</span></td>
3265
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3266
+ </tr>
3267
+ <tr id="drawer-45" class="drawer-row" style="display: none;">
3268
+ <td colspan="7">
3269
+ <div class="drawer-content">
3270
+
3271
+ <div class="drawer-header">
3272
+ <div>
3273
+ <strong>Finding ID:</strong> <code>TG-DIFF-001-2b3eb6b7</code> &middot;
3274
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:215</code> &middot;
3275
+ <strong>Confidence:</strong> 69/100 &middot;
3276
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3277
+ </div>
3278
+ </div>
3279
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3280
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3281
+ </div>
3282
+ <div class="drawer-desc">Disabled PHP curl SSL verification</div>
3283
+ <div class="drawer-actions">
3284
+ <div class="cmd-box">
3285
+ <code>npx torusguard recheck --rule TG-DIFF-001</code>
3286
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3287
+ </div>
3288
+ </div>
3289
+ </div>
3290
+ </td>
3291
+ </tr>
3292
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_3_hardening.py medium resolved" data-path="harness/validate_v0_6_3_hardening.py" data-drawer-id="drawer-46" onclick="toggleDrawer(this)">
3293
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3294
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3295
+ </td>
3296
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3297
+ <td><code class="rule-id">TG-DB-004</code></td>
3298
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
3299
+ <td><code>harness/validate_v0_6_3_hardening.py:171</code></td>
3300
+ <td><span class="conf-score">67%</span></td>
3301
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3302
+ </tr>
3303
+ <tr id="drawer-46" class="drawer-row" style="display: none;">
3304
+ <td colspan="7">
3305
+ <div class="drawer-content">
3306
+
3307
+ <div class="drawer-header">
3308
+ <div>
3309
+ <strong>Finding ID:</strong> <code>TG-DB-004-8b6c1463</code> &middot;
3310
+ <strong>File:</strong> <code>harness/validate_v0_6_3_hardening.py:171</code> &middot;
3311
+ <strong>Confidence:</strong> 67/100 &middot;
3312
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3313
+ </div>
3314
+ </div>
3315
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3316
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3317
+ </div>
3318
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
3319
+ <div class="drawer-actions">
3320
+ <div class="cmd-box">
3321
+ <code>npx torusguard recheck --rule TG-DB-004</code>
3322
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3323
+ </div>
3324
+ </div>
3325
+ </div>
3326
+ </td>
3327
+ </tr>
3328
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-47" onclick="toggleDrawer(this)">
3329
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3330
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3331
+ </td>
3332
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3333
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3334
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3335
+ <td><code>harness/evaluate_portfolio_polyglot.py:96</code></td>
3336
+ <td><span class="conf-score">66%</span></td>
3337
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3338
+ </tr>
3339
+ <tr id="drawer-47" class="drawer-row" style="display: none;">
3340
+ <td colspan="7">
3341
+ <div class="drawer-content">
3342
+
3343
+ <div class="drawer-header">
3344
+ <div>
3345
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-56b1c90f</code> &middot;
3346
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:96</code> &middot;
3347
+ <strong>Confidence:</strong> 66/100 &middot;
3348
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3349
+ </div>
3350
+ </div>
3351
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3352
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3353
+ </div>
3354
+ <div class="drawer-desc">Decorator disabling route-level authentication or CSRF protection</div>
3355
+ <div class="drawer-actions">
3356
+ <div class="cmd-box">
3357
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3358
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3359
+ </div>
3360
+ </div>
3361
+ </div>
3362
+ </td>
3363
+ </tr>
3364
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/evaluate_portfolio_polyglot.py medium resolved" data-path="harness/evaluate_portfolio_polyglot.py" data-drawer-id="drawer-48" onclick="toggleDrawer(this)">
3365
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3366
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3367
+ </td>
3368
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3369
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3370
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3371
+ <td><code>harness/evaluate_portfolio_polyglot.py:876</code></td>
3372
+ <td><span class="conf-score">66%</span></td>
3373
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3374
+ </tr>
3375
+ <tr id="drawer-48" class="drawer-row" style="display: none;">
3376
+ <td colspan="7">
3377
+ <div class="drawer-content">
3378
+
3379
+ <div class="drawer-header">
3380
+ <div>
3381
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-95eb27cd</code> &middot;
3382
+ <strong>File:</strong> <code>harness/evaluate_portfolio_polyglot.py:876</code> &middot;
3383
+ <strong>Confidence:</strong> 66/100 &middot;
3384
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3385
+ </div>
3386
+ </div>
3387
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3388
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3389
+ </div>
3390
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
3391
+ <div class="drawer-actions">
3392
+ <div class="cmd-box">
3393
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3394
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3395
+ </div>
3396
+ </div>
3397
+ </div>
3398
+ </td>
3399
+ </tr>
3400
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-49" onclick="toggleDrawer(this)">
3401
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3402
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3403
+ </td>
3404
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3405
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3406
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3407
+ <td><code>harness/validate_v1_3_0_polyglot.py:18</code></td>
3408
+ <td><span class="conf-score">66%</span></td>
3409
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3410
+ </tr>
3411
+ <tr id="drawer-49" class="drawer-row" style="display: none;">
3412
+ <td colspan="7">
3413
+ <div class="drawer-content">
3414
+
3415
+ <div class="drawer-header">
3416
+ <div>
3417
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-e838c41c</code> &middot;
3418
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:18</code> &middot;
3419
+ <strong>Confidence:</strong> 66/100 &middot;
3420
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3421
+ </div>
3422
+ </div>
3423
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3424
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3425
+ </div>
3426
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
3427
+ <div class="drawer-actions">
3428
+ <div class="cmd-box">
3429
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3430
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3431
+ </div>
3432
+ </div>
3433
+ </div>
3434
+ </td>
3435
+ </tr>
3436
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-50" onclick="toggleDrawer(this)">
3437
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3438
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3439
+ </td>
3440
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3441
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3442
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3443
+ <td><code>harness/validate_v1_3_0_polyglot.py:204</code></td>
3444
+ <td><span class="conf-score">66%</span></td>
3445
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3446
+ </tr>
3447
+ <tr id="drawer-50" class="drawer-row" style="display: none;">
3448
+ <td colspan="7">
3449
+ <div class="drawer-content">
3450
+
3451
+ <div class="drawer-header">
3452
+ <div>
3453
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-5c78d750</code> &middot;
3454
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:204</code> &middot;
3455
+ <strong>Confidence:</strong> 66/100 &middot;
3456
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3457
+ </div>
3458
+ </div>
3459
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3460
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3461
+ </div>
3462
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
3463
+ <div class="drawer-actions">
3464
+ <div class="cmd-box">
3465
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3466
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3467
+ </div>
3468
+ </div>
3469
+ </div>
3470
+ </td>
3471
+ </tr>
3472
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-51" onclick="toggleDrawer(this)">
3473
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3474
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3475
+ </td>
3476
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3477
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3478
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3479
+ <td><code>harness/validate_v1_3_0_polyglot.py:208</code></td>
3480
+ <td><span class="conf-score">66%</span></td>
3481
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3482
+ </tr>
3483
+ <tr id="drawer-51" class="drawer-row" style="display: none;">
3484
+ <td colspan="7">
3485
+ <div class="drawer-content">
3486
+
3487
+ <div class="drawer-header">
3488
+ <div>
3489
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-0d028be7</code> &middot;
3490
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:208</code> &middot;
3491
+ <strong>Confidence:</strong> 66/100 &middot;
3492
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3493
+ </div>
3494
+ </div>
3495
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3496
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3497
+ </div>
3498
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
3499
+ <div class="drawer-actions">
3500
+ <div class="cmd-box">
3501
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3502
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3503
+ </div>
3504
+ </div>
3505
+ </div>
3506
+ </td>
3507
+ </tr>
3508
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-52" onclick="toggleDrawer(this)">
3509
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3510
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3511
+ </td>
3512
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3513
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3514
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3515
+ <td><code>harness/validate_v1_3_0_polyglot.py:209</code></td>
3516
+ <td><span class="conf-score">66%</span></td>
3517
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3518
+ </tr>
3519
+ <tr id="drawer-52" class="drawer-row" style="display: none;">
3520
+ <td colspan="7">
3521
+ <div class="drawer-content">
3522
+
3523
+ <div class="drawer-header">
3524
+ <div>
3525
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-3ae1d9c1</code> &middot;
3526
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:209</code> &middot;
3527
+ <strong>Confidence:</strong> 66/100 &middot;
3528
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3529
+ </div>
3530
+ </div>
3531
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3532
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3533
+ </div>
3534
+ <div class="drawer-desc">Attribute disabling ASP.NET authentication</div>
3535
+ <div class="drawer-actions">
3536
+ <div class="cmd-box">
3537
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3538
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3539
+ </div>
3540
+ </div>
3541
+ </div>
3542
+ </td>
3543
+ </tr>
3544
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-auth-004 insecure session cookie configuration harness/validate_v1_3_0_polyglot.py medium resolved" data-path="harness/validate_v1_3_0_polyglot.py" data-drawer-id="drawer-53" onclick="toggleDrawer(this)">
3545
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3546
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3547
+ </td>
3548
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3549
+ <td><code class="rule-id">TG-AUTH-004</code></td>
3550
+ <td class="finding-title">Insecure Session Cookie Configuration</td>
3551
+ <td><code>harness/validate_v1_3_0_polyglot.py:193</code></td>
3552
+ <td><span class="conf-score">66%</span></td>
3553
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3554
+ </tr>
3555
+ <tr id="drawer-53" class="drawer-row" style="display: none;">
3556
+ <td colspan="7">
3557
+ <div class="drawer-content">
3558
+
3559
+ <div class="drawer-header">
3560
+ <div>
3561
+ <strong>Finding ID:</strong> <code>TG-AUTH-004-ea07db54</code> &middot;
3562
+ <strong>File:</strong> <code>harness/validate_v1_3_0_polyglot.py:193</code> &middot;
3563
+ <strong>Confidence:</strong> 66/100 &middot;
3564
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3565
+ </div>
3566
+ </div>
3567
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3568
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3569
+ </div>
3570
+ <div class="drawer-desc">Spring Security CSRF protection explicitly disabled</div>
3571
+ <div class="drawer-actions">
3572
+ <div class="cmd-box">
3573
+ <code>npx torusguard recheck --rule TG-AUTH-004</code>
3574
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-AUTH-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3575
+ </div>
3576
+ </div>
3577
+ </div>
3578
+ </td>
3579
+ </tr>
3580
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-rate-001 unlimited authentication endpoint harness/runner.py medium resolved" data-path="harness/runner.py" data-drawer-id="drawer-54" onclick="toggleDrawer(this)">
3581
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3582
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3583
+ </td>
3584
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3585
+ <td><code class="rule-id">TG-RATE-001</code></td>
3586
+ <td class="finding-title">Unlimited Authentication Endpoint</td>
3587
+ <td><code>harness/runner.py:575</code></td>
3588
+ <td><span class="conf-score">65%</span></td>
3589
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3590
+ </tr>
3591
+ <tr id="drawer-54" class="drawer-row" style="display: none;">
3592
+ <td colspan="7">
3593
+ <div class="drawer-content">
3594
+
3595
+ <div class="drawer-header">
3596
+ <div>
3597
+ <strong>Finding ID:</strong> <code>TG-RATE-001-758a7750</code> &middot;
3598
+ <strong>File:</strong> <code>harness/runner.py:575</code> &middot;
3599
+ <strong>Confidence:</strong> 65/100 &middot;
3600
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3601
+ </div>
3602
+ </div>
3603
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3604
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3605
+ </div>
3606
+ <div class="drawer-desc">Authentication POST endpoint defined without rate-limiting middleware</div>
3607
+ <div class="drawer-actions">
3608
+ <div class="cmd-box">
3609
+ <code>npx torusguard recheck --rule TG-RATE-001</code>
3610
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-RATE-001', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3611
+ </div>
3612
+ </div>
3613
+ </div>
3614
+ </td>
3615
+ </tr>
3616
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_1_scale.py medium resolved" data-path="harness/validate_v0_6_1_scale.py" data-drawer-id="drawer-55" onclick="toggleDrawer(this)">
3617
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3618
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3619
+ </td>
3620
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3621
+ <td><code class="rule-id">TG-DB-004</code></td>
3622
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
3623
+ <td><code>harness/validate_v0_6_1_scale.py:115</code></td>
3624
+ <td><span class="conf-score">64%</span></td>
3625
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3626
+ </tr>
3627
+ <tr id="drawer-55" class="drawer-row" style="display: none;">
3628
+ <td colspan="7">
3629
+ <div class="drawer-content">
3630
+
3631
+ <div class="drawer-header">
3632
+ <div>
3633
+ <strong>Finding ID:</strong> <code>TG-DB-004-9a2f13c7</code> &middot;
3634
+ <strong>File:</strong> <code>harness/validate_v0_6_1_scale.py:115</code> &middot;
3635
+ <strong>Confidence:</strong> 64/100 &middot;
3636
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3637
+ </div>
3638
+ </div>
3639
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3640
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3641
+ </div>
3642
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
3643
+ <div class="drawer-actions">
3644
+ <div class="cmd-box">
3645
+ <code>npx torusguard recheck --rule TG-DB-004</code>
3646
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3647
+ </div>
3648
+ </div>
3649
+ </div>
3650
+ </td>
3651
+ </tr>
3652
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v0_6_1_scale.py medium resolved" data-path="harness/validate_v0_6_1_scale.py" data-drawer-id="drawer-56" onclick="toggleDrawer(this)">
3653
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3654
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3655
+ </td>
3656
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3657
+ <td><code class="rule-id">TG-DB-004</code></td>
3658
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
3659
+ <td><code>harness/validate_v0_6_1_scale.py:193</code></td>
3660
+ <td><span class="conf-score">64%</span></td>
3661
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3662
+ </tr>
3663
+ <tr id="drawer-56" class="drawer-row" style="display: none;">
3664
+ <td colspan="7">
3665
+ <div class="drawer-content">
3666
+
3667
+ <div class="drawer-header">
3668
+ <div>
3669
+ <strong>Finding ID:</strong> <code>TG-DB-004-a932f5b8</code> &middot;
3670
+ <strong>File:</strong> <code>harness/validate_v0_6_1_scale.py:193</code> &middot;
3671
+ <strong>Confidence:</strong> 64/100 &middot;
3672
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3673
+ </div>
3674
+ </div>
3675
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3676
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3677
+ </div>
3678
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
3679
+ <div class="drawer-actions">
3680
+ <div class="cmd-box">
3681
+ <code>npx torusguard recheck --rule TG-DB-004</code>
3682
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3683
+ </div>
3684
+ </div>
3685
+ </div>
3686
+ </td>
3687
+ </tr>
3688
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models harness/validate_v1_0_0_memory.py medium resolved" data-path="harness/validate_v1_0_0_memory.py" data-drawer-id="drawer-57" onclick="toggleDrawer(this)">
3689
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3690
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3691
+ </td>
3692
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3693
+ <td><code class="rule-id">TG-DB-004</code></td>
3694
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
3695
+ <td><code>harness/validate_v1_0_0_memory.py:265</code></td>
3696
+ <td><span class="conf-score">64%</span></td>
3697
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3698
+ </tr>
3699
+ <tr id="drawer-57" class="drawer-row" style="display: none;">
3700
+ <td colspan="7">
3701
+ <div class="drawer-content">
3702
+
3703
+ <div class="drawer-header">
3704
+ <div>
3705
+ <strong>Finding ID:</strong> <code>TG-DB-004-14a2d74f</code> &middot;
3706
+ <strong>File:</strong> <code>harness/validate_v1_0_0_memory.py:265</code> &middot;
3707
+ <strong>Confidence:</strong> 64/100 &middot;
3708
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3709
+ </div>
3710
+ </div>
3711
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3712
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3713
+ </div>
3714
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
3715
+ <div class="drawer-actions">
3716
+ <div class="cmd-box">
3717
+ <code>npx torusguard recheck --rule TG-DB-004</code>
3718
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3719
+ </div>
3720
+ </div>
3721
+ </div>
3722
+ </td>
3723
+ </tr>
3724
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/runner.py medium resolved" data-path="harness/runner.py" data-drawer-id="drawer-58" onclick="toggleDrawer(this)">
3725
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3726
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3727
+ </td>
3728
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3729
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
3730
+ <td class="finding-title">Production Stack Trace Exposure</td>
3731
+ <td><code>harness/runner.py:405</code></td>
3732
+ <td><span class="conf-score">56%</span></td>
3733
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3734
+ </tr>
3735
+ <tr id="drawer-58" class="drawer-row" style="display: none;">
3736
+ <td colspan="7">
3737
+ <div class="drawer-content">
3738
+
3739
+ <div class="drawer-header">
3740
+ <div>
3741
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-6f253f06</code> &middot;
3742
+ <strong>File:</strong> <code>harness/runner.py:405</code> &middot;
3743
+ <strong>Confidence:</strong> 56/100 &middot;
3744
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3745
+ </div>
3746
+ </div>
3747
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3748
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3749
+ </div>
3750
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
3751
+ <div class="drawer-actions">
3752
+ <div class="cmd-box">
3753
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
3754
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3755
+ </div>
3756
+ </div>
3757
+ </div>
3758
+ </td>
3759
+ </tr>
3760
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/runner.py medium resolved" data-path="harness/runner.py" data-drawer-id="drawer-59" onclick="toggleDrawer(this)">
3761
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3762
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3763
+ </td>
3764
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3765
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
3766
+ <td class="finding-title">Production Stack Trace Exposure</td>
3767
+ <td><code>harness/runner.py:416</code></td>
3768
+ <td><span class="conf-score">56%</span></td>
3769
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3770
+ </tr>
3771
+ <tr id="drawer-59" class="drawer-row" style="display: none;">
3772
+ <td colspan="7">
3773
+ <div class="drawer-content">
3774
+
3775
+ <div class="drawer-header">
3776
+ <div>
3777
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-fbe8ec66</code> &middot;
3778
+ <strong>File:</strong> <code>harness/runner.py:416</code> &middot;
3779
+ <strong>Confidence:</strong> 56/100 &middot;
3780
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3781
+ </div>
3782
+ </div>
3783
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3784
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3785
+ </div>
3786
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
3787
+ <div class="drawer-actions">
3788
+ <div class="cmd-box">
3789
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
3790
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3791
+ </div>
3792
+ </div>
3793
+ </div>
3794
+ </td>
3795
+ </tr>
3796
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-diff-003 unintentional removal of tenant filter in patch deletions harness/validate_v0_6_2_modern_stacks.py medium resolved" data-path="harness/validate_v0_6_2_modern_stacks.py" data-drawer-id="drawer-60" onclick="toggleDrawer(this)">
3797
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3798
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3799
+ </td>
3800
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3801
+ <td><code class="rule-id">TG-DIFF-003</code></td>
3802
+ <td class="finding-title">Unintentional Removal of Tenant Filter in Patch Deletions</td>
3803
+ <td><code>harness/validate_v0_6_2_modern_stacks.py:262</code></td>
3804
+ <td><span class="conf-score">54%</span></td>
3805
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3806
+ </tr>
3807
+ <tr id="drawer-60" class="drawer-row" style="display: none;">
3808
+ <td colspan="7">
3809
+ <div class="drawer-content">
3810
+
3811
+ <div class="drawer-header">
3812
+ <div>
3813
+ <strong>Finding ID:</strong> <code>TG-DIFF-003-3d00a189</code> &middot;
3814
+ <strong>File:</strong> <code>harness/validate_v0_6_2_modern_stacks.py:262</code> &middot;
3815
+ <strong>Confidence:</strong> 54/100 &middot;
3816
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3817
+ </div>
3818
+ </div>
3819
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3820
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3821
+ </div>
3822
+ <div class="drawer-desc">Removal of tenant isolation boundary in patch deletion</div>
3823
+ <div class="drawer-actions">
3824
+ <div class="cmd-box">
3825
+ <code>npx torusguard recheck --rule TG-DIFF-003</code>
3826
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DIFF-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3827
+ </div>
3828
+ </div>
3829
+ </div>
3830
+ </td>
3831
+ </tr>
3832
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/validate_qa_v0_6_0.py medium resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-61" onclick="toggleDrawer(this)">
3833
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3834
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3835
+ </td>
3836
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3837
+ <td><code class="rule-id">TG-INPUT-005</code></td>
3838
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
3839
+ <td><code>harness/validate_qa_v0_6_0.py:190</code></td>
3840
+ <td><span class="conf-score">52%</span></td>
3841
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3842
+ </tr>
3843
+ <tr id="drawer-61" class="drawer-row" style="display: none;">
3844
+ <td colspan="7">
3845
+ <div class="drawer-content">
3846
+
3847
+ <div class="drawer-header">
3848
+ <div>
3849
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-d5aaebe0</code> &middot;
3850
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:190</code> &middot;
3851
+ <strong>Confidence:</strong> 52/100 &middot;
3852
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3853
+ </div>
3854
+ </div>
3855
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3856
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3857
+ </div>
3858
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
3859
+ <div class="drawer-actions">
3860
+ <div class="cmd-box">
3861
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
3862
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3863
+ </div>
3864
+ </div>
3865
+ </div>
3866
+ </td>
3867
+ </tr>
3868
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/validate_qa_v0_6_0.py medium resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-62" onclick="toggleDrawer(this)">
3869
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3870
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3871
+ </td>
3872
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3873
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
3874
+ <td class="finding-title">Production Stack Trace Exposure</td>
3875
+ <td><code>harness/validate_qa_v0_6_0.py:64</code></td>
3876
+ <td><span class="conf-score">52%</span></td>
3877
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3878
+ </tr>
3879
+ <tr id="drawer-62" class="drawer-row" style="display: none;">
3880
+ <td colspan="7">
3881
+ <div class="drawer-content">
3882
+
3883
+ <div class="drawer-header">
3884
+ <div>
3885
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-153d982f</code> &middot;
3886
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:64</code> &middot;
3887
+ <strong>Confidence:</strong> 52/100 &middot;
3888
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3889
+ </div>
3890
+ </div>
3891
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3892
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3893
+ </div>
3894
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
3895
+ <div class="drawer-actions">
3896
+ <div class="cmd-box">
3897
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
3898
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3899
+ </div>
3900
+ </div>
3901
+ </div>
3902
+ </td>
3903
+ </tr>
3904
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/validate_qa_v0_6_0.py medium resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-63" onclick="toggleDrawer(this)">
3905
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3906
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3907
+ </td>
3908
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3909
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
3910
+ <td class="finding-title">Production Stack Trace Exposure</td>
3911
+ <td><code>harness/validate_qa_v0_6_0.py:77</code></td>
3912
+ <td><span class="conf-score">52%</span></td>
3913
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3914
+ </tr>
3915
+ <tr id="drawer-63" class="drawer-row" style="display: none;">
3916
+ <td colspan="7">
3917
+ <div class="drawer-content">
3918
+
3919
+ <div class="drawer-header">
3920
+ <div>
3921
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-21644311</code> &middot;
3922
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:77</code> &middot;
3923
+ <strong>Confidence:</strong> 52/100 &middot;
3924
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3925
+ </div>
3926
+ </div>
3927
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3928
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3929
+ </div>
3930
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
3931
+ <div class="drawer-actions">
3932
+ <div class="cmd-box">
3933
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
3934
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3935
+ </div>
3936
+ </div>
3937
+ </div>
3938
+ </td>
3939
+ </tr>
3940
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-platform-003 production stack trace exposure harness/validate_qa_v0_6_0.py medium resolved" data-path="harness/validate_qa_v0_6_0.py" data-drawer-id="drawer-64" onclick="toggleDrawer(this)">
3941
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3942
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3943
+ </td>
3944
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3945
+ <td><code class="rule-id">TG-PLATFORM-003</code></td>
3946
+ <td class="finding-title">Production Stack Trace Exposure</td>
3947
+ <td><code>harness/validate_qa_v0_6_0.py:80</code></td>
3948
+ <td><span class="conf-score">52%</span></td>
3949
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3950
+ </tr>
3951
+ <tr id="drawer-64" class="drawer-row" style="display: none;">
3952
+ <td colspan="7">
3953
+ <div class="drawer-content">
3954
+
3955
+ <div class="drawer-header">
3956
+ <div>
3957
+ <strong>Finding ID:</strong> <code>TG-PLATFORM-003-21b8a588</code> &middot;
3958
+ <strong>File:</strong> <code>harness/validate_qa_v0_6_0.py:80</code> &middot;
3959
+ <strong>Confidence:</strong> 52/100 &middot;
3960
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3961
+ </div>
3962
+ </div>
3963
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
3964
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
3965
+ </div>
3966
+ <div class="drawer-desc">Django DEBUG mode enabled in configuration</div>
3967
+ <div class="drawer-actions">
3968
+ <div class="cmd-box">
3969
+ <code>npx torusguard recheck --rule TG-PLATFORM-003</code>
3970
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-PLATFORM-003', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
3971
+ </div>
3972
+ </div>
3973
+ </div>
3974
+ </td>
3975
+ </tr>
3976
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-input-005 unsafe template rendering &amp;amp; disabled autoescaping harness/master_validation.py medium resolved" data-path="harness/master_validation.py" data-drawer-id="drawer-65" onclick="toggleDrawer(this)">
3977
+ <td style="text-align: center;" onclick="event.stopPropagation()">
3978
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
3979
+ </td>
3980
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
3981
+ <td><code class="rule-id">TG-INPUT-005</code></td>
3982
+ <td class="finding-title">Unsafe Template Rendering &amp; Disabled Autoescaping</td>
3983
+ <td><code>harness/master_validation.py:314</code></td>
3984
+ <td><span class="conf-score">49%</span></td>
3985
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
3986
+ </tr>
3987
+ <tr id="drawer-65" class="drawer-row" style="display: none;">
3988
+ <td colspan="7">
3989
+ <div class="drawer-content">
3990
+
3991
+ <div class="drawer-header">
3992
+ <div>
3993
+ <strong>Finding ID:</strong> <code>TG-INPUT-005-0d595acd</code> &middot;
3994
+ <strong>File:</strong> <code>harness/master_validation.py:314</code> &middot;
3995
+ <strong>Confidence:</strong> 49/100 &middot;
3996
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
3997
+ </div>
3998
+ </div>
3999
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
4000
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
4001
+ </div>
4002
+ <div class="drawer-desc">Flask render_template_string rendering untrusted input</div>
4003
+ <div class="drawer-actions">
4004
+ <div class="cmd-box">
4005
+ <code>npx torusguard recheck --rule TG-INPUT-005</code>
4006
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-INPUT-005', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
4007
+ </div>
4008
+ </div>
4009
+ </div>
4010
+ </td>
4011
+ </tr>
4012
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models tests/test_v0_6_0_governed_remediation.py medium resolved" data-path="tests/test_v0_6_0_governed_remediation.py" data-drawer-id="drawer-66" onclick="toggleDrawer(this)">
4013
+ <td style="text-align: center;" onclick="event.stopPropagation()">
4014
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
4015
+ </td>
4016
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
4017
+ <td><code class="rule-id">TG-DB-004</code></td>
4018
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
4019
+ <td><code>tests/test_v0_6_0_governed_remediation.py:86</code></td>
4020
+ <td><span class="conf-score">24%</span></td>
4021
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
4022
+ </tr>
4023
+ <tr id="drawer-66" class="drawer-row" style="display: none;">
4024
+ <td colspan="7">
4025
+ <div class="drawer-content">
4026
+
4027
+ <div class="drawer-header">
4028
+ <div>
4029
+ <strong>Finding ID:</strong> <code>TG-DB-004-fe2c60e3</code> &middot;
4030
+ <strong>File:</strong> <code>tests/test_v0_6_0_governed_remediation.py:86</code> &middot;
4031
+ <strong>Confidence:</strong> 24/100 &middot;
4032
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
4033
+ </div>
4034
+ </div>
4035
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
4036
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
4037
+ </div>
4038
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
4039
+ <div class="drawer-actions">
4040
+ <div class="cmd-box">
4041
+ <code>npx torusguard recheck --rule TG-DB-004</code>
4042
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
4043
+ </div>
4044
+ </div>
4045
+ </div>
4046
+ </td>
4047
+ </tr>
4048
+ <tr class="finding-row" data-severity="medium" data-status="resolved" data-search="tg-db-004 missing tenant query isolation in multi-tenant models tests/test_v0_6_0_governed_remediation.py medium resolved" data-path="tests/test_v0_6_0_governed_remediation.py" data-drawer-id="drawer-67" onclick="toggleDrawer(this)">
4049
+ <td style="text-align: center;" onclick="event.stopPropagation()">
4050
+ <span style="color: var(--accent-green); font-size: 14px;" title="Already resolved and defended">&#10004;</span>
4051
+ </td>
4052
+ <td><span class="badge badge-medium">Medium</span> <span class="badge badge-success">&#10004; Resolved</span></td>
4053
+ <td><code class="rule-id">TG-DB-004</code></td>
4054
+ <td class="finding-title">Missing Tenant Query Isolation in Multi-Tenant Models</td>
4055
+ <td><code>tests/test_v0_6_0_governed_remediation.py:79</code></td>
4056
+ <td><span class="conf-score">24%</span></td>
4057
+ <td style="text-align: right;"><span class="drawer-chevron">&#9656;</span></td>
4058
+ </tr>
4059
+ <tr id="drawer-67" class="drawer-row" style="display: none;">
4060
+ <td colspan="7">
4061
+ <div class="drawer-content">
4062
+
4063
+ <div class="drawer-header">
4064
+ <div>
4065
+ <strong>Finding ID:</strong> <code>TG-DB-004-6a739666</code> &middot;
4066
+ <strong>File:</strong> <code>tests/test_v0_6_0_governed_remediation.py:79</code> &middot;
4067
+ <strong>Confidence:</strong> 24/100 &middot;
4068
+ <span class="badge badge-success">&#10004; Resolved &amp; Defended</span>
4069
+ </div>
4070
+ </div>
4071
+ <div class="drawer-notice-resolved" style="background: rgba(63, 185, 80, 0.1); border: 1px solid rgba(63, 185, 80, 0.3); border-radius: 6px; padding: 10px 14px; margin: 10px 0; font-size: 12px;">
4072
+ <strong>&#10004; Remediated &amp; Hardened:</strong> This security violation has been successfully patched and verified under the Ponytail Protocol (&le; 35 additions, &le; 25 deletions).
4073
+ </div>
4074
+ <div class="drawer-desc">Django ORM .get(id=...) query lacking explicit tenant scope filter</div>
4075
+ <div class="drawer-actions">
4076
+ <div class="cmd-box">
4077
+ <code>npx torusguard recheck --rule TG-DB-004</code>
4078
+ <button class="btn-copy" onclick="copyText('npx torusguard recheck --rule TG-DB-004', this); event.stopPropagation();">&#128203; Copy Recheck Command</button>
4079
+ </div>
4080
+ </div>
4081
+ </div>
4082
+ </td>
4083
+ </tr>
4084
+ </tbody>
4085
+ </table>
766
4086
  </div>
767
4087
  </div>
768
- <div class="sim-stats">
769
- <div>Current: <strong id="simCurrentVal">100</strong>/100</div>
770
- <div>&rarr;</div>
771
- <div>Projected: <strong id="simProjectedVal" style="color: var(--accent-blue);">100</strong>/100 <span id="simDeltaBadge" class="badge badge-success">+0 pts</span></div>
772
- </div>
773
- <div class="sim-actions">
774
- <button class="btn btn-sm" onclick="simulateFixAll('Critical')">&#9889; Simulate Criticals</button>
775
- <button class="btn btn-sm" onclick="simulateFixAll('all')">&#9889; Simulate All Fixes</button>
776
- <button class="btn btn-sm" onclick="resetSimulatedFixes()">Reset Simulator</button>
4088
+ </div>
777
4089
  </div>
778
4090
  </div>
4091
+ </div>
779
4092
 
780
- <!-- Active Defenses & Protected Invariants (5-Layer Architectural Invariant Matrix) -->
781
- <div class="defended-section" id="defendedSection">
782
- <div class="defended-header" onclick="toggleDefendedVisibility()">
783
- <div class="section-title" style="margin-bottom: 0;">
784
- &#128737; Active Defenses &amp; Protected Invariants (74 Passing)
785
- </div>
786
- <span id="defendedToggleIcon" style="color: var(--text-muted); font-size: 12px;">&#9660; Collapse Matrix</span>
787
- </div>
788
- <div id="defendedMatrixBody">
789
- <div class="coverage-bar-container">
790
- <div class="coverage-stats">
791
- <span><strong>74 of 74 Invariants Enforced</strong> (100% Defense Coverage)</span>
792
- <span class="badge badge-success">100% Enforced</span>
4093
+ <!-- 2. Active Defenses & 74 Invariants Catalog Modal -->
4094
+ <div id="invariantsCatalogModal" class="modal-backdrop" style="display: none;" onclick="closeModal('invariantsCatalogModal', event)">
4095
+ <div class="modal-card modal-lg" onclick="event.stopPropagation()">
4096
+ <div class="modal-header">
4097
+ <div>
4098
+ <div style="display: flex; align-items: center; gap: 8px;">
4099
+ <span class="badge badge-success">&#10004; 100% ENFORCED</span>
4100
+ <h3 style="font-size: 16px; margin: 0; color: var(--text-main);">&#128737; Active Defenses &amp; Protected Invariants (74 Passing)</h3>
793
4101
  </div>
794
- <div class="coverage-progress-bg">
795
- <div class="coverage-progress-fill" style="width: 100%;"></div>
4102
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 4px;">
4103
+ All 74 architectural security rules enforced across 5 defensive layers. Zero security bypasses detected.
796
4104
  </div>
797
4105
  </div>
798
- <div class="inv-search-bar">
799
- <div class="search-wrapper" style="width: 100%;">
800
- <input type="text" id="invSearchInput" class="search-input" style="width: 100%;" placeholder="Search 74 invariants by ID, title, layer, or keyword..." oninput="filterInvariants()">
801
- <button class="search-clear-btn" id="invSearchClearBtn" onclick="clearInvSearch()">&times;</button>
4106
+ <button class="modal-close-btn" onclick="closeModal('invariantsCatalogModal', event)">&times;</button>
4107
+ </div>
4108
+ <div class="modal-body" style="padding-top: 10px;">
4109
+ <div class="defended-section" id="defendedSection">
4110
+ <div class="coverage-bar-container" style="margin-bottom: 12px;">
4111
+ <div class="coverage-stats">
4112
+ <span><strong>74 of 74 Invariants Enforced</strong> (100% Defense Coverage)</span>
4113
+ <span class="badge badge-success">100% Enforced</span>
4114
+ </div>
4115
+ <div class="coverage-progress-bg">
4116
+ <div class="coverage-progress-fill" style="width: 100%;"></div>
4117
+ </div>
802
4118
  </div>
803
- <div id="invMatchCount" style="font-size: 11px; color: var(--accent-blue); white-space: nowrap;"></div>
804
- </div>
805
- <div class="layers-container" id="layersList">
806
-
4119
+ <div class="inv-search-bar" style="margin-bottom: 12px;">
4120
+ <div class="search-wrapper" style="width: 100%;">
4121
+ <input type="text" id="invSearchInput" class="search-input" style="width: 100%;" placeholder="Search 74 invariants by ID, title, layer, or keyword..." oninput="filterInvariants()">
4122
+ <button class="search-clear-btn" id="invSearchClearBtn" onclick="clearInvSearch()">&times;</button>
4123
+ </div>
4124
+ <div id="invMatchCount" style="font-size: 11px; color: var(--accent-blue); white-space: nowrap;"></div>
4125
+ </div>
4126
+ <div class="layers-container" id="layersList">
4127
+
807
4128
  <div class="layer-card" data-layer-id="layer-app">
808
4129
  <div class="layer-header">
809
4130
  <div class="layer-title-group">
@@ -1249,268 +4570,25 @@
1249
4570
  </div>
1250
4571
  </div>
1251
4572
  </div>
1252
- </div>
1253
- </div>
1254
- </div>
1255
-
1256
- <!-- Filter & Search Bar for Findings -->
1257
- <div class="filter-bar">
1258
- <div class="filter-pills">
1259
- <span class="pill-group-label">Severity:</span>
1260
- <span class="pill active" data-sev-filter="all" onclick="filterBySeverity('all')">All</span>
1261
- <span class="pill" data-sev-filter="critical" onclick="filterBySeverity('critical')">&#128308; Critical (0)</span>
1262
- <span class="pill" data-sev-filter="high" onclick="filterBySeverity('high')">&#128992; High (0)</span>
1263
- <span class="pill" data-sev-filter="medium" onclick="filterBySeverity('medium')">&#128993; Med/Low (0)</span>
1264
-
1265
- <span class="pill-group-label" style="margin-left: 8px;">Status:</span>
1266
- <span class="pill active" data-status-filter="all" onclick="filterByStatus('all')">All</span>
1267
- <span class="pill" data-status-filter="open" onclick="filterByStatus('open')">&#9888; Open (0)</span>
1268
- <span class="pill" data-status-filter="resolved" onclick="filterByStatus('resolved')">&#10004; Resolved (0)</span>
1269
-
1270
- <span class="dir-filter-chip" id="dirFilterChip" onclick="clearDirectoryFilter()">
1271
- Folder: <strong id="dirFilterName"></strong> &times;
1272
- </span>
1273
- <button class="btn-reset-filters" id="btnResetFilters" onclick="resetAllFilters()">&times; Reset Filters</button>
1274
- </div>
1275
- <div class="search-wrapper">
1276
- <input type="text" id="searchInput" class="search-input" placeholder="Search rules, titles, files..." oninput="searchFindings()">
1277
- <button class="search-clear-btn" id="searchClearBtn" onclick="clearSearch()">&times;</button>
1278
- </div>
1279
- </div>
1280
- <div class="filter-stats-bar">
1281
- <div>Showing <span id="visibleCount" style="font-weight: 700; color: var(--text-main);">0</span> of <span id="totalCount" style="font-weight: 700; color: var(--text-main);">0</span> cataloged findings</div>
1282
- <div id="activeFilterSummary" style="font-size: 11px; color: var(--accent-blue);"></div>
1283
- </div>
1284
-
1285
- <!-- Findings Table -->
1286
- <div class="table-container">
1287
- <table>
1288
- <thead>
1289
- <tr>
1290
- <th style="width: 70px; text-align: center;">Simulate</th>
1291
- <th style="width: 110px;">Severity</th>
1292
- <th style="width: 130px;">Rule ID</th>
1293
- <th>Finding Title</th>
1294
- <th style="width: 250px;">File &amp; Location</th>
1295
- <th style="width: 90px;">Confidence</th>
1296
- <th style="width: 30px;"></th>
1297
- </tr>
1298
- </thead>
1299
- <tbody id="findingsTableBody">
1300
- <tr><td colspan="7" class="empty-cell">&#10004; Zero security invariant violations detected. Posture is 100% clean and defended.</td></tr>
1301
- </tbody>
1302
- </table>
1303
- </div>
1304
-
1305
- <!-- OWASP Top 10 Compliance Radar -->
1306
- <div class="section-title">&#128737; OWASP Top 10 (2021/2026) Compliance Matrix</div>
1307
- <div class="grid-owasp">
1308
-
1309
- <div class="owasp-card">
1310
- <div class="owasp-top">
1311
- <span class="owasp-title">A01: Broken Access Control</span>
1312
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1313
- </div>
1314
- <div class="owasp-bar-bg">
1315
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1316
- </div>
1317
- </div>
1318
- <div class="owasp-card">
1319
- <div class="owasp-top">
1320
- <span class="owasp-title">A02: Cryptographic Failures</span>
1321
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1322
- </div>
1323
- <div class="owasp-bar-bg">
1324
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1325
- </div>
1326
- </div>
1327
- <div class="owasp-card">
1328
- <div class="owasp-top">
1329
- <span class="owasp-title">A03: Injection Defense</span>
1330
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1331
- </div>
1332
- <div class="owasp-bar-bg">
1333
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1334
- </div>
1335
- </div>
1336
- <div class="owasp-card">
1337
- <div class="owasp-top">
1338
- <span class="owasp-title">A05: Security Configuration</span>
1339
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1340
- </div>
1341
- <div class="owasp-bar-bg">
1342
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1343
- </div>
1344
- </div>
1345
- <div class="owasp-card">
1346
- <div class="owasp-top">
1347
- <span class="owasp-title">A06: Supply Chain Health</span>
1348
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1349
- </div>
1350
- <div class="owasp-bar-bg">
1351
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1352
- </div>
1353
- </div>
1354
- <div class="owasp-card">
1355
- <div class="owasp-top">
1356
- <span class="owasp-title">A07: Identity & Auth</span>
1357
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1358
- </div>
1359
- <div class="owasp-bar-bg">
1360
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1361
- </div>
1362
- </div>
1363
- <div class="owasp-card">
1364
- <div class="owasp-top">
1365
- <span class="owasp-title">A08: Software Integrity</span>
1366
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1367
- </div>
1368
- <div class="owasp-bar-bg">
1369
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1370
- </div>
1371
- </div>
1372
- <div class="owasp-card">
1373
- <div class="owasp-top">
1374
- <span class="owasp-title">A10: SSRF Defense</span>
1375
- <span class="owasp-badge" style="color: var(--accent-green); border-color: var(--accent-green);">100% Compliant</span>
1376
- </div>
1377
- <div class="owasp-bar-bg">
1378
- <div class="owasp-bar" style="width: 100%; background: var(--accent-green);"></div>
1379
4573
  </div>
1380
4574
  </div>
4575
+ </div>
1381
4576
  </div>
4577
+ </div>
1382
4578
 
1383
- <!-- Enterprise Compliance Framework Mapping -->
1384
- <div class="section-title">&#127963; Enterprise Compliance Framework Mapping (SOC 2 &middot; ISO 27001 &middot; HIPAA)</div>
1385
- <div class="grid-compliance">
1386
-
1387
- <div class="card comp-card">
1388
- <div class="comp-card-header">
1389
- <div>
1390
- <div class="comp-title">SOC 2 Type II</div>
1391
- <div class="comp-sub">AICPA Trust Services Criteria (Security & Boundary)</div>
1392
- </div>
1393
- <span class="badge badge-success">100% Met</span>
1394
- </div>
1395
- <div class="comp-ctrl-list">
1396
-
1397
- <div class="comp-ctrl-row">
1398
- <div>
1399
- <div class="comp-ctrl-code">CC6.1 Logical Access</div>
1400
- <div class="comp-ctrl-fams">TG-AUTH, TG-CLIENT</div>
1401
- </div>
1402
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1403
- </div>
1404
- <div class="comp-ctrl-row">
1405
- <div>
1406
- <div class="comp-ctrl-code">CC6.6 Network Boundary</div>
1407
- <div class="comp-ctrl-fams">TG-SSRF, TG-RATE, TG-WS</div>
1408
- </div>
1409
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1410
- </div>
1411
- <div class="comp-ctrl-row">
1412
- <div>
1413
- <div class="comp-ctrl-code">CC6.7 Transmission Security</div>
1414
- <div class="comp-ctrl-fams">TG-PLATFORM, TG-SEC</div>
1415
- </div>
1416
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1417
- </div>
1418
- <div class="comp-ctrl-row">
1419
- <div>
1420
- <div class="comp-ctrl-code">CC7.1 Vulnerability & Churn</div>
1421
- <div class="comp-ctrl-fams">TG-DIFF, TG-SUPPLY</div>
1422
- </div>
1423
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1424
- </div>
1425
- </div>
1426
- </div>
1427
- <div class="card comp-card">
1428
- <div class="comp-card-header">
1429
- <div>
1430
- <div class="comp-title">ISO/IEC 27001:2022</div>
1431
- <div class="comp-sub">Annex A Controls for Technological & Application Security</div>
1432
- </div>
1433
- <span class="badge badge-success">100% Met</span>
1434
- </div>
1435
- <div class="comp-ctrl-list">
1436
-
1437
- <div class="comp-ctrl-row">
1438
- <div>
1439
- <div class="comp-ctrl-code">A.8.20 Network Security</div>
1440
- <div class="comp-ctrl-fams">TG-SSRF, TG-WEBHOOK, TG-RATE</div>
1441
- </div>
1442
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1443
- </div>
1444
- <div class="comp-ctrl-row">
1445
- <div>
1446
- <div class="comp-ctrl-code">A.8.24 Cryptography Usage</div>
1447
- <div class="comp-ctrl-fams">TG-SEC, TG-AUTH</div>
1448
- </div>
1449
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1450
- </div>
1451
- <div class="comp-ctrl-row">
1452
- <div>
1453
- <div class="comp-ctrl-code">A.8.28 Secure Coding</div>
1454
- <div class="comp-ctrl-fams">TG-INPUT, TG-DB, TG-GQL, TG-AGENT</div>
1455
- </div>
1456
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1457
- </div>
1458
- </div>
1459
- </div>
1460
- <div class="card comp-card">
1461
- <div class="comp-card-header">
1462
- <div>
1463
- <div class="comp-title">HIPAA Security Rule</div>
1464
- <div class="comp-sub">45 CFR Part 164 Technical Safeguards for ePHI</div>
1465
- </div>
1466
- <span class="badge badge-success">100% Met</span>
1467
- </div>
1468
- <div class="comp-ctrl-list">
1469
-
1470
- <div class="comp-ctrl-row">
1471
- <div>
1472
- <div class="comp-ctrl-code">§ 164.312(a)(1) Access Control</div>
1473
- <div class="comp-ctrl-fams">TG-AUTH, TG-DB (Tenant Isolation)</div>
1474
- </div>
1475
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1476
- </div>
1477
- <div class="comp-ctrl-row">
1478
- <div>
1479
- <div class="comp-ctrl-code">§ 164.312(c)(1) ePHI Integrity</div>
1480
- <div class="comp-ctrl-fams">TG-WEBHOOK, TG-BIZ, TG-DIFF</div>
1481
- </div>
1482
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1483
- </div>
1484
- <div class="comp-ctrl-row">
1485
- <div>
1486
- <div class="comp-ctrl-code">§ 164.312(e)(1) Transmission Security</div>
1487
- <div class="comp-ctrl-fams">TG-PLATFORM, TG-SEC, TG-CLIENT</div>
1488
- </div>
1489
- <div><span class="badge badge-success">&#10004; Passing</span></div>
1490
- </div>
4579
+ <!-- 3. Golden Fix Recipes Modal -->
4580
+ <div id="recipesModal" class="modal-backdrop" style="display: none;" onclick="closeModal('recipesModal', event)">
4581
+ <div class="modal-card modal-lg" id="recipesCard" onclick="event.stopPropagation()">
4582
+ <div class="modal-header">
4583
+ <div>
4584
+ <h3 style="font-size: 16px; margin: 0; color: var(--text-main);">&#10024; Golden Fix Recipes (15)</h3>
4585
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 4px;">
4586
+ Verified remediation patterns distilled from applied patches conforming to Ponytail line churn budget.
1491
4587
  </div>
1492
4588
  </div>
1493
- </div>
1494
-
1495
- <!-- Middle Grid: Heatmap + Clusters -->
1496
- <div class="grid-bottom">
1497
- <div class="card">
1498
- <div class="section-title">&#128293; Directory Attack Surface Heatmap</div>
1499
- <div style="font-size: 12px; color: var(--text-muted); margin-bottom: 12px;">Click a folder to filter findings for that directory:</div>
1500
- <div class="empty-state">&#10004; Zero directory surface exposure detected across repository modules.</div>
4589
+ <button class="modal-close-btn" onclick="closeModal('recipesModal', event)">&times;</button>
1501
4590
  </div>
1502
-
1503
- <div class="card">
1504
- <div class="section-title">&#128736; Root-Cause Architectural Clusters</div>
1505
- <div class="empty-state">&#10004; No architectural vulnerability clusters identified. Systemic invariants enforced.</div>
1506
- </div>
1507
- </div>
1508
-
1509
- <!-- Bottom Grid: Golden Recipes + Next Best Defenses -->
1510
- <div class="grid-bottom">
1511
- <div class="card">
1512
- <div class="section-title">&#10024; Golden Fix Recipes (15)</div>
1513
- <div style="font-size: 12px; color: var(--text-muted); margin-bottom: 10px;">Verified remediation patterns distilled from applied patches:</div>
4591
+ <div class="modal-body" style="padding-top: 10px;">
1514
4592
  <div class="filter-pills" style="margin-bottom: 12px;">
1515
4593
  <span class="pill active" data-recipe-cat-filter="all" onclick="filterRecipeCategory('all')">All (15)</span><span class="pill" data-recipe-cat-filter="client" onclick="filterRecipeCategory('client')">Client (1)</span><span class="pill" data-recipe-cat-filter="database" onclick="filterRecipeCategory('database')">Database (1)</span><span class="pill" data-recipe-cat-filter="input" onclick="filterRecipeCategory('input')">Input (2)</span><span class="pill" data-recipe-cat-filter="platform" onclick="filterRecipeCategory('platform')">Platform (3)</span><span class="pill" data-recipe-cat-filter="rate-limiting" onclick="filterRecipeCategory('rate-limiting')">Rate Limiting (2)</span><span class="pill" data-recipe-cat-filter="ssrf" onclick="filterRecipeCategory('ssrf')">SSRF (1)</span><span class="pill" data-recipe-cat-filter="secrets" onclick="filterRecipeCategory('secrets')">Secrets (5)</span>
1516
4594
  </div>
@@ -2189,10 +5267,22 @@
2189
5267
  </div>
2190
5268
  </div>
2191
5269
  </div>
5270
+ </div>
5271
+ </div>
2192
5272
 
2193
- <div class="card">
2194
- <div class="section-title">&#128161; Next Best Defenses Advisory</div>
2195
- <div style="font-size: 12px; color: var(--text-muted); margin-bottom: 12px;">Stack-tailored recommendations to achieve hardened posture:</div>
5273
+ <!-- 4. Next Best Defenses Advisory Modal -->
5274
+ <div id="advisoryModal" class="modal-backdrop" style="display: none;" onclick="closeModal('advisoryModal', event)">
5275
+ <div class="modal-card modal-lg" onclick="event.stopPropagation()">
5276
+ <div class="modal-header">
5277
+ <div>
5278
+ <h3 style="font-size: 16px; margin: 0; color: var(--text-main);">&#128161; Prescriptive Next Best Defenses Advisory</h3>
5279
+ <div style="font-size: 12px; color: var(--text-muted); margin-top: 4px;">
5280
+ Stack-tailored recommendations to achieve hardened posture.
5281
+ </div>
5282
+ </div>
5283
+ <button class="modal-close-btn" onclick="closeModal('advisoryModal', event)">&times;</button>
5284
+ </div>
5285
+ <div class="modal-body" style="padding-top: 10px;">
2196
5286
 
2197
5287
  <div class="advisory-item">
2198
5288
  <div class="advisory-top">
@@ -2281,13 +5371,9 @@
2281
5371
  </div>
2282
5372
  </div>
2283
5373
  </div>
2284
-
2285
- <footer>
2286
- TorusGuard v1.3.6 &middot; Autonomous Security Engine for AI-Built Applications &middot; 100% Local-First &middot; Zero Cloud Telemetry
2287
- </footer>
2288
5374
  </div>
2289
5375
 
2290
- <!-- Invariant Inspection Modal -->
5376
+ <!-- 5. Invariant Guarantee Inspection Modal -->
2291
5377
  <div id="invariantModal" class="modal-backdrop" style="display: none;" onclick="closeInvariantModal(event)">
2292
5378
  <div class="modal-card" onclick="event.stopPropagation()">
2293
5379
  <div class="modal-header">
@@ -2330,7 +5416,7 @@
2330
5416
  </div>
2331
5417
 
2332
5418
  <script>
2333
- const RAW_FINDINGS = [];
5419
+ const RAW_FINDINGS = [{"finding_id": "TG-AUTH-004-33adb2d9", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "High", "status": "resolved", "confidence_score": 66, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 107, "cluster": "cluster-auth-bypass", "description": "Session cookie secure flag disabled in Django settings", "is_canary": false}, {"finding_id": "TG-AUTH-004-4a33f7e7", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "High", "status": "resolved", "confidence_score": 66, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 239, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-DB-002-14cf4139", "rule_id": "TG-DB-002", "title": "Privileged Database Credential in Browser Context", "severity": "High", "status": "resolved", "confidence_score": 71, "file_path": "harness/validate_v0_7_0_runtime.py", "line_number": 129, "cluster": "cluster-client-leak", "description": "Service role key or raw database connection string reference in frontend code", "is_canary": false}, {"finding_id": "TG-DB-004-e8cc000a", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/runner.py", "line_number": 505, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-89b581f9", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/runner.py", "line_number": 506, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-e33fd263", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "High", "status": "resolved", "confidence_score": 67, "file_path": "harness/validate_v0_6_3_hardening.py", "line_number": 119, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-ff3f7499", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "High", "status": "resolved", "confidence_score": 67, "file_path": "harness/validate_v0_6_3_hardening.py", "line_number": 127, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-a7c00c05", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "High", "status": "resolved", "confidence_score": 67, "file_path": "harness/validate_v0_6_3_hardening.py", "line_number": 135, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DIFF-001-04571685", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "High", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 74, "cluster": "cluster-transport-security", "description": "Disabled TLS certificate verification (verify=False)", "is_canary": false}, {"finding_id": "TG-INPUT-002-266bcaa1", "rule_id": "TG-INPUT-002", "title": "Raw SQL Concatenation", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/validate_v1_1_0_advanced_memory.py", "line_number": 109, "cluster": "cluster-injection", "description": "Python f-string interpolation in raw SQL query", "is_canary": false}, {"finding_id": "TG-INPUT-002-f8cd11b9", "rule_id": "TG-INPUT-002", "title": "Raw SQL Concatenation", "severity": "High", "status": "resolved", "confidence_score": 84, "file_path": "harness/runner.py", "line_number": 258, "cluster": "cluster-injection", "description": "Python f-string interpolation in raw SQL query", "is_canary": false}, {"finding_id": "TG-INPUT-005-d7ef73f1", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "High", "status": "resolved", "confidence_score": 49, "file_path": "harness/validate_e2e.py", "line_number": 457, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-INPUT-005-95cb57ba", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "High", "status": "resolved", "confidence_score": 46, "file_path": "harness/engine/fixture_manager.py", "line_number": 176, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-INPUT-005-7f81ea7f", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "High", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 177, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-INPUT-005-e0ffb03b", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "High", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 193, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-69f083d6", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "High", "status": "resolved", "confidence_score": 56, "file_path": "harness/runner.py", "line_number": 392, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-SEC-001-c616aefd", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 77, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 64, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-d5b3684f", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 77, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 90, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-54f1a02a", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 77, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 341, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-676f776e", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 77, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 356, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-58f70e46", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 77, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 362, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-7c852ff3", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/master_validation.py", "line_number": 257, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-02761dbb", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/master_validation.py", "line_number": 460, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-3a2b5eca", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 74, "file_path": "harness/validate_e2e.py", "line_number": 355, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-593d6437", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "High", "status": "resolved", "confidence_score": 81, "file_path": "harness/runner.py", "line_number": 211, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SUPPLY-004-e52415c0", "rule_id": "TG-SUPPLY-004", "title": "Unpinned CI Action", "severity": "High", "status": "resolved", "confidence_score": 47, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 383, "cluster": "cluster-supply-chain", "description": "GitHub Action referenced by mutable tag instead of immutable commit SHA", "is_canary": false}, {"finding_id": "TG-SUPPLY-004-b9d15743", "rule_id": "TG-SUPPLY-004", "title": "Unpinned CI Action", "severity": "High", "status": "resolved", "confidence_score": 47, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 404, "cluster": "cluster-supply-chain", "description": "GitHub Action referenced by mutable tag instead of immutable commit SHA", "is_canary": false}, {"finding_id": "TG-SUPPLY-004-9240a873", "rule_id": "TG-SUPPLY-004", "title": "Unpinned CI Action", "severity": "High", "status": "resolved", "confidence_score": 44, "file_path": "harness/validate_v0_6_3_hardening.py", "line_number": 251, "cluster": "cluster-supply-chain", "description": "GitHub Action referenced by mutable tag instead of immutable commit SHA", "is_canary": false}, {"finding_id": "TG-AUTH-004-56b1c90f", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 96, "cluster": "cluster-auth-bypass", "description": "Decorator disabling route-level authentication or CSRF protection", "is_canary": false}, {"finding_id": "TG-AUTH-004-95eb27cd", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 876, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-AUTH-004-e838c41c", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 18, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-AUTH-004-5c78d750", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 204, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-AUTH-004-0d028be7", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 208, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-AUTH-004-3ae1d9c1", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 209, "cluster": "cluster-auth-bypass", "description": "Attribute disabling ASP.NET authentication", "is_canary": false}, {"finding_id": "TG-AUTH-004-ea07db54", "rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "Medium", "status": "resolved", "confidence_score": 66, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 193, "cluster": "cluster-auth-bypass", "description": "Spring Security CSRF protection explicitly disabled", "is_canary": false}, {"finding_id": "TG-DB-002-08d11e50", "rule_id": "TG-DB-002", "title": "Privileged Database Credential in Browser Context", "severity": "Medium", "status": "resolved", "confidence_score": 74, "file_path": "harness/validate_v0_9_2_diff_and_monorepo.py", "line_number": 134, "cluster": "cluster-client-leak", "description": "Service role key or raw database connection string reference in frontend code", "is_canary": false}, {"finding_id": "TG-DB-002-b53ad22c", "rule_id": "TG-DB-002", "title": "Privileged Database Credential in Browser Context", "severity": "Medium", "status": "resolved", "confidence_score": 71, "file_path": "harness/validate_v0_7_0_runtime.py", "line_number": 423, "cluster": "cluster-client-leak", "description": "Service role key or raw database connection string reference in frontend code", "is_canary": false}, {"finding_id": "TG-DB-004-fe2c60e3", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 24, "file_path": "tests/test_v0_6_0_governed_remediation.py", "line_number": 86, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-8b6c1463", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 67, "file_path": "harness/validate_v0_6_3_hardening.py", "line_number": 171, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-9a2f13c7", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 64, "file_path": "harness/validate_v0_6_1_scale.py", "line_number": 115, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-a932f5b8", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 64, "file_path": "harness/validate_v0_6_1_scale.py", "line_number": 193, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-14a2d74f", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 64, "file_path": "harness/validate_v1_0_0_memory.py", "line_number": 265, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DB-004-6a739666", "rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Medium", "status": "resolved", "confidence_score": 24, "file_path": "tests/test_v0_6_0_governed_remediation.py", "line_number": 79, "cluster": "cluster-tenant-isolation", "description": "Django ORM .get(id=...) query lacking explicit tenant scope filter", "is_canary": false}, {"finding_id": "TG-DIFF-001-8b55ac4b", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 151, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-cf8d252d", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 162, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-3543946e", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 173, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-efffaad0", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 349, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-91bd06b8", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 129, "cluster": "cluster-transport-security", "description": "Disabled Node.js TLS rejectUnauthorized", "is_canary": false}, {"finding_id": "TG-DIFF-001-cb245735", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/evaluate_portfolio_polyglot.py", "line_number": 261, "cluster": "cluster-transport-security", "description": "Disabled PHP curl SSL verification", "is_canary": false}, {"finding_id": "TG-DIFF-001-6667680a", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v0_9_2_diff_and_monorepo.py", "line_number": 60, "cluster": "cluster-transport-security", "description": "Disabled TLS certificate verification (verify=False)", "is_canary": false}, {"finding_id": "TG-DIFF-001-00b3b8ca", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v0_9_2_diff_and_monorepo.py", "line_number": 67, "cluster": "cluster-transport-security", "description": "Disabled TLS certificate verification (verify=False)", "is_canary": false}, {"finding_id": "TG-DIFF-001-f209dec6", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 16, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-d9adecdb", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 182, "cluster": "cluster-transport-security", "description": "Disabled Go TLS certificate verification (InsecureSkipVerify: true)", "is_canary": false}, {"finding_id": "TG-DIFF-001-ddbf5cf0", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 19, "cluster": "cluster-transport-security", "description": "Disabled PHP curl SSL verification", "is_canary": false}, {"finding_id": "TG-DIFF-001-2b3eb6b7", "rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Medium", "status": "resolved", "confidence_score": 69, "file_path": "harness/validate_v1_3_0_polyglot.py", "line_number": 215, "cluster": "cluster-transport-security", "description": "Disabled PHP curl SSL verification", "is_canary": false}, {"finding_id": "TG-DIFF-003-3d00a189", "rule_id": "TG-DIFF-003", "title": "Unintentional Removal of Tenant Filter in Patch Deletions", "severity": "Medium", "status": "resolved", "confidence_score": 54, "file_path": "harness/validate_v0_6_2_modern_stacks.py", "line_number": 262, "cluster": "cluster-tenant-isolation", "description": "Removal of tenant isolation boundary in patch deletion", "is_canary": false}, {"finding_id": "TG-INPUT-002-8f877a5f", "rule_id": "TG-INPUT-002", "title": "Raw SQL Concatenation", "severity": "Medium", "status": "resolved", "confidence_score": 74, "file_path": "harness/validate_v1_1_0_advanced_memory.py", "line_number": 107, "cluster": "cluster-injection", "description": "Python f-string interpolation in raw SQL query", "is_canary": false}, {"finding_id": "TG-INPUT-002-02f8e274", "rule_id": "TG-INPUT-002", "title": "Raw SQL Concatenation", "severity": "Medium", "status": "resolved", "confidence_score": 74, "file_path": "harness/engine/fixture_manager.py", "line_number": 128, "cluster": "cluster-injection", "description": "Python f-string interpolation in raw SQL query", "is_canary": false}, {"finding_id": "TG-INPUT-005-d5aaebe0", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "Medium", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 190, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-INPUT-005-0d595acd", "rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "Medium", "status": "resolved", "confidence_score": 49, "file_path": "harness/master_validation.py", "line_number": 314, "cluster": "cluster-injection", "description": "Flask render_template_string rendering untrusted input", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-6f253f06", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "status": "resolved", "confidence_score": 56, "file_path": "harness/runner.py", "line_number": 405, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-fbe8ec66", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "status": "resolved", "confidence_score": 56, "file_path": "harness/runner.py", "line_number": 416, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-153d982f", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 64, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-21644311", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 77, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-PLATFORM-003-21b8a588", "rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "status": "resolved", "confidence_score": 52, "file_path": "harness/validate_qa_v0_6_0.py", "line_number": 80, "cluster": "cluster-platform", "description": "Django DEBUG mode enabled in configuration", "is_canary": false}, {"finding_id": "TG-RATE-001-758a7750", "rule_id": "TG-RATE-001", "title": "Unlimited Authentication Endpoint", "severity": "Medium", "status": "resolved", "confidence_score": 65, "file_path": "harness/runner.py", "line_number": 575, "cluster": "cluster-rate-limiting", "description": "Authentication POST endpoint defined without rate-limiting middleware", "is_canary": false}, {"finding_id": "TG-SEC-001-88c9bb29", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "Medium", "status": "resolved", "confidence_score": 81, "file_path": "harness/runner.py", "line_number": 392, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}, {"finding_id": "TG-SEC-001-e0a84cf3", "rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "Medium", "status": "resolved", "confidence_score": 81, "file_path": "harness/runner.py", "line_number": 221, "cluster": "cluster-credentials-exposure", "description": "Hardcoded credential or API secret string", "is_canary": false}];
2334
5420
  const SARIF_RULES = [{"id": "TG-SEC-001", "shortDescription": {"text": "Hardcoded Secret or API Key in Tracked Source"}}, {"id": "TG-SEC-002", "shortDescription": {"text": "Public Client Environment Variable Secret Exposure"}}, {"id": "TG-SEC-003", "shortDescription": {"text": "Tracked Environment File"}}, {"id": "TG-SEC-004", "shortDescription": {"text": "Sensitive Information in Logs"}}, {"id": "TG-SEC-005", "shortDescription": {"text": "Secret in Git History or Query URL"}}, {"id": "TG-SEC-006", "shortDescription": {"text": "Secret in Build Artifact or Container Layer"}}, {"id": "TG-SEC-007", "shortDescription": {"text": "Secret in Test or Example Fixture Without Mock Marker"}}, {"id": "TG-AUTH-001", "shortDescription": {"text": "Weak Password Storage or Deprecated Hashing"}}, {"id": "TG-AUTH-002", "shortDescription": {"text": "Client-Only Authorization Enforcement"}}, {"id": "TG-AUTH-003", "shortDescription": {"text": "Missing Object-Level Authorization (IDOR)"}}, {"id": "TG-AUTH-004", "shortDescription": {"text": "Insecure Session Cookie Configuration"}}, {"id": "TG-AUTH-005", "shortDescription": {"text": "Unsafe Password Reset Token Generation"}}, {"id": "TG-AUTH-006", "shortDescription": {"text": "Mass Assignment & Privilege Escalation via Payloads"}}, {"id": "TG-AUTH-007", "shortDescription": {"text": "Missing Object-Level and Property-Level Authorization (IDOR)"}}, {"id": "TG-AUTH-008", "shortDescription": {"text": "Untrusted Role or Tenant Header Injection"}}, {"id": "TG-DB-001", "shortDescription": {"text": "Frontend Database Query Logic"}}, {"id": "TG-DB-002", "shortDescription": {"text": "Privileged Database Credential in Browser Context"}}, {"id": "TG-DB-003", "shortDescription": {"text": "Frontend Use of Admin or Server-Only Database SDKs"}}, {"id": "TG-DB-004", "shortDescription": {"text": "Missing Tenant Query Isolation in Multi-Tenant Models"}}, {"id": "TG-INPUT-001", "shortDescription": {"text": "Missing Server-Side Request Validation"}}, {"id": "TG-INPUT-002", "shortDescription": {"text": "Raw SQL Concatenation"}}, {"id": "TG-INPUT-003", "shortDescription": {"text": "Unsafe Dynamic Code or HTML Execution"}}, {"id": "TG-INPUT-004", "shortDescription": {"text": "Command Injection via Shell Execution"}}, {"id": "TG-INPUT-005", "shortDescription": {"text": "Unsafe Template Rendering & Disabled Autoescaping"}}, {"id": "TG-INPUT-006", "shortDescription": {"text": "Path Traversal and Unsafe Upload Storage"}}, {"id": "TG-RATE-001", "shortDescription": {"text": "Unlimited Authentication Endpoint"}}, {"id": "TG-RATE-002", "shortDescription": {"text": "Unlimited Public Write Endpoint"}}, {"id": "TG-RATE-003", "shortDescription": {"text": "Unbounded Resource Consumption"}}, {"id": "TG-AGENT-001", "shortDescription": {"text": "Prompt Injection in System Context Files"}}, {"id": "TG-AGENT-002", "shortDescription": {"text": "Unsafe Tool Dispatch & Shell Execution without Sandboxing"}}, {"id": "TG-AGENT-003", "shortDescription": {"text": "Overly Broad MCP Tool Scoping & Credential Access"}}, {"id": "TG-AGENT-004", "shortDescription": {"text": "Persistent Memory & Cross-Session Information Leakage"}}, {"id": "TG-SSRF-001", "shortDescription": {"text": "User-Controlled Server-Side URL Fetch"}}, {"id": "TG-SSRF-002", "shortDescription": {"text": "Missing Internal Network Protection"}}, {"id": "TG-SSRF-003", "shortDescription": {"text": "Unsafe Redirect Following"}}, {"id": "TG-SSRF-004", "shortDescription": {"text": "Unbounded Outbound Request Without Timeout"}}, {"id": "TG-WEBHOOK-001", "shortDescription": {"text": "Missing Webhook Signature Verification"}}, {"id": "TG-WEBHOOK-002", "shortDescription": {"text": "Replayable Webhook Without Timestamp Validation"}}, {"id": "TG-WEBHOOK-003", "shortDescription": {"text": "Missing Webhook Idempotency"}}, {"id": "TG-WEBHOOK-004", "shortDescription": {"text": "Unvalidated Webhook Event Type"}}, {"id": "TG-WS-001", "shortDescription": {"text": "Unauthenticated WebSocket Handshake"}}, {"id": "TG-WS-002", "shortDescription": {"text": "Missing Channel-Level Authorization"}}, {"id": "TG-WS-003", "shortDescription": {"text": "Unvalidated WebSocket Message"}}, {"id": "TG-WS-004", "shortDescription": {"text": "Unbounded WebSocket Connections"}}, {"id": "TG-CSRF-001", "shortDescription": {"text": "Missing CSRF Protection"}}, {"id": "TG-CSRF-002", "shortDescription": {"text": "Unsafe Credentialed Cross-Origin Request"}}, {"id": "TG-GQL-001", "shortDescription": {"text": "Missing Query Depth or Complexity Limits"}}, {"id": "TG-GQL-002", "shortDescription": {"text": "Resolver Missing Authorization"}}, {"id": "TG-GQL-003", "shortDescription": {"text": "Unbounded GraphQL Pagination or Batching"}}, {"id": "TG-GQL-004", "shortDescription": {"text": "Unnecessary Production Introspection"}}, {"id": "TG-SUPPLY-001", "shortDescription": {"text": "Missing or Ignored Dependency Lockfile"}}, {"id": "TG-SUPPLY-002", "shortDescription": {"text": "Vulnerable Dependency Review Missing"}}, {"id": "TG-SUPPLY-003", "shortDescription": {"text": "Unsafe CI/CD Secret Exposure"}}, {"id": "TG-SUPPLY-004", "shortDescription": {"text": "Unpinned CI Action"}}, {"id": "TG-SUPPLY-005", "shortDescription": {"text": "Unsafe Dependency Install Script"}}, {"id": "TG-SUPPLY-006", "shortDescription": {"text": "Container Build Secret Persistence"}}, {"id": "TG-BIZ-001", "shortDescription": {"text": "Client-Controlled Sensitive Business Value"}}, {"id": "TG-BIZ-002", "shortDescription": {"text": "Replayable One-Time Operation"}}, {"id": "TG-BIZ-003", "shortDescription": {"text": "Missing Workflow-State Validation"}}, {"id": "TG-BIZ-004", "shortDescription": {"text": "Unrestricted Sensitive Business Flow"}}, {"id": "TG-CACHE-001", "shortDescription": {"text": "Sensitive Response Publicly Cacheable"}}, {"id": "TG-CACHE-002", "shortDescription": {"text": "Missing User Cache Isolation"}}, {"id": "TG-CACHE-003", "shortDescription": {"text": "Sensitive Data in URL"}}, {"id": "TG-CLIENT-001", "shortDescription": {"text": "Public Production Source Maps"}}, {"id": "TG-CLIENT-002", "shortDescription": {"text": "Sensitive Client Bundle Content"}}, {"id": "TG-PLATFORM-001", "shortDescription": {"text": "Wildcard CORS With Credentials"}}, {"id": "TG-PLATFORM-002", "shortDescription": {"text": "Missing Security Headers"}}, {"id": "TG-PLATFORM-003", "shortDescription": {"text": "Production Stack Trace Exposure"}}, {"id": "TG-PLATFORM-004", "shortDescription": {"text": "Missing Request Size Limits"}}, {"id": "TG-DIFF-001", "shortDescription": {"text": "Accidental Security Check Bypass in Patch Additions"}}, {"id": "TG-DIFF-002", "shortDescription": {"text": "Secret and Token Ingestion in Patch Additions"}}, {"id": "TG-DIFF-003", "shortDescription": {"text": "Unintentional Removal of Tenant Filter in Patch Deletions"}}, {"id": "TG-EDGE-001", "shortDescription": {"text": "Serverless & Edge Global State Memory Leakage"}}, {"id": "TG-EDGE-003", "shortDescription": {"text": "AWS Lambda Ephemeral Execution & Cold Start Security"}}];
2335
5421
  const INVARIANT_CATALOG = {"TG-SEC-001": {"rule_id": "TG-SEC-001", "title": "Hardcoded Secret or API Key in Tracked Source", "severity": "Critical", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-002": {"rule_id": "TG-SEC-002", "title": "Public Client Environment Variable Secret Exposure", "severity": "Critical", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-003": {"rule_id": "TG-SEC-003", "title": "Tracked Environment File", "severity": "High", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-004": {"rule_id": "TG-SEC-004", "title": "Sensitive Information in Logs", "severity": "Medium", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-005": {"rule_id": "TG-SEC-005", "title": "Secret in Git History or Query URL", "severity": "Critical", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-006": {"rule_id": "TG-SEC-006", "title": "Secret in Build Artifact or Container Layer", "severity": "Critical", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-SEC-007": {"rule_id": "TG-SEC-007", "title": "Secret in Test or Example Fixture Without Mock Marker", "severity": "Critical", "category": "secrets", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero hardcoded API keys, private certificates, AWS/GCP/Stripe tokens, or JWT secrets in tracked source code. Mandatory externalized environment configuration.", "owasp": "OWASP A02:2021 - Cryptographic Failures", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-AUTH-001": {"rule_id": "TG-AUTH-001", "title": "Weak Password Storage or Deprecated Hashing", "severity": "Critical", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-002": {"rule_id": "TG-AUTH-002", "title": "Client-Only Authorization Enforcement", "severity": "High", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-003": {"rule_id": "TG-AUTH-003", "title": "Missing Object-Level Authorization (IDOR)", "severity": "High", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-004": {"rule_id": "TG-AUTH-004", "title": "Insecure Session Cookie Configuration", "severity": "High", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-005": {"rule_id": "TG-AUTH-005", "title": "Unsafe Password Reset Token Generation", "severity": "High", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-006": {"rule_id": "TG-AUTH-006", "title": "Mass Assignment & Privilege Escalation via Payloads", "severity": "Critical", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-007": {"rule_id": "TG-AUTH-007", "title": "Missing Object-Level and Property-Level Authorization (IDOR)", "severity": "Critical", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-AUTH-008": {"rule_id": "TG-AUTH-008", "title": "Untrusted Role or Tenant Header Injection", "severity": "Critical", "category": "auth", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Timing-safe secret compares, strong argon2id/bcrypt password hashing, explicit JWT algorithm pinning, and secure cookie session attributes.", "owasp": "OWASP A07:2021 - Identification & Authentication Failures", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(a)(1)"}, "TG-DB-001": {"rule_id": "TG-DB-001", "title": "Frontend Database Query Logic", "severity": "High", "category": "database", "cluster": "cluster-client-leak", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Zero unparameterized SQL concatenation. Enforces prepared statements with bound parameters and mandatory tenant partition scoping.", "owasp": "OWASP A03:2021 - Injection / A01: Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(a)(1)"}, "TG-DB-002": {"rule_id": "TG-DB-002", "title": "Privileged Database Credential in Browser Context", "severity": "Critical", "category": "database", "cluster": "cluster-client-leak", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Zero unparameterized SQL concatenation. Enforces prepared statements with bound parameters and mandatory tenant partition scoping.", "owasp": "OWASP A03:2021 - Injection / A01: Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(a)(1)"}, "TG-DB-003": {"rule_id": "TG-DB-003", "title": "Frontend Use of Admin or Server-Only Database SDKs", "severity": "Critical", "category": "database", "cluster": "cluster-client-leak", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Zero unparameterized SQL concatenation. Enforces prepared statements with bound parameters and mandatory tenant partition scoping.", "owasp": "OWASP A03:2021 - Injection / A01: Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(a)(1)"}, "TG-DB-004": {"rule_id": "TG-DB-004", "title": "Missing Tenant Query Isolation in Multi-Tenant Models", "severity": "Critical", "category": "database", "cluster": "cluster-tenant-isolation", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Zero unparameterized SQL concatenation. Enforces prepared statements with bound parameters and mandatory tenant partition scoping.", "owasp": "OWASP A03:2021 - Injection / A01: Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(a)(1)"}, "TG-INPUT-001": {"rule_id": "TG-INPUT-001", "title": "Missing Server-Side Request Validation", "severity": "High", "category": "injection", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-INPUT-002": {"rule_id": "TG-INPUT-002", "title": "Raw SQL Concatenation", "severity": "Critical", "category": "injection", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-INPUT-003": {"rule_id": "TG-INPUT-003", "title": "Unsafe Dynamic Code or HTML Execution", "severity": "High", "category": "injection", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-INPUT-004": {"rule_id": "TG-INPUT-004", "title": "Command Injection via Shell Execution", "severity": "High", "category": "injection", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-INPUT-005": {"rule_id": "TG-INPUT-005", "title": "Unsafe Template Rendering & Disabled Autoescaping", "severity": "High", "category": "injection", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-INPUT-006": {"rule_id": "TG-INPUT-006", "title": "Path Traversal and Unsafe Upload Storage", "severity": "Critical", "category": "filesystem", "cluster": "cluster-injection", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Strict path normalization, command argument escaping, and safe DOM assignment. Prevents path traversal, OS command injection, and Reflected/DOM XSS.", "owasp": "OWASP A03:2021 - Injection", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-RATE-001": {"rule_id": "TG-RATE-001", "title": "Unlimited Authentication Endpoint", "severity": "High", "category": "rate", "cluster": "cluster-rate-limiting", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Sliding-window IP rate limiting on auth and write endpoints, bounded JSON payload parsers (<= 1MB), and slowloris connection timeouts.", "owasp": "OWASP A04:2021 - Insecure Design / A07: Auth Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-RATE-002": {"rule_id": "TG-RATE-002", "title": "Unlimited Public Write Endpoint", "severity": "Medium", "category": "rate", "cluster": "cluster-rate-limiting", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Sliding-window IP rate limiting on auth and write endpoints, bounded JSON payload parsers (<= 1MB), and slowloris connection timeouts.", "owasp": "OWASP A04:2021 - Insecure Design / A07: Auth Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-RATE-003": {"rule_id": "TG-RATE-003", "title": "Unbounded Resource Consumption", "severity": "High", "category": "rate", "cluster": "cluster-rate-limiting", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Sliding-window IP rate limiting on auth and write endpoints, bounded JSON payload parsers (<= 1MB), and slowloris connection timeouts.", "owasp": "OWASP A04:2021 - Insecure Design / A07: Auth Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-AGENT-001": {"rule_id": "TG-AGENT-001", "title": "Prompt Injection in System Context Files", "severity": "Critical", "category": "agent", "cluster": "cluster-agent-security", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Structural user prompt isolation, inert delimiters, and tool call schema validation. Prevents direct and indirect prompt injection attacks.", "owasp": "OWASP LLM01: Prompt Injection", "compliance": "ISO 27001 A.8.28 (Secure Coding)"}, "TG-AGENT-002": {"rule_id": "TG-AGENT-002", "title": "Unsafe Tool Dispatch & Shell Execution without Sandboxing", "severity": "Critical", "category": "agent", "cluster": "cluster-agent-security", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Structural user prompt isolation, inert delimiters, and tool call schema validation. Prevents direct and indirect prompt injection attacks.", "owasp": "OWASP LLM01: Prompt Injection", "compliance": "ISO 27001 A.8.28 (Secure Coding)"}, "TG-AGENT-003": {"rule_id": "TG-AGENT-003", "title": "Overly Broad MCP Tool Scoping & Credential Access", "severity": "High", "category": "agent", "cluster": "cluster-agent-security", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Structural user prompt isolation, inert delimiters, and tool call schema validation. Prevents direct and indirect prompt injection attacks.", "owasp": "OWASP LLM01: Prompt Injection", "compliance": "ISO 27001 A.8.28 (Secure Coding)"}, "TG-AGENT-004": {"rule_id": "TG-AGENT-004", "title": "Persistent Memory & Cross-Session Information Leakage", "severity": "High", "category": "agent", "cluster": "cluster-agent-security", "layer_id": "layer-app", "layer_name": "Application & LLM Defense", "guarantee": "Structural user prompt isolation, inert delimiters, and tool call schema validation. Prevents direct and indirect prompt injection attacks.", "owasp": "OWASP LLM01: Prompt Injection", "compliance": "ISO 27001 A.8.28 (Secure Coding)"}, "TG-SSRF-001": {"rule_id": "TG-SSRF-001", "title": "User-Controlled Server-Side URL Fetch", "severity": "Critical", "category": "ssrf", "cluster": "cluster-ssrf", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Outbound URL hostname whitelisting, RFC1918 private IP range blocking (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1) and cloud metadata blocking (169.254.169.254).", "owasp": "OWASP A10:2021 - Server-Side Request Forgery (SSRF)", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-SSRF-002": {"rule_id": "TG-SSRF-002", "title": "Missing Internal Network Protection", "severity": "Critical", "category": "ssrf", "cluster": "cluster-ssrf", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Outbound URL hostname whitelisting, RFC1918 private IP range blocking (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1) and cloud metadata blocking (169.254.169.254).", "owasp": "OWASP A10:2021 - Server-Side Request Forgery (SSRF)", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-SSRF-003": {"rule_id": "TG-SSRF-003", "title": "Unsafe Redirect Following", "severity": "Critical", "category": "ssrf", "cluster": "cluster-ssrf", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Outbound URL hostname whitelisting, RFC1918 private IP range blocking (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1) and cloud metadata blocking (169.254.169.254).", "owasp": "OWASP A10:2021 - Server-Side Request Forgery (SSRF)", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-SSRF-004": {"rule_id": "TG-SSRF-004", "title": "Unbounded Outbound Request Without Timeout", "severity": "Critical", "category": "ssrf", "cluster": "cluster-ssrf", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Outbound URL hostname whitelisting, RFC1918 private IP range blocking (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1) and cloud metadata blocking (169.254.169.254).", "owasp": "OWASP A10:2021 - Server-Side Request Forgery (SSRF)", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-WEBHOOK-001": {"rule_id": "TG-WEBHOOK-001", "title": "Missing Webhook Signature Verification", "severity": "Critical", "category": "webhook", "cluster": "cluster-webhook", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Mandatory cryptographic HMAC-SHA256 signature verification over raw request buffers and replay attack protection with <= 300s timestamp limits.", "owasp": "OWASP A08:2021 - Software and Data Integrity Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(c)(1)"}, "TG-WEBHOOK-002": {"rule_id": "TG-WEBHOOK-002", "title": "Replayable Webhook Without Timestamp Validation", "severity": "Critical", "category": "webhook", "cluster": "cluster-webhook", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Mandatory cryptographic HMAC-SHA256 signature verification over raw request buffers and replay attack protection with <= 300s timestamp limits.", "owasp": "OWASP A08:2021 - Software and Data Integrity Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(c)(1)"}, "TG-WEBHOOK-003": {"rule_id": "TG-WEBHOOK-003", "title": "Missing Webhook Idempotency", "severity": "Critical", "category": "webhook", "cluster": "cluster-webhook", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Mandatory cryptographic HMAC-SHA256 signature verification over raw request buffers and replay attack protection with <= 300s timestamp limits.", "owasp": "OWASP A08:2021 - Software and Data Integrity Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(c)(1)"}, "TG-WEBHOOK-004": {"rule_id": "TG-WEBHOOK-004", "title": "Unvalidated Webhook Event Type", "severity": "Critical", "category": "webhook", "cluster": "cluster-webhook", "layer_id": "layer-net", "layer_name": "Network, SSRF & Webhooks", "guarantee": "Mandatory cryptographic HMAC-SHA256 signature verification over raw request buffers and replay attack protection with <= 300s timestamp limits.", "owasp": "OWASP A08:2021 - Software and Data Integrity Failures", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(c)(1)"}, "TG-WS-001": {"rule_id": "TG-WS-001", "title": "Unauthenticated WebSocket Handshake", "severity": "High", "category": "ws", "cluster": "cluster-websocket", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Handshake origin validation, connection ticket verification, and inbound frame size bounds to eliminate CSWSH and socket exhaustion.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-WS-002": {"rule_id": "TG-WS-002", "title": "Missing Channel-Level Authorization", "severity": "Critical", "category": "ws", "cluster": "cluster-websocket", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Handshake origin validation, connection ticket verification, and inbound frame size bounds to eliminate CSWSH and socket exhaustion.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-WS-003": {"rule_id": "TG-WS-003", "title": "Unvalidated WebSocket Message", "severity": "Critical", "category": "ws", "cluster": "cluster-websocket", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Handshake origin validation, connection ticket verification, and inbound frame size bounds to eliminate CSWSH and socket exhaustion.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-WS-004": {"rule_id": "TG-WS-004", "title": "Unbounded WebSocket Connections", "severity": "Critical", "category": "ws", "cluster": "cluster-websocket", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Handshake origin validation, connection ticket verification, and inbound frame size bounds to eliminate CSWSH and socket exhaustion.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-CSRF-001": {"rule_id": "TG-CSRF-001", "title": "Missing CSRF Protection", "severity": "Critical", "category": "csrf", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Cryptographic anti-CSRF token verification on state-changing requests and SameSite=Lax/Strict cookie isolation.", "owasp": "OWASP A01:2021 - Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28"}, "TG-CSRF-002": {"rule_id": "TG-CSRF-002", "title": "Unsafe Credentialed Cross-Origin Request", "severity": "Critical", "category": "csrf", "cluster": "cluster-auth-bypass", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Cryptographic anti-CSRF token verification on state-changing requests and SameSite=Lax/Strict cookie isolation.", "owasp": "OWASP A01:2021 - Broken Access Control", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.28"}, "TG-GQL-001": {"rule_id": "TG-GQL-001", "title": "Missing Query Depth or Complexity Limits", "severity": "High", "category": "gql", "cluster": "cluster-graphql", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Query depth limiting (max depth <= 7), circular reference blocking, field complexity cost analysis, and production schema introspection suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-GQL-002": {"rule_id": "TG-GQL-002", "title": "Resolver Missing Authorization", "severity": "Critical", "category": "gql", "cluster": "cluster-graphql", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Query depth limiting (max depth <= 7), circular reference blocking, field complexity cost analysis, and production schema introspection suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-GQL-003": {"rule_id": "TG-GQL-003", "title": "Unbounded GraphQL Pagination or Batching", "severity": "Critical", "category": "gql", "cluster": "cluster-graphql", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Query depth limiting (max depth <= 7), circular reference blocking, field complexity cost analysis, and production schema introspection suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-GQL-004": {"rule_id": "TG-GQL-004", "title": "Unnecessary Production Introspection", "severity": "Critical", "category": "gql", "cluster": "cluster-graphql", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Query depth limiting (max depth <= 7), circular reference blocking, field complexity cost analysis, and production schema introspection suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.28"}, "TG-SUPPLY-001": {"rule_id": "TG-SUPPLY-001", "title": "Missing or Ignored Dependency Lockfile", "severity": "Critical", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-SUPPLY-002": {"rule_id": "TG-SUPPLY-002", "title": "Vulnerable Dependency Review Missing", "severity": "Critical", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-SUPPLY-003": {"rule_id": "TG-SUPPLY-003", "title": "Unsafe CI/CD Secret Exposure", "severity": "Critical", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-SUPPLY-004": {"rule_id": "TG-SUPPLY-004", "title": "Unpinned CI Action", "severity": "Critical", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-SUPPLY-005": {"rule_id": "TG-SUPPLY-005", "title": "Unsafe Dependency Install Script", "severity": "Critical", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-SUPPLY-006": {"rule_id": "TG-SUPPLY-006", "title": "Container Build Secret Persistence", "severity": "High", "category": "supply", "cluster": "cluster-supply-chain", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Lockfile cryptographic integrity checks, known high/critical CVE build gates, verified registry origins, and build script execution bounds.", "owasp": "OWASP A06:2021 - Vulnerable and Outdated Components", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28"}, "TG-BIZ-001": {"rule_id": "TG-BIZ-001", "title": "Client-Controlled Sensitive Business Value", "severity": "Critical", "category": "biz", "cluster": "cluster-biz-logic", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Strict positive financial amount constraints, atomic database transaction locks, and coupon stacking bounds to prevent race conditions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "HIPAA \u00a7 164.312(c)(1) Data Integrity / SOC 2 CC7.1"}, "TG-BIZ-002": {"rule_id": "TG-BIZ-002", "title": "Replayable One-Time Operation", "severity": "Critical", "category": "biz", "cluster": "cluster-biz-logic", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Strict positive financial amount constraints, atomic database transaction locks, and coupon stacking bounds to prevent race conditions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "HIPAA \u00a7 164.312(c)(1) Data Integrity / SOC 2 CC7.1"}, "TG-BIZ-003": {"rule_id": "TG-BIZ-003", "title": "Missing Workflow-State Validation", "severity": "Critical", "category": "biz", "cluster": "cluster-biz-logic", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Strict positive financial amount constraints, atomic database transaction locks, and coupon stacking bounds to prevent race conditions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "HIPAA \u00a7 164.312(c)(1) Data Integrity / SOC 2 CC7.1"}, "TG-BIZ-004": {"rule_id": "TG-BIZ-004", "title": "Unrestricted Sensitive Business Flow", "severity": "Critical", "category": "biz", "cluster": "cluster-biz-logic", "layer_id": "layer-auth", "layer_name": "Identity, Auth & Real-Time", "guarantee": "Strict positive financial amount constraints, atomic database transaction locks, and coupon stacking bounds to prevent race conditions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "HIPAA \u00a7 164.312(c)(1) Data Integrity / SOC 2 CC7.1"}, "TG-CACHE-001": {"rule_id": "TG-CACHE-001", "title": "Sensitive Response Publicly Cacheable", "severity": "Critical", "category": "cache", "cluster": "cluster-cache", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Mandatory Cache-Control: no-store on authenticated sensitive responses and unkeyed HTTP header sanitization to prevent web cache poisoning.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20"}, "TG-CACHE-002": {"rule_id": "TG-CACHE-002", "title": "Missing User Cache Isolation", "severity": "Critical", "category": "cache", "cluster": "cluster-cache", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Mandatory Cache-Control: no-store on authenticated sensitive responses and unkeyed HTTP header sanitization to prevent web cache poisoning.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20"}, "TG-CACHE-003": {"rule_id": "TG-CACHE-003", "title": "Sensitive Data in URL", "severity": "Critical", "category": "cache", "cluster": "cluster-cache", "layer_id": "layer-db", "layer_name": "Database, GraphQL & Cache", "guarantee": "Mandatory Cache-Control: no-store on authenticated sensitive responses and unkeyed HTTP header sanitization to prevent web cache poisoning.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20"}, "TG-CLIENT-001": {"rule_id": "TG-CLIENT-001", "title": "Public Production Source Maps", "severity": "Medium", "category": "client", "cluster": "cluster-client-leak", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero server role keys, database master credentials, or private API secrets leaked into frontend bundles or public environment variables.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-CLIENT-002": {"rule_id": "TG-CLIENT-002", "title": "Sensitive Client Bundle Content", "severity": "High", "category": "client", "cluster": "cluster-client-leak", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Zero server role keys, database master credentials, or private API secrets leaked into frontend bundles or public environment variables.", "owasp": "OWASP A01:2021 - Broken Access Control / A05: Misconfiguration", "compliance": "SOC 2 CC6.1 / ISO 27001 A.8.24 / HIPAA \u00a7 164.312(e)(1)"}, "TG-PLATFORM-001": {"rule_id": "TG-PLATFORM-001", "title": "Wildcard CORS With Credentials", "severity": "High", "category": "platform", "cluster": "cluster-auth-bypass", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Mandatory production security headers (CSP, HSTS max-age>=31536000, X-Content-Type-Options: nosniff, X-Frame-Options: DENY) and debug mode suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(e)(1)"}, "TG-PLATFORM-002": {"rule_id": "TG-PLATFORM-002", "title": "Missing Security Headers", "severity": "Medium", "category": "platform", "cluster": "cluster-platform", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Mandatory production security headers (CSP, HSTS max-age>=31536000, X-Content-Type-Options: nosniff, X-Frame-Options: DENY) and debug mode suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(e)(1)"}, "TG-PLATFORM-003": {"rule_id": "TG-PLATFORM-003", "title": "Production Stack Trace Exposure", "severity": "Medium", "category": "platform", "cluster": "cluster-platform", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Mandatory production security headers (CSP, HSTS max-age>=31536000, X-Content-Type-Options: nosniff, X-Frame-Options: DENY) and debug mode suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(e)(1)"}, "TG-PLATFORM-004": {"rule_id": "TG-PLATFORM-004", "title": "Missing Request Size Limits", "severity": "Medium", "category": "platform", "cluster": "cluster-platform", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Mandatory production security headers (CSP, HSTS max-age>=31536000, X-Content-Type-Options: nosniff, X-Frame-Options: DENY) and debug mode suppression.", "owasp": "OWASP A05:2021 - Security Misconfiguration", "compliance": "SOC 2 CC6.7 / ISO 27001 A.8.20 / HIPAA \u00a7 164.312(e)(1)"}, "TG-DIFF-001": {"rule_id": "TG-DIFF-001", "title": "Accidental Security Check Bypass in Patch Additions", "severity": "Critical", "category": "transport", "cluster": "cluster-transport-security", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Strict Ponytail Protocol enforcement (<= 35 additions, <= 25 deletions per patch) and zero security suppression pragmas (nosec pragmas, InsecureSkipVerify).", "owasp": "OWASP A08:2021 - Software Integrity", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(c)(1)"}, "TG-DIFF-002": {"rule_id": "TG-DIFF-002", "title": "Secret and Token Ingestion in Patch Additions", "severity": "Critical", "category": "diff", "cluster": "cluster-credentials-exposure", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Strict Ponytail Protocol enforcement (<= 35 additions, <= 25 deletions per patch) and zero security suppression pragmas (nosec pragmas, InsecureSkipVerify).", "owasp": "OWASP A08:2021 - Software Integrity", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(c)(1)"}, "TG-DIFF-003": {"rule_id": "TG-DIFF-003", "title": "Unintentional Removal of Tenant Filter in Patch Deletions", "severity": "High", "category": "diff", "cluster": "cluster-tenant-isolation", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Strict Ponytail Protocol enforcement (<= 35 additions, <= 25 deletions per patch) and zero security suppression pragmas (nosec pragmas, InsecureSkipVerify).", "owasp": "OWASP A08:2021 - Software Integrity", "compliance": "SOC 2 CC7.1 / ISO 27001 A.8.28 / HIPAA \u00a7 164.312(c)(1)"}, "TG-EDGE-001": {"rule_id": "TG-EDGE-001", "title": "Serverless & Edge Global State Memory Leakage", "severity": "High", "category": "edge", "cluster": "cluster-edge", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Subrequest fan-out limits (<= 50 per invocation), serverless wall-clock execution timeouts (<= 30s), and memory bounds for edge functions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}, "TG-EDGE-003": {"rule_id": "TG-EDGE-003", "title": "AWS Lambda Ephemeral Execution & Cold Start Security", "severity": "High", "category": "edge", "cluster": "cluster-edge", "layer_id": "layer-platform", "layer_name": "Platform, Supply Chain & Secrets", "guarantee": "Subrequest fan-out limits (<= 50 per invocation), serverless wall-clock execution timeouts (<= 30s), and memory bounds for edge functions.", "owasp": "OWASP A04:2021 - Insecure Design", "compliance": "SOC 2 CC6.6 / ISO 27001 A.8.20"}};
2336
5422
  const VIOLATED_RULE_IDS = [];
@@ -2341,6 +5427,38 @@
2341
5427
  let currentRecipeCategory = 'all';
2342
5428
  let BASE_POSTURE_SCORE = 100;
2343
5429
 
5430
+ // ── Modal Dialog Engine ──
5431
+ function openModal(id) {
5432
+ const m = document.getElementById(id);
5433
+ if (m) {
5434
+ m.style.display = 'flex';
5435
+ document.body.style.overflow = 'hidden';
5436
+ }
5437
+ }
5438
+ function closeModal(id, event) {
5439
+ if (event && event.target && event.target !== event.currentTarget && !event.target.classList.contains('modal-close-btn')) {
5440
+ return;
5441
+ }
5442
+ const m = document.getElementById(id);
5443
+ if (m) {
5444
+ m.style.display = 'none';
5445
+ document.body.style.overflow = '';
5446
+ }
5447
+ }
5448
+ function openFindingsModal() { openModal('findingsModal'); }
5449
+ function openInvariantsModal() { openModal('invariantsCatalogModal'); }
5450
+ function openRecipesModal() { openModal('recipesModal'); }
5451
+ function openAdvisoryModal() { openModal('advisoryModal'); }
5452
+
5453
+ document.addEventListener('keydown', function(e) {
5454
+ if (e.key === 'Escape') {
5455
+ document.querySelectorAll('.modal-backdrop').forEach(m => {
5456
+ m.style.display = 'none';
5457
+ });
5458
+ document.body.style.overflow = '';
5459
+ }
5460
+ });
5461
+
2344
5462
  // ── Theme Switcher ──
2345
5463
  function initTheme() {
2346
5464
  const saved = localStorage.getItem('tg_theme');
@@ -2379,6 +5497,8 @@
2379
5497
  let remCrit = 0, remHigh = 0, remMed = 0, remLow = 0;
2380
5498
  RAW_FINDINGS.forEach(f => {
2381
5499
  if (f.is_canary) return;
5500
+ const st = (f.status || 'open').toLowerCase();
5501
+ if (st === 'resolved' || st === 'fixed' || st === 'confirmed_fixed') return;
2382
5502
  if (fixedIds.has(f.finding_id)) return; // Simulated as fixed
2383
5503
  const s = f.severity;
2384
5504
  if (s === 'Critical') remCrit++;
@@ -2537,6 +5657,7 @@
2537
5657
 
2538
5658
  // ── Findings Filtering & Drawer Lifecycle ──
2539
5659
  function filterBySeverity(sev) {
5660
+ openFindingsModal();
2540
5661
  currentSeverity = sev;
2541
5662
  document.querySelectorAll('[data-sev-filter]').forEach(p => {
2542
5663
  if (p.getAttribute('data-sev-filter') === sev) p.classList.add('active');
@@ -2559,6 +5680,7 @@
2559
5680
  }
2560
5681
 
2561
5682
  function filterByDirectory(dir) {
5683
+ openFindingsModal();
2562
5684
  currentDirectory = dir.replace(/\/$/, '');
2563
5685
  const chip = document.getElementById('dirFilterChip');
2564
5686
  const chipName = document.getElementById('dirFilterName');
@@ -2609,16 +5731,59 @@
2609
5731
  if (!body) return;
2610
5732
  if (body.style.display === 'none') {
2611
5733
  body.style.display = 'block';
2612
- icon.innerHTML = '&#9660; Collapse Matrix';
5734
+ if (icon) icon.innerHTML = '&#9660; Collapse Details';
5735
+ } else {
5736
+ body.style.display = 'none';
5737
+ if (icon) icon.innerHTML = '&#9654; Expand 74 Invariant Details';
5738
+ }
5739
+ }
5740
+
5741
+ function toggleFindingsArchive() {
5742
+ const body = document.getElementById('findingsArchiveBody');
5743
+ const icon = document.getElementById('archiveToggleIcon');
5744
+ const btn = document.getElementById('btnArchiveToggle');
5745
+ if (!body) return;
5746
+ if (body.style.display === 'none') {
5747
+ body.style.display = 'block';
5748
+ if (icon) icon.innerHTML = '&#9660;';
5749
+ if (btn) btn.classList.add('active');
5750
+ searchFindings();
5751
+ } else {
5752
+ body.style.display = 'none';
5753
+ if (icon) icon.innerHTML = '&#9654;';
5754
+ if (btn) btn.classList.remove('active');
5755
+ }
5756
+ }
5757
+
5758
+ function toggleRecipesSection() {
5759
+ const body = document.getElementById('recipesCardBody');
5760
+ const icon = document.getElementById('recipesToggleIcon');
5761
+ const btn = document.getElementById('btnRecipesToggle');
5762
+ if (!body) return;
5763
+ if (body.style.display === 'none') {
5764
+ body.style.display = 'block';
5765
+ if (btn) btn.innerHTML = '<span id="recipesToggleIcon">&#9660;</span> Collapse';
2613
5766
  } else {
2614
5767
  body.style.display = 'none';
2615
- icon.innerHTML = '&#9654; Expand Matrix';
5768
+ if (btn) btn.innerHTML = '<span id="recipesToggleIcon">&#9654;</span> Expand (15)';
5769
+ }
5770
+ }
5771
+
5772
+ function toggleComplianceSection() {
5773
+ const grid = document.getElementById('gridCompliance');
5774
+ const icon = document.getElementById('compToggleIcon');
5775
+ if (!grid) return;
5776
+ if (grid.style.display === 'none') {
5777
+ grid.style.display = 'grid';
5778
+ if (icon) icon.innerHTML = '&#9660; Collapse';
5779
+ } else {
5780
+ grid.style.display = 'none';
5781
+ if (icon) icon.innerHTML = '&#9654; Expand Frameworks';
2616
5782
  }
2617
5783
  }
2618
5784
 
2619
5785
  function toggleDefendedSection() {
2620
- const sec = document.getElementById('defendedSection');
2621
- if (sec) sec.scrollIntoView({ behavior: 'smooth' });
5786
+ openInvariantsModal();
2622
5787
  }
2623
5788
 
2624
5789
  function searchFindings() {