nablr 3.17.1__tar.gz

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 (379) hide show
  1. nablr-3.17.1/.dockerignore +12 -0
  2. nablr-3.17.1/.github/workflows/ci.yml +108 -0
  3. nablr-3.17.1/.github/workflows/publish.yml +46 -0
  4. nablr-3.17.1/.github/workflows/security-scan.yml +51 -0
  5. nablr-3.17.1/.gitignore +91 -0
  6. nablr-3.17.1/.pre-commit-config.yaml +80 -0
  7. nablr-3.17.1/.python-version +1 -0
  8. nablr-3.17.1/.secrets.baseline +141 -0
  9. nablr-3.17.1/AGENTS.md +274 -0
  10. nablr-3.17.1/CHANGELOG.md +66 -0
  11. nablr-3.17.1/CONTRIBUTING.md +131 -0
  12. nablr-3.17.1/Dockerfile +24 -0
  13. nablr-3.17.1/FEATURES.md +30 -0
  14. nablr-3.17.1/LICENSE +115 -0
  15. nablr-3.17.1/Makefile +54 -0
  16. nablr-3.17.1/PKG-INFO +365 -0
  17. nablr-3.17.1/PUBLISH.md +89 -0
  18. nablr-3.17.1/PYPI_SETUP.md +88 -0
  19. nablr-3.17.1/README.md +330 -0
  20. nablr-3.17.1/WINDOWS_TROUBLESHOOTING.md +154 -0
  21. nablr-3.17.1/codemap/CODE_MAP.md +39 -0
  22. nablr-3.17.1/codemap/src_ref_agents.md +71 -0
  23. nablr-3.17.1/codemap/src_ref_agents_core.md +47 -0
  24. nablr-3.17.1/codemap/src_ref_agents_models.md +45 -0
  25. nablr-3.17.1/codemap/src_ref_agents_prompts.md +42 -0
  26. nablr-3.17.1/codemap/src_ref_agents_security.md +47 -0
  27. nablr-3.17.1/codemap/src_ref_agents_tools.md +97 -0
  28. nablr-3.17.1/codemap/src_ref_agents_tools_browser.md +46 -0
  29. nablr-3.17.1/codemap/src_ref_agents_tools_validators.md +58 -0
  30. nablr-3.17.1/codemap/src_ref_agents_utils.md +44 -0
  31. nablr-3.17.1/codemap/src_ref_agents_workflow.md +44 -0
  32. nablr-3.17.1/demo_security_scan.sh +48 -0
  33. nablr-3.17.1/docs/ARCHITECTURE.md +61 -0
  34. nablr-3.17.1/docs/ARTIFACTS.md +48 -0
  35. nablr-3.17.1/docs/EXTERNAL_DEPS.md +41 -0
  36. nablr-3.17.1/docs/PRODUCT_MODULES.md +196 -0
  37. nablr-3.17.1/docs/REFACTORING_GUARDRAILS.md +189 -0
  38. nablr-3.17.1/docs/TECH_DEBT.md +119 -0
  39. nablr-3.17.1/docs/USER_GUIDE.md +744 -0
  40. nablr-3.17.1/docs/USP.md +187 -0
  41. nablr-3.17.1/docs/VERSIONING.md +88 -0
  42. nablr-3.17.1/docs/operations/PRODUCTION.md +53 -0
  43. nablr-3.17.1/docs/operations/SECURITY.md +194 -0
  44. nablr-3.17.1/docs/requirements/EPIC-002.md +7 -0
  45. nablr-3.17.1/docs/requirements/EPIC-004.md +7 -0
  46. nablr-3.17.1/docs/requirements/EPIC-MIGRATION.md +251 -0
  47. nablr-3.17.1/docs/requirements/EPIC-MON-001.md +7 -0
  48. nablr-3.17.1/docs/requirements/FEAT-003.md +8 -0
  49. nablr-3.17.1/docs/requirements/FEAT-004.md +8 -0
  50. nablr-3.17.1/docs/requirements/FEAT-005.md +8 -0
  51. nablr-3.17.1/docs/requirements/FEAT-006.md +8 -0
  52. nablr-3.17.1/docs/requirements/FEAT-007.md +8 -0
  53. nablr-3.17.1/docs/requirements/REF-ARTIFACT-GATE-001.md +23 -0
  54. nablr-3.17.1/docs/requirements/REF-CODEMAP-001.md +123 -0
  55. nablr-3.17.1/docs/requirements/REF-DOTNET-001.md +346 -0
  56. nablr-3.17.1/docs/requirements/REF-EXEC-CONTRACT-002.md +54 -0
  57. nablr-3.17.1/docs/requirements/REF-PLAYWRIGHT-FIX-001.md +62 -0
  58. nablr-3.17.1/docs/requirements/REF-SM-CLOSE-003.md +19 -0
  59. nablr-3.17.1/docs/requirements/STORY-000-template.md +135 -0
  60. nablr-3.17.1/docs/requirements/STORY-001.md +38 -0
  61. nablr-3.17.1/docs/requirements/STORY-002.md +46 -0
  62. nablr-3.17.1/docs/requirements/STORY-003.md +29 -0
  63. nablr-3.17.1/docs/requirements/STORY-004.md +31 -0
  64. nablr-3.17.1/docs/requirements/STORY-005.md +26 -0
  65. nablr-3.17.1/docs/requirements/STORY-006.md +135 -0
  66. nablr-3.17.1/docs/requirements/STORY-007.md +135 -0
  67. nablr-3.17.1/docs/requirements/STORY-008.md +136 -0
  68. nablr-3.17.1/docs/requirements/STORY-009.md +141 -0
  69. nablr-3.17.1/docs/requirements/STORY-010.md +135 -0
  70. nablr-3.17.1/docs/requirements/STORY-011-ANTI-HALLUCINATION.md +488 -0
  71. nablr-3.17.1/docs/requirements/STORY-011-ARCHITECTURE-OPTIONS.md +311 -0
  72. nablr-3.17.1/docs/requirements/STORY-011-IMPLEMENTATION.md +111 -0
  73. nablr-3.17.1/docs/requirements/STORY-011-PLAYWRIGHT-MCP-ANALYSIS.md +294 -0
  74. nablr-3.17.1/docs/requirements/STORY-011-WORKFLOW.md +204 -0
  75. nablr-3.17.1/docs/requirements/STORY-011.md +354 -0
  76. nablr-3.17.1/docs/requirements/STORY-012.md +160 -0
  77. nablr-3.17.1/docs/requirements/STORY-013.md +210 -0
  78. nablr-3.17.1/docs/requirements/STORY-014.md +219 -0
  79. nablr-3.17.1/docs/requirements/STORY-015.md +264 -0
  80. nablr-3.17.1/docs/requirements/STORY-016.md +221 -0
  81. nablr-3.17.1/docs/requirements/STORY-017.md +211 -0
  82. nablr-3.17.1/docs/requirements/STORY-018.md +146 -0
  83. nablr-3.17.1/docs/requirements/STORY-019.md +147 -0
  84. nablr-3.17.1/docs/requirements/STORY-020.md +148 -0
  85. nablr-3.17.1/docs/requirements/STORY-021.md +60 -0
  86. nablr-3.17.1/docs/requirements/STORY-022.md +49 -0
  87. nablr-3.17.1/docs/requirements/STORY-023.md +42 -0
  88. nablr-3.17.1/docs/requirements/STORY-024.md +38 -0
  89. nablr-3.17.1/docs/requirements/STORY-025.md +40 -0
  90. nablr-3.17.1/docs/requirements/STORY-026.md +38 -0
  91. nablr-3.17.1/docs/requirements/STORY-027.md +38 -0
  92. nablr-3.17.1/docs/requirements/STORY-028.md +36 -0
  93. nablr-3.17.1/docs/requirements/STORY-029.md +38 -0
  94. nablr-3.17.1/docs/requirements/STORY-030.md +36 -0
  95. nablr-3.17.1/docs/requirements/STORY-031.md +39 -0
  96. nablr-3.17.1/docs/requirements/STORY-032.md +36 -0
  97. nablr-3.17.1/docs/requirements/STORY-033.md +36 -0
  98. nablr-3.17.1/docs/requirements/STORY-034.md +40 -0
  99. nablr-3.17.1/docs/requirements/STORY-035.md +39 -0
  100. nablr-3.17.1/docs/requirements/STORY-036.md +39 -0
  101. nablr-3.17.1/docs/requirements/STORY-037.md +35 -0
  102. nablr-3.17.1/docs/requirements/STORY-038.md +39 -0
  103. nablr-3.17.1/docs/requirements/STORY-039.md +48 -0
  104. nablr-3.17.1/docs/requirements/STORY-047.md +28 -0
  105. nablr-3.17.1/docs/requirements/STORY-048.md +39 -0
  106. nablr-3.17.1/docs/requirements/STORY-049.md +23 -0
  107. nablr-3.17.1/docs/requirements/STORY-050.md +27 -0
  108. nablr-3.17.1/docs/requirements/STORY-MON-001.md +49 -0
  109. nablr-3.17.1/docs/requirements/STORY-MON-002.md +67 -0
  110. nablr-3.17.1/docs/requirements/STORY-MON-003.md +79 -0
  111. nablr-3.17.1/docs/requirements/STORY-MON-004.md +74 -0
  112. nablr-3.17.1/docs/requirements/STORY-REF-001.md +44 -0
  113. nablr-3.17.1/docs/requirements/STORY-REF-002.md +53 -0
  114. nablr-3.17.1/docs/requirements/STORY-REF-003.md +50 -0
  115. nablr-3.17.1/docs/requirements/STORY-TQ-001.md +224 -0
  116. nablr-3.17.1/docs/requirements/STORY-TQ-002.md +270 -0
  117. nablr-3.17.1/docs/requirements/STORY-TQ-003.md +232 -0
  118. nablr-3.17.1/docs/runtime_licenses.json +518 -0
  119. nablr-3.17.1/docs/sbom.json +1234 -0
  120. nablr-3.17.1/docs/templates/ADR.md +61 -0
  121. nablr-3.17.1/docs/templates/EPIC-XXX.md +43 -0
  122. nablr-3.17.1/docs/templates/EXTERNAL_APIS.md +68 -0
  123. nablr-3.17.1/docs/templates/FEAT-XXX.md +58 -0
  124. nablr-3.17.1/docs/templates/FLOWS.md +112 -0
  125. nablr-3.17.1/docs/templates/REQ.md +142 -0
  126. nablr-3.17.1/docs/templates/TECH_DEBT.md +129 -0
  127. nablr-3.17.1/docs/templates/handoff_log.jsonl.example +7 -0
  128. nablr-3.17.1/pyproject.toml +81 -0
  129. nablr-3.17.1/scripts/airgap_proof.py +222 -0
  130. nablr-3.17.1/scripts/analyze_metrics.py +73 -0
  131. nablr-3.17.1/scripts/check-format.sh +6 -0
  132. nablr-3.17.1/scripts/generate_sbom.py +222 -0
  133. nablr-3.17.1/scripts/validate_python_version.py +79 -0
  134. nablr-3.17.1/sef-reports/platform_engineer/health_report.md +182 -0
  135. nablr-3.17.1/src/nablr/__init__.py +9 -0
  136. nablr-3.17.1/src/nablr/api_keys.json.example +8 -0
  137. nablr-3.17.1/src/nablr/auth.py +129 -0
  138. nablr-3.17.1/src/nablr/codemap/..md +62 -0
  139. nablr-3.17.1/src/nablr/codemap/CODE_MAP.md +37 -0
  140. nablr-3.17.1/src/nablr/codemap/core.md +43 -0
  141. nablr-3.17.1/src/nablr/codemap/models.md +43 -0
  142. nablr-3.17.1/src/nablr/codemap/prompts.md +40 -0
  143. nablr-3.17.1/src/nablr/codemap/security.md +45 -0
  144. nablr-3.17.1/src/nablr/codemap/tools.md +94 -0
  145. nablr-3.17.1/src/nablr/codemap/tools_browser.md +44 -0
  146. nablr-3.17.1/src/nablr/codemap/utils.md +42 -0
  147. nablr-3.17.1/src/nablr/codemap/workflow.md +42 -0
  148. nablr-3.17.1/src/nablr/config/ai_patterns.yaml +101 -0
  149. nablr-3.17.1/src/nablr/config/frameworks/angular.yaml +104 -0
  150. nablr-3.17.1/src/nablr/config/frameworks/aspnet.yaml +84 -0
  151. nablr-3.17.1/src/nablr/config/frameworks/ef_core.yaml +81 -0
  152. nablr-3.17.1/src/nablr/config/frameworks/react.yaml +111 -0
  153. nablr-3.17.1/src/nablr/config/frameworks/spring_boot.yaml +117 -0
  154. nablr-3.17.1/src/nablr/config/languages/csharp.yaml +153 -0
  155. nablr-3.17.1/src/nablr/config/languages/java.yaml +188 -0
  156. nablr-3.17.1/src/nablr/config/languages/javascript.yaml +172 -0
  157. nablr-3.17.1/src/nablr/config/languages/python.yaml +153 -0
  158. nablr-3.17.1/src/nablr/config/languages/typescript.yaml +193 -0
  159. nablr-3.17.1/src/nablr/constants.py +553 -0
  160. nablr-3.17.1/src/nablr/core/__init__.py +15 -0
  161. nablr-3.17.1/src/nablr/core/config_loader.py +160 -0
  162. nablr-3.17.1/src/nablr/core/config_models.py +167 -0
  163. nablr-3.17.1/src/nablr/core/config_parsing.py +84 -0
  164. nablr-3.17.1/src/nablr/core/language_detector.py +388 -0
  165. nablr-3.17.1/src/nablr/core/validation_models.py +66 -0
  166. nablr-3.17.1/src/nablr/core/validation_primitives.py +176 -0
  167. nablr-3.17.1/src/nablr/errors.py +34 -0
  168. nablr-3.17.1/src/nablr/license_client.py +450 -0
  169. nablr-3.17.1/src/nablr/models/__init__.py +22 -0
  170. nablr-3.17.1/src/nablr/models/gherkin.py +45 -0
  171. nablr-3.17.1/src/nablr/models/hierarchy.py +80 -0
  172. nablr-3.17.1/src/nablr/models/invest.py +59 -0
  173. nablr-3.17.1/src/nablr/models/version.py +49 -0
  174. nablr-3.17.1/src/nablr/prompts/__init__.py +9 -0
  175. nablr-3.17.1/src/nablr/prompts/start_agent.py +772 -0
  176. nablr-3.17.1/src/nablr/rules/architecture/backend_patterns.md +43 -0
  177. nablr-3.17.1/src/nablr/rules/architecture/diagramming.md +100 -0
  178. nablr-3.17.1/src/nablr/rules/architecture/frontend_patterns.md +40 -0
  179. nablr-3.17.1/src/nablr/rules/architecture/impact_analysis.md +144 -0
  180. nablr-3.17.1/src/nablr/rules/architecture/migration_strategy.md +222 -0
  181. nablr-3.17.1/src/nablr/rules/architecture/regression_protocol.md +77 -0
  182. nablr-3.17.1/src/nablr/rules/architecture/system_design.md +112 -0
  183. nablr-3.17.1/src/nablr/rules/common/codemap_standard.md +97 -0
  184. nablr-3.17.1/src/nablr/rules/common/core_protocol.md +59 -0
  185. nablr-3.17.1/src/nablr/rules/common/prompt_engineering.md +294 -0
  186. nablr-3.17.1/src/nablr/rules/development/debugging.md +32 -0
  187. nablr-3.17.1/src/nablr/rules/development/implementation.md +220 -0
  188. nablr-3.17.1/src/nablr/rules/operations/completion.md +119 -0
  189. nablr-3.17.1/src/nablr/rules/operations/cutover_protocol.md +232 -0
  190. nablr-3.17.1/src/nablr/rules/operations/discovery.md +179 -0
  191. nablr-3.17.1/src/nablr/rules/operations/fix_workflow.md +87 -0
  192. nablr-3.17.1/src/nablr/rules/operations/forensics.md +292 -0
  193. nablr-3.17.1/src/nablr/rules/operations/platform.md +263 -0
  194. nablr-3.17.1/src/nablr/rules/operations/synchronous_flow.md +25 -0
  195. nablr-3.17.1/src/nablr/rules/product/ac_validation.md +25 -0
  196. nablr-3.17.1/src/nablr/rules/product/brainstorming.md +27 -0
  197. nablr-3.17.1/src/nablr/rules/product/ref_flow.md +101 -0
  198. nablr-3.17.1/src/nablr/rules/product/requirements_std.md +129 -0
  199. nablr-3.17.1/src/nablr/rules/product/spec_writing.md +250 -0
  200. nablr-3.17.1/src/nablr/rules/product/strategy.md +110 -0
  201. nablr-3.17.1/src/nablr/rules/quality/documentation_standards.md +46 -0
  202. nablr-3.17.1/src/nablr/rules/quality/parity_testing.md +234 -0
  203. nablr-3.17.1/src/nablr/rules/quality/project_documentation.md +56 -0
  204. nablr-3.17.1/src/nablr/rules/quality/qa_lead.md +126 -0
  205. nablr-3.17.1/src/nablr/rules/quality/test_design.md +146 -0
  206. nablr-3.17.1/src/nablr/rules/quality/testing_standards.md +308 -0
  207. nablr-3.17.1/src/nablr/rules/review/pr_review.md +131 -0
  208. nablr-3.17.1/src/nablr/rules/security/security_audit.md +98 -0
  209. nablr-3.17.1/src/nablr/security/__init__.py +22 -0
  210. nablr-3.17.1/src/nablr/security/dependency_audit.py +188 -0
  211. nablr-3.17.1/src/nablr/security/file_audit.py +208 -0
  212. nablr-3.17.1/src/nablr/security/network_scan.py +179 -0
  213. nablr-3.17.1/src/nablr/security/report_generator.py +313 -0
  214. nablr-3.17.1/src/nablr/security/secret_scan.py +252 -0
  215. nablr-3.17.1/src/nablr/security/url_scan.py +240 -0
  216. nablr-3.17.1/src/nablr/security_scan.py +236 -0
  217. nablr-3.17.1/src/nablr/server.py +1639 -0
  218. nablr-3.17.1/src/nablr/session.py +100 -0
  219. nablr-3.17.1/src/nablr/tool_names.py +55 -0
  220. nablr-3.17.1/src/nablr/tools/__init__.py +8 -0
  221. nablr-3.17.1/src/nablr/tools/agents_generator.py +315 -0
  222. nablr-3.17.1/src/nablr/tools/ai_pattern_detector.py +815 -0
  223. nablr-3.17.1/src/nablr/tools/brownfield_populator.py +529 -0
  224. nablr-3.17.1/src/nablr/tools/browser/__init__.py +50 -0
  225. nablr-3.17.1/src/nablr/tools/browser/evidence_verifier.py +302 -0
  226. nablr-3.17.1/src/nablr/tools/browser/execution_logger.py +249 -0
  227. nablr-3.17.1/src/nablr/tools/browser/playwright_mcp_client.py +259 -0
  228. nablr-3.17.1/src/nablr/tools/browser/screenshot_utils.py +184 -0
  229. nablr-3.17.1/src/nablr/tools/browser/test_executor.py +537 -0
  230. nablr-3.17.1/src/nablr/tools/code_quality_scanner.py +629 -0
  231. nablr-3.17.1/src/nablr/tools/codemap/..md +93 -0
  232. nablr-3.17.1/src/nablr/tools/codemap/CODE_MAP.md +30 -0
  233. nablr-3.17.1/src/nablr/tools/codemap/browser.md +44 -0
  234. nablr-3.17.1/src/nablr/tools/codemap.py +403 -0
  235. nablr-3.17.1/src/nablr/tools/codemap_freshness.py +234 -0
  236. nablr-3.17.1/src/nablr/tools/comment_smell_scanner.py +346 -0
  237. nablr-3.17.1/src/nablr/tools/complexity.py +436 -0
  238. nablr-3.17.1/src/nablr/tools/complexity_ast.py +333 -0
  239. nablr-3.17.1/src/nablr/tools/compliance.py +246 -0
  240. nablr-3.17.1/src/nablr/tools/compliance_remediation.py +846 -0
  241. nablr-3.17.1/src/nablr/tools/context_graph.py +839 -0
  242. nablr-3.17.1/src/nablr/tools/context_manager.py +550 -0
  243. nablr-3.17.1/src/nablr/tools/context_tools.py +121 -0
  244. nablr-3.17.1/src/nablr/tools/cross_repo_linker.py +393 -0
  245. nablr-3.17.1/src/nablr/tools/dead_code_scanner.py +637 -0
  246. nablr-3.17.1/src/nablr/tools/debt_scanner.py +1092 -0
  247. nablr-3.17.1/src/nablr/tools/dependency_graph.py +272 -0
  248. nablr-3.17.1/src/nablr/tools/discovery_audit.py +372 -0
  249. nablr-3.17.1/src/nablr/tools/docs_scanner.py +600 -0
  250. nablr-3.17.1/src/nablr/tools/evaluate_gate.py +119 -0
  251. nablr-3.17.1/src/nablr/tools/external_detector.py +524 -0
  252. nablr-3.17.1/src/nablr/tools/features_generator.py +282 -0
  253. nablr-3.17.1/src/nablr/tools/flow_gap_detector.py +373 -0
  254. nablr-3.17.1/src/nablr/tools/flow_mapper.py +327 -0
  255. nablr-3.17.1/src/nablr/tools/full_suite_runner.py +740 -0
  256. nablr-3.17.1/src/nablr/tools/gherkin_parser.py +227 -0
  257. nablr-3.17.1/src/nablr/tools/guard_tools.py +139 -0
  258. nablr-3.17.1/src/nablr/tools/handoff_tools.py +282 -0
  259. nablr-3.17.1/src/nablr/tools/health_scanner.py +1211 -0
  260. nablr-3.17.1/src/nablr/tools/hierarchy_manager.py +295 -0
  261. nablr-3.17.1/src/nablr/tools/invest_scorer.py +249 -0
  262. nablr-3.17.1/src/nablr/tools/jira_confluence_export.py +306 -0
  263. nablr-3.17.1/src/nablr/tools/json_output.py +76 -0
  264. nablr-3.17.1/src/nablr/tools/migration_mapper.py +946 -0
  265. nablr-3.17.1/src/nablr/tools/migration_readiness_scanner.py +209 -0
  266. nablr-3.17.1/src/nablr/tools/pattern_learner.py +522 -0
  267. nablr-3.17.1/src/nablr/tools/report_utils.py +155 -0
  268. nablr-3.17.1/src/nablr/tools/requirements_serializer.py +225 -0
  269. nablr-3.17.1/src/nablr/tools/security_audit_tool.py +106 -0
  270. nablr-3.17.1/src/nablr/tools/sequencing_engine.py +288 -0
  271. nablr-3.17.1/src/nablr/tools/summary_generator.py +275 -0
  272. nablr-3.17.1/src/nablr/tools/symbol_resolver.py +306 -0
  273. nablr-3.17.1/src/nablr/tools/symbol_smoke_runner.py +336 -0
  274. nablr-3.17.1/src/nablr/tools/test_plan_validator.py +189 -0
  275. nablr-3.17.1/src/nablr/tools/test_smell_walker.py +902 -0
  276. nablr-3.17.1/src/nablr/tools/tier1_fixer.py +502 -0
  277. nablr-3.17.1/src/nablr/tools/validators/__init__.py +419 -0
  278. nablr-3.17.1/src/nablr/tools/validators/architect.py +268 -0
  279. nablr-3.17.1/src/nablr/tools/validators/cutover_engineer.py +167 -0
  280. nablr-3.17.1/src/nablr/tools/validators/developer.py +180 -0
  281. nablr-3.17.1/src/nablr/tools/validators/discovery.py +150 -0
  282. nablr-3.17.1/src/nablr/tools/validators/forensic_engineer.py +191 -0
  283. nablr-3.17.1/src/nablr/tools/validators/impact_architect.py +181 -0
  284. nablr-3.17.1/src/nablr/tools/validators/migration_planner.py +166 -0
  285. nablr-3.17.1/src/nablr/tools/validators/parity_tester.py +155 -0
  286. nablr-3.17.1/src/nablr/tools/validators/platform_engineer.py +134 -0
  287. nablr-3.17.1/src/nablr/tools/validators/pr_reviewer.py +129 -0
  288. nablr-3.17.1/src/nablr/tools/validators/product_manager.py +291 -0
  289. nablr-3.17.1/src/nablr/tools/validators/qa_lead.py +172 -0
  290. nablr-3.17.1/src/nablr/tools/validators/scrum_master.py +212 -0
  291. nablr-3.17.1/src/nablr/tools/validators/security_owner.py +162 -0
  292. nablr-3.17.1/src/nablr/tools/validators/specifier.py +134 -0
  293. nablr-3.17.1/src/nablr/tools/validators/strategist.py +149 -0
  294. nablr-3.17.1/src/nablr/tools/validators/tester.py +121 -0
  295. nablr-3.17.1/src/nablr/tools/version_manager.py +202 -0
  296. nablr-3.17.1/src/nablr/tools/workflow_tools.py +1549 -0
  297. nablr-3.17.1/src/nablr/utils/__init__.py +21 -0
  298. nablr-3.17.1/src/nablr/utils/git_utils.py +365 -0
  299. nablr-3.17.1/src/nablr/utils/handoff_logger.py +368 -0
  300. nablr-3.17.1/src/nablr/utils/ignore_matcher.py +270 -0
  301. nablr-3.17.1/src/nablr/workflow/__init__.py +19 -0
  302. nablr-3.17.1/src/nablr/workflow/capabilities.py +328 -0
  303. nablr-3.17.1/src/nablr/workflow/state_machine.py +708 -0
  304. nablr-3.17.1/src/nablr/workflow/transitions.py +658 -0
  305. nablr-3.17.1/tests/conftest.py +18 -0
  306. nablr-3.17.1/tests/test_ai_pattern_detector.py +557 -0
  307. nablr-3.17.1/tests/test_airgap_proof.py +32 -0
  308. nablr-3.17.1/tests/test_auth.py +108 -0
  309. nablr-3.17.1/tests/test_auth_routing.py +61 -0
  310. nablr-3.17.1/tests/test_brownfield_populator.py +263 -0
  311. nablr-3.17.1/tests/test_codemap_enforcement.py +139 -0
  312. nablr-3.17.1/tests/test_codemap_freshness.py +410 -0
  313. nablr-3.17.1/tests/test_comment_smell_scanner.py +299 -0
  314. nablr-3.17.1/tests/test_config_loader.py +293 -0
  315. nablr-3.17.1/tests/test_context_graph.py +385 -0
  316. nablr-3.17.1/tests/test_context_graph_storage.py +133 -0
  317. nablr-3.17.1/tests/test_context_graph_tools.py +168 -0
  318. nablr-3.17.1/tests/test_context_manager.py +417 -0
  319. nablr-3.17.1/tests/test_cross_repo_linker.py +277 -0
  320. nablr-3.17.1/tests/test_cutover_engineer.py +235 -0
  321. nablr-3.17.1/tests/test_dead_code_scanner.py +367 -0
  322. nablr-3.17.1/tests/test_debt_scanner.py +577 -0
  323. nablr-3.17.1/tests/test_dependency_graph.py +241 -0
  324. nablr-3.17.1/tests/test_dotnet_support.py +810 -0
  325. nablr-3.17.1/tests/test_evaluate_gate.py +201 -0
  326. nablr-3.17.1/tests/test_external_detector.py +311 -0
  327. nablr-3.17.1/tests/test_flow_gap_detector.py +371 -0
  328. nablr-3.17.1/tests/test_flow_mapper.py +332 -0
  329. nablr-3.17.1/tests/test_full_suite_runner.py +467 -0
  330. nablr-3.17.1/tests/test_gherkin_parser.py +170 -0
  331. nablr-3.17.1/tests/test_greenfield_integration.py +78 -0
  332. nablr-3.17.1/tests/test_invest_scorer.py +162 -0
  333. nablr-3.17.1/tests/test_json_serialization.py +162 -0
  334. nablr-3.17.1/tests/test_language_detector.py +249 -0
  335. nablr-3.17.1/tests/test_license_client_mon004.py +492 -0
  336. nablr-3.17.1/tests/test_license_client_trial.py +163 -0
  337. nablr-3.17.1/tests/test_main.py +858 -0
  338. nablr-3.17.1/tests/test_migration_mapper.py +859 -0
  339. nablr-3.17.1/tests/test_migration_planner.py +229 -0
  340. nablr-3.17.1/tests/test_migration_readiness_scanner.py +389 -0
  341. nablr-3.17.1/tests/test_parity_tester.py +225 -0
  342. nablr-3.17.1/tests/test_pattern_learner.py +625 -0
  343. nablr-3.17.1/tests/test_project_path_resolution.py +352 -0
  344. nablr-3.17.1/tests/test_prompts.py +145 -0
  345. nablr-3.17.1/tests/test_python_version_validation.py +99 -0
  346. nablr-3.17.1/tests/test_security_scan.py +247 -0
  347. nablr-3.17.1/tests/test_semantic_self_check_gates.py +162 -0
  348. nablr-3.17.1/tests/test_semantic_self_check_gates_wave2.py +244 -0
  349. nablr-3.17.1/tests/test_semantic_self_check_gates_wave3.py +277 -0
  350. nablr-3.17.1/tests/test_sequencing_engine.py +230 -0
  351. nablr-3.17.1/tests/test_summary_generator.py +241 -0
  352. nablr-3.17.1/tests/test_symbol_drift_gate.py +210 -0
  353. nablr-3.17.1/tests/test_symbol_resolver.py +236 -0
  354. nablr-3.17.1/tests/test_symbol_smoke_runner.py +317 -0
  355. nablr-3.17.1/tests/test_test_plan_validator.py +231 -0
  356. nablr-3.17.1/tests/test_test_smell_m1b.py +316 -0
  357. nablr-3.17.1/tests/test_test_smell_walker.py +411 -0
  358. nablr-3.17.1/tests/test_validation_primitives.py +147 -0
  359. nablr-3.17.1/tests/test_validator_architect.py +121 -0
  360. nablr-3.17.1/tests/test_validator_cutover_engineer.py +97 -0
  361. nablr-3.17.1/tests/test_validator_developer.py +99 -0
  362. nablr-3.17.1/tests/test_validator_discovery.py +71 -0
  363. nablr-3.17.1/tests/test_validator_forensic_engineer.py +109 -0
  364. nablr-3.17.1/tests/test_validator_impact_architect.py +99 -0
  365. nablr-3.17.1/tests/test_validator_migration_planner.py +79 -0
  366. nablr-3.17.1/tests/test_validator_parity_tester.py +88 -0
  367. nablr-3.17.1/tests/test_validator_platform_engineer.py +71 -0
  368. nablr-3.17.1/tests/test_validator_pr_reviewer.py +127 -0
  369. nablr-3.17.1/tests/test_validator_product_manager.py +171 -0
  370. nablr-3.17.1/tests/test_validator_qa_lead.py +143 -0
  371. nablr-3.17.1/tests/test_validator_scrum_master.py +182 -0
  372. nablr-3.17.1/tests/test_validator_security_owner.py +89 -0
  373. nablr-3.17.1/tests/test_validator_specifier.py +85 -0
  374. nablr-3.17.1/tests/test_validator_state_machine.py +154 -0
  375. nablr-3.17.1/tests/test_validator_strategist.py +101 -0
  376. nablr-3.17.1/tests/test_validator_tester.py +66 -0
  377. nablr-3.17.1/tests/test_validators_dispatcher.py +99 -0
  378. nablr-3.17.1/tests/test_workflow.py +1064 -0
  379. nablr-3.17.1/uv.lock +2178 -0
@@ -0,0 +1,12 @@
1
+ __pycache__
2
+ *.pyc
3
+ .git
4
+ .venv
5
+ tests/
6
+ .pytest_cache/
7
+ .cursor/
8
+ docs/reports/
9
+
10
+ # Documentation Iterations
11
+ GAP_ANALYSIS.md
12
+ docs/misc/
@@ -0,0 +1,108 @@
1
+ name: Elite Quality Pipeline
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ # STAGE 1: LINT
11
+ lint:
12
+ name: 1. Lint & Static Analysis
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: astral-sh/setup-uv@v5
17
+ with:
18
+ enable-cache: true
19
+ - name: Set up Python
20
+ run: uv python install
21
+ - name: Validate Python Version
22
+ run: uv run python scripts/validate_python_version.py
23
+ - name: Install Dependencies
24
+ run: uv sync --all-extras --dev
25
+ - name: Lint (Ruff)
26
+ run: uv run ruff check .
27
+ - name: Format Check (Ruff)
28
+ run: uv run ruff format --check .
29
+
30
+ # STAGE 2: SECURITY
31
+ security:
32
+ name: 2. Security Scan
33
+ runs-on: ubuntu-latest
34
+ needs: lint
35
+ steps:
36
+ - uses: actions/checkout@v4
37
+ - uses: astral-sh/setup-uv@v5
38
+ with:
39
+ enable-cache: true
40
+ - name: Set up Python
41
+ run: uv python install
42
+ - name: Install Dependencies
43
+ run: uv sync --all-extras --dev
44
+ - name: Secrets Scan (detect-secrets)
45
+ run: |
46
+ uv tool install detect-secrets
47
+ uv tool run detect-secrets scan --baseline .secrets.baseline .
48
+ - name: Dependency Audit (pip-audit)
49
+ run: |
50
+ uv tool install pip-audit
51
+ uv tool run pip-audit .
52
+ - name: Policy Scan (make audit)
53
+ run: |
54
+ uv run python -m nablr.security_scan --format json
55
+
56
+ # STAGE 3: TEST
57
+ test:
58
+ name: 3. Test & Coverage
59
+ runs-on: ubuntu-latest
60
+ needs: security
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+ - uses: astral-sh/setup-uv@v5
64
+ with:
65
+ enable-cache: true
66
+ - name: Set up Python
67
+ run: uv python install
68
+ - name: Install Dependencies
69
+ run: uv sync --all-extras --dev
70
+ - name: Run Tests (Pytest)
71
+ run: uv run pytest --cov=src/nablr --cov-report=xml --cov-fail-under=0
72
+
73
+ # STAGE 4: BUILD
74
+ build:
75
+ name: 4. Build Artifacts
76
+ runs-on: ubuntu-latest
77
+ needs: test
78
+ steps:
79
+ - uses: actions/checkout@v4
80
+ - uses: astral-sh/setup-uv@v5
81
+ with:
82
+ enable-cache: true
83
+ - name: Set up Python
84
+ run: uv python install
85
+ - name: Build Wheel & Sdist
86
+ run: uv build
87
+ - name: Archive Artifacts
88
+ uses: actions/upload-artifact@v4
89
+ with:
90
+ name: python-package-dist
91
+ path: dist/
92
+
93
+ # STAGE 5: DEPLOY (Dry Run)
94
+ deploy:
95
+ name: 5. Deploy (Dry Run)
96
+ runs-on: ubuntu-latest
97
+ needs: build
98
+ if: github.ref == 'refs/heads/main'
99
+ steps:
100
+ - uses: actions/download-artifact@v4
101
+ with:
102
+ name: python-package-dist
103
+ path: dist/
104
+ - name: Simulate Deployment
105
+ run: |
106
+ echo "🚀 SIMULATING DEPLOYMENT..."
107
+ ls -R dist/
108
+ echo "✅ Ready to publish to PyPI"
@@ -0,0 +1,46 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ jobs:
9
+ pypi-publish:
10
+ name: Upload release to PyPI
11
+ runs-on: ubuntu-latest
12
+ environment:
13
+ name: pypi
14
+ url: https://pypi.org/p/nablr
15
+ permissions:
16
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
17
+ contents: read # Required to checkout the repository
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ with:
21
+ fetch-depth: 0 # Fetch full history for tags
22
+
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v5
25
+ with:
26
+ version: "0.5.5"
27
+
28
+ - name: Build package
29
+ run: uv build
30
+
31
+ - name: Version Consistency Check
32
+ run: |
33
+ TAG_VERSION=${GITHUB_REF#refs/tags/v}
34
+ PYPROJECT_VERSION=$(grep -m 1 'version =' pyproject.toml | cut -d '"' -f 2)
35
+ echo "Tag: $TAG_VERSION"
36
+ echo "PyProject: $PYPROJECT_VERSION"
37
+ if [ "$TAG_VERSION" != "$PYPROJECT_VERSION" ]; then
38
+ echo "Error: Version mismatch! Tag is $TAG_VERSION but pyproject.toml is $PYPROJECT_VERSION"
39
+ exit 1
40
+ fi
41
+
42
+ - name: Check Metadata (Twine)
43
+ run: uv tool run twine check dist/*
44
+
45
+ - name: Publish package distributions to PyPI
46
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,51 @@
1
+ name: Security Scan
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ security-scan:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Install uv
18
+ uses: astral-sh/setup-uv@v4
19
+ with:
20
+ version: "latest"
21
+
22
+ - name: Set up Python
23
+ run: uv python install 3.13
24
+
25
+ - name: Install dependencies
26
+ run: uv sync
27
+
28
+ - name: Run Security Scan
29
+ run: uv run python -m nablr.security_scan --format json > security_results.json
30
+
31
+ - name: Check Security Results
32
+ run: |
33
+ if grep -q '"passed": false' security_results.json; then
34
+ echo "❌ Security scan failed!"
35
+ cat security_results.json
36
+ exit 1
37
+ else
38
+ echo "✅ Security scan passed!"
39
+ cat security_results.json
40
+ fi
41
+
42
+ - name: Upload Security Report
43
+ if: always()
44
+ uses: actions/upload-artifact@v4
45
+ with:
46
+ name: security-report
47
+ path: ref-reports/security/
48
+ if-no-files-found: ignore
49
+
50
+ - name: Run Tests
51
+ run: uv run pytest tests/test_security_scan.py -v
@@ -0,0 +1,91 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Test artifacts
13
+ .coverage
14
+ coverage.xml
15
+ htmlcov/
16
+
17
+ # Caches & IDEs
18
+ .cursor/
19
+ .idea/
20
+ .pytest_cache/
21
+ .mypy_cache/
22
+ .ruff_cache/
23
+ .DS_Store
24
+ .agent/
25
+ .ref_cache/
26
+
27
+ # MCP runtime logs (created in client project roots, not in ref-agents repo)
28
+ handoff_log.jsonl
29
+
30
+ # Session working files (ephemeral, not part of package)
31
+ tasks/
32
+ CLAUDE.md
33
+
34
+ # Documentation Iterations
35
+ GAP_ANALYSIS.md
36
+ docs/misc/
37
+ docs/pitch-deck/
38
+
39
+ # Research / presentation docs (not part of the package)
40
+ docs/ARXIV_SUBMISSION_GUIDE.md
41
+ docs/CONSOLE_SCREENS.md
42
+ docs/CONTEXT_CODEBASE_DIAGRAM.md
43
+ docs/RESEARCH_POTENTIAL.md
44
+
45
+ # Optional Documentation (not required for ref-agents runtime)
46
+ docs/architecture/
47
+ docs/design/
48
+ docs/features/
49
+ docs/guides/
50
+ docs/process/
51
+ docs/product/
52
+ docs/requirements/README.md
53
+ docs/requirements/FLOW_DIAGRAM.md
54
+
55
+ # Security Reports
56
+ bandit-report.json
57
+ pip-audit-report.json
58
+ *.json
59
+
60
+ # Committed supply-chain artifacts (regenerated via scripts/generate_sbom.py).
61
+ # NOTE: must override the blanket *.json ignore above — these ship as evidence.
62
+ !docs/sbom.json
63
+ !docs/runtime_licenses.json
64
+
65
+ # Generated Reports (auto-generated by agents, not needed in package)
66
+ ref-reports/
67
+ docs/project_status.md
68
+
69
+ # Per-story lifecycle artifacts (generated by REF agents, not permanent docs)
70
+ docs/analysis/
71
+ docs/closure/
72
+ docs/specs/
73
+ docs/test_repo/
74
+
75
+ # Playwright MCP cache
76
+ .playwright-mcp/
77
+
78
+ # Binary / exported assets (not source artifacts)
79
+ docs/*.html
80
+ docs/*.jpeg
81
+ docs/*.jpg
82
+ docs/*.png
83
+
84
+ # API Keys (never commit)
85
+ api_keys.json
86
+ src/ref_agents/api_keys.json
87
+ /docs/superpowers_concept_integration.txt
88
+ /docs/COMPLIANCE_METRICS.md
89
+ /docs/MARKETING_STORYBOARD.md
90
+ /docs/METRICS_SUMMARY.md
91
+ /docs/MIGRATION_MAP.md
@@ -0,0 +1,80 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.14.10
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix, --exit-non-zero-on-fix]
7
+ - id: ruff-format
8
+
9
+ - repo: https://github.com/pre-commit/pre-commit-hooks
10
+ rev: v5.0.0
11
+ hooks:
12
+ - id: check-added-large-files
13
+ args: ['--maxkb=500']
14
+ - id: check-merge-conflict
15
+ - id: end-of-file-fixer
16
+ - id: trailing-whitespace
17
+ - id: check-yaml
18
+ - id: check-json
19
+ - id: check-toml
20
+
21
+ - repo: local
22
+ hooks:
23
+ - id: detect-secrets
24
+ name: detect-secrets (Audit)
25
+ entry: bash -c 'NEW_SECRETS=$(uv run detect-secrets scan . 2>/dev/null | uv run detect-secrets audit --diff --baseline .secrets.baseline - 2>/dev/null | grep -c "Secret Type" || true); [ "$NEW_SECRETS" -gt 0 ] && echo "❌ $NEW_SECRETS new secrets detected!" && exit 1 || echo "✅ No new secrets"'
26
+ language: system
27
+ pass_filenames: false
28
+ always_run: true
29
+
30
+ - id: bandit
31
+ name: bandit (SAST)
32
+ entry: bash -c 'uv run bandit -r src/ -f json -o bandit-report.json --exit-zero && uv run python -c "import json, sys; d=json.load(open(\"bandit-report.json\")); hc=[r for r in d.get(\"results\",[]) if r.get(\"issue_severity\") in [\"HIGH\",\"CRITICAL\"]]; sys.exit(1 if hc else 0)"'
33
+ language: system
34
+ pass_filenames: false
35
+ always_run: true
36
+
37
+ - id: pip-audit
38
+ name: pip-audit (Dependencies)
39
+ entry: bash -c 'uv run pip-audit . --desc --format json --output pip-audit-report.json 2>/dev/null || true; grep -qE "severity.*CRITICAL|severity.*HIGH" pip-audit-report.json 2>/dev/null && echo "❌ CRITICAL/HIGH vulnerabilities!" && exit 1 || echo "✅ Dependencies safe"'
40
+ language: system
41
+ pass_filenames: false
42
+ always_run: true
43
+
44
+
45
+ - repo: local
46
+ hooks:
47
+ - id: check-policy
48
+ name: Policy Scan (Security/License/URL)
49
+ entry: uv run python -m nablr.security_scan --no-report
50
+ language: system
51
+ pass_filenames: false
52
+ always_run: true
53
+
54
+ - id: check-lock
55
+ name: Check usage of uv.lock
56
+ entry: uv lock --check
57
+ language: system
58
+ pass_filenames: false
59
+ always_run: true
60
+
61
+ - id: pytest-collect
62
+ name: pytest (Test Collection & Import Check)
63
+ entry: bash -c 'uv run pytest --collect-only -q || (echo "❌ Test collection failed - fix imports before committing" && exit 1)'
64
+ language: system
65
+ pass_filenames: false
66
+ always_run: true
67
+
68
+ - id: pytest-fast
69
+ name: pytest (Fast Smoke Tests - Stop on First Failure)
70
+ entry: bash -c 'uv run pytest -x --maxfail=1 -q || (echo "❌ Tests failed - fix before committing" && exit 1)'
71
+ language: system
72
+ pass_filenames: false
73
+ always_run: true
74
+
75
+ - id: ruff-format-validate-all
76
+ name: Validate all files are formatted
77
+ entry: bash scripts/check-format.sh
78
+ language: system
79
+ pass_filenames: false
80
+ always_run: true
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,141 @@
1
+ {
2
+ "version": "1.5.0",
3
+ "plugins_used": [
4
+ {
5
+ "name": "ArtifactoryDetector"
6
+ },
7
+ {
8
+ "name": "AWSKeyDetector"
9
+ },
10
+ {
11
+ "name": "AzureStorageKeyDetector"
12
+ },
13
+ {
14
+ "name": "Base64HighEntropyString",
15
+ "limit": 4.5
16
+ },
17
+ {
18
+ "name": "BasicAuthDetector"
19
+ },
20
+ {
21
+ "name": "CloudantDetector"
22
+ },
23
+ {
24
+ "name": "DiscordBotTokenDetector"
25
+ },
26
+ {
27
+ "name": "GitHubTokenDetector"
28
+ },
29
+ {
30
+ "name": "GitLabTokenDetector"
31
+ },
32
+ {
33
+ "name": "HexHighEntropyString",
34
+ "limit": 3.0
35
+ },
36
+ {
37
+ "name": "IbmCloudIamDetector"
38
+ },
39
+ {
40
+ "name": "IbmCosHmacDetector"
41
+ },
42
+ {
43
+ "name": "IPPublicDetector"
44
+ },
45
+ {
46
+ "name": "JwtTokenDetector"
47
+ },
48
+ {
49
+ "name": "KeywordDetector",
50
+ "keyword_exclude": ""
51
+ },
52
+ {
53
+ "name": "MailchimpDetector"
54
+ },
55
+ {
56
+ "name": "NpmDetector"
57
+ },
58
+ {
59
+ "name": "OpenAIDetector"
60
+ },
61
+ {
62
+ "name": "PrivateKeyDetector"
63
+ },
64
+ {
65
+ "name": "PypiTokenDetector"
66
+ },
67
+ {
68
+ "name": "SendGridDetector"
69
+ },
70
+ {
71
+ "name": "SlackDetector"
72
+ },
73
+ {
74
+ "name": "SoftlayerDetector"
75
+ },
76
+ {
77
+ "name": "SquareOAuthDetector"
78
+ },
79
+ {
80
+ "name": "StripeDetector"
81
+ },
82
+ {
83
+ "name": "TelegramBotTokenDetector"
84
+ },
85
+ {
86
+ "name": "TwilioKeyDetector"
87
+ }
88
+ ],
89
+ "filters_used": [
90
+ {
91
+ "path": "detect_secrets.filters.allowlist.is_line_allowlisted"
92
+ },
93
+ {
94
+ "path": "detect_secrets.filters.common.is_baseline_file",
95
+ "filename": ".secrets.baseline"
96
+ },
97
+ {
98
+ "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
99
+ "min_level": 2
100
+ },
101
+ {
102
+ "path": "detect_secrets.filters.heuristic.is_indirect_reference"
103
+ },
104
+ {
105
+ "path": "detect_secrets.filters.heuristic.is_likely_id_string"
106
+ },
107
+ {
108
+ "path": "detect_secrets.filters.heuristic.is_lock_file"
109
+ },
110
+ {
111
+ "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string"
112
+ },
113
+ {
114
+ "path": "detect_secrets.filters.heuristic.is_potential_uuid"
115
+ },
116
+ {
117
+ "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign"
118
+ },
119
+ {
120
+ "path": "detect_secrets.filters.heuristic.is_sequential_string"
121
+ },
122
+ {
123
+ "path": "detect_secrets.filters.heuristic.is_swagger_file"
124
+ },
125
+ {
126
+ "path": "detect_secrets.filters.heuristic.is_templated_secret"
127
+ }
128
+ ],
129
+ "results": {
130
+ "Makefile": [
131
+ {
132
+ "type": "Secret Keyword",
133
+ "filename": "Makefile",
134
+ "hashed_secret": "e441659cd1b30148c99024a81228d16b63f772af",
135
+ "is_verified": false,
136
+ "line_number": 26
137
+ }
138
+ ]
139
+ },
140
+ "generated_at": "2025-12-26T12:10:33Z"
141
+ }