Scan timing: clone 2.51s · analysis 2.16s · 3.2 MB · GitHub API rate-limit (preflight)
https://github.com/antoinezambelli/forge.git
· scanned 2026-05-21 14:10 UTC (2 weeks ago)
· 10 languages
138 findings (80 legacy + 58 scanner) 99th percentile · Python · medium (20-100K LoC) Scanner says 96 (lower by 5)
Last scanned 2 weeks ago · v2 · 109 findings from 2 sources. Findings combine the legacy security pipeline AND the multi-layer engine (atlas, wiring, flows, ranked) AND verified AI agent contributions.
| Component | Sub-score | Weight | Contribution |
|---|---|---|---|
structure_score |
100.0 | 0.15 | 15.00 |
security_score |
100.0 | 0.25 | 25.00 |
testing_score |
100.0 | 0.20 | 20.00 |
documentation_score |
100.0 | 0.15 | 15.00 |
practices_score |
75.0 | 0.15 | 11.25 |
code_quality |
43.1 | 0.10 | 4.31 |
| Overall | 1.00 | 90.6 |
All 1924 nodes from the latest scan, grouped by kind. Each node is a unit the engine identified (file, function, endpoint, table…). Most users won't need this view — it's primarily for debugging the engine's graph extraction or for AI agents that want to enumerate the project structure.
| Label | Layer | Status | Path |
|---|---|---|---|
test_initial_state |
software | healthy | tests/unit/test_error_tracker.py:36 |
test_record_and_exhaust |
software | healthy | tests/unit/test_error_tracker.py:41 |
test_reset_retries |
software | healthy | tests/unit/test_error_tracker.py:23 |
test_soft_error_does_not_count |
software | healthy | tests/unit/test_error_tracker.py:48 |
test_success_does_not_reset_counter |
software | healthy | tests/unit/test_error_tracker.py:56 |
test_reset_errors |
software | healthy | tests/unit/test_error_tracker.py:63 |
test_retry_does_not_affect_tool_errors |
software | healthy | tests/unit/test_error_tracker.py:76 |
test_tool_error_does_not_affect_retries |
software | healthy | tests/unit/test_error_tracker.py:83 |
test_returns_non_empty_string |
software | healthy | tests/unit/test_nudges.py:69 |
test_does_not_echo_raw_response |
software | healthy | tests/unit/test_nudges.py:12 |
test_mentions_tool_call |
software | healthy | tests/unit/test_nudges.py:17 |
test_contains_terminal_tool_name |
software | healthy | tests/unit/test_nudges.py:28 |
test_contains_pending_steps |
software | healthy | tests/unit/test_nudges.py:32 |
test_single_pending_step |
software | healthy | tests/unit/test_nudges.py:37 |
test_tier1_is_default |
software | healthy | tests/unit/test_nudges.py:41 |
test_tier2_direct |
software | healthy | tests/unit/test_nudges.py:45 |
test_tier3_aggressive |
software | healthy | tests/unit/test_nudges.py:51 |
test_tier_clamped_below |
software | healthy | tests/unit/test_nudges.py:57 |
test_tier_clamped_above |
software | healthy | tests/unit/test_nudges.py:62 |
test_contains_tool_name |
software | healthy | tests/unit/test_nudges.py:74 |
test_contains_missing_prereqs |
software | healthy | tests/unit/test_nudges.py:78 |
test_single_missing_prereq |
software | healthy | tests/unit/test_nudges.py:83 |
__init__ |
software | healthy | tests/unit/test_runner.py:43 |
_next |
software | healthy | tests/unit/test_runner.py:49 |
send |
software | healthy | tests/unit/test_runner.py:782 |
send_stream |
software | healthy | tests/unit/test_runner.py:785 |
get_context_length |
software | healthy | tests/unit/test_runner.py:788 |
_make_tool |
software | healthy | tests/unit/test_runner.py:80 |
_make_workflow |
software | healthy | tests/unit/test_runner.py:90 |
_make_runner |
software | healthy | tests/unit/test_runner.py:113 |
test_simple_workflow |
software | healthy | tests/unit/test_runner.py:140 |
test_multi_step_workflow |
software | healthy | tests/unit/test_runner.py:151 |
test_tool_args_forwarded |
software | healthy | tests/unit/test_runner.py:169 |
capture_tool |
software | healthy | tests/unit/test_runner.py:1061 |
test_text_response_triggers_retry |
software | healthy | tests/unit/test_runner.py:196 |
test_retries_exhausted_raises_tool_call_error |
software | healthy | tests/unit/test_runner.py:208 |
test_retry_counter_resets_on_tool_call |
software | healthy | tests/unit/test_runner.py:222 |
test_retries_consume_iterations |
software | healthy | tests/unit/test_runner.py:247 |
test_max_iterations_bounds_total_llm_calls |
software | healthy | tests/unit/test_runner.py:262 |
test_terminal_before_required_steps_injects_nudge |
software | healthy | tests/unit/test_runner.py:281 |
counting_submit |
software | healthy | tests/unit/test_runner.py:285 |
test_premature_terminal_resets_retry_counter |
software | healthy | tests/unit/test_runner.py:307 |
test_step_nudge_allows_recovery |
software | healthy | tests/unit/test_runner.py:324 |
test_escalating_nudge_tiers |
software | healthy | tests/unit/test_runner.py:336 |
spy_compact |
software | healthy | tests/unit/test_runner.py:1241 |
test_premature_terminal_exhausted_raises_step_enforcement_e… |
software | healthy | tests/unit/test_runner.py:375 |
test_premature_terminal_counter_resets_on_progress |
software | healthy | tests/unit/test_runner.py:391 |
test_unknown_tool_nudges_then_recovers |
software | healthy | tests/unit/test_runner.py:416 |
test_unknown_tool_nudge_lists_available_tools |
software | healthy | tests/unit/test_runner.py:428 |
test_unknown_tool_consumes_iteration |
software | healthy | tests/unit/test_runner.py:447 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
TestErrorTrackerRetries |
software | healthy | tests/unit/test_error_tracker.py:6 |
TestErrorTrackerToolErrors |
software | healthy | tests/unit/test_error_tracker.py:33 |
TestErrorTrackerIndependence |
software | healthy | tests/unit/test_error_tracker.py:73 |
TestRetryNudge |
software | healthy | tests/unit/test_nudges.py:6 |
TestStepNudge |
software | healthy | tests/unit/test_nudges.py:22 |
TestPrerequisiteNudge |
software | healthy | tests/unit/test_nudges.py:68 |
EmptyParams |
software | healthy | tests/unit/test_runner.py:28 |
MockClient |
software | healthy | tests/unit/test_runner.py:35 |
TestHappyPath |
software | healthy | tests/unit/test_runner.py:138 |
TestRetryLogic |
software | healthy | tests/unit/test_runner.py:194 |
TestStepEnforcement |
software | healthy | tests/unit/test_runner.py:279 |
TestErrorHandling |
software | healthy | tests/unit/test_runner.py:414 |
TestContextManagement |
software | healthy | tests/unit/test_runner.py:683 |
TestStreaming |
software | healthy | tests/unit/test_runner.py:731 |
NoFinalClient |
software | healthy | tests/unit/test_runner.py:779 |
TestAsyncToolSupport |
software | healthy | tests/unit/test_runner.py:800 |
TestMessageStructure |
software | healthy | tests/unit/test_runner.py:843 |
TestRescueToolCalls |
software | healthy | tests/unit/test_runner.py:997 |
TestReasoningCapture |
software | healthy | tests/unit/test_runner.py:1108 |
TestOnMessageCallback |
software | healthy | tests/unit/test_runner.py:1303 |
TestInitialMessages |
software | healthy | tests/unit/test_runner.py:1472 |
TestToolResolutionError |
software | healthy | tests/unit/test_runner.py:1561 |
TestPrerequisiteEnforcement |
software | healthy | tests/unit/test_runner.py:1758 |
TestMultipleTerminalTools |
software | healthy | tests/unit/test_runner.py:1887 |
TestCancellation |
software | healthy | tests/unit/test_runner.py:1960 |
TestCustomRetryNudge |
software | healthy | tests/unit/test_runner.py:2067 |
TestEstimateTokens |
software | healthy | tests/unit/test_context_manager.py:54 |
TestMaybeCompactUnderThreshold |
software | healthy | tests/unit/test_context_manager.py:73 |
TestMaybeCompactOverThreshold |
software | healthy | tests/unit/test_context_manager.py:91 |
TestCompactEvent |
software | healthy | tests/unit/test_context_manager.py:135 |
TestStepTracker |
software | healthy | tests/unit/test_steps.py:6 |
EmptyParams |
software | healthy | tests/unit/test_workflow.py:15 |
TestWorkflowValidation |
software | healthy | tests/unit/test_workflow.py:55 |
TestWorkflowMethods |
software | healthy | tests/unit/test_workflow.py:136 |
TestToolDef |
software | healthy | tests/unit/test_workflow.py:170 |
TestToolCall |
software | healthy | tests/unit/test_workflow.py:176 |
TestTextResponse |
software | healthy | tests/unit/test_workflow.py:195 |
TestFromJsonSchema |
software | healthy | tests/unit/test_workflow.py:205 |
TestCheckValidation |
software | healthy | tests/unit/test_guardrails.py:25 |
TestCheckRetryExhaustion |
software | healthy | tests/unit/test_guardrails.py:61 |
TestCheckStepEnforcement |
software | healthy | tests/unit/test_guardrails.py:87 |
TestRecord |
software | healthy | tests/unit/test_guardrails.py:123 |
TestCheckResult |
software | healthy | tests/unit/test_guardrails.py:159 |
TestImports |
software | healthy | tests/unit/test_guardrails.py:175 |
TestCustomRetryNudge |
software | healthy | tests/unit/test_guardrails.py:190 |
TestStepEnforcerCheck |
software | healthy | tests/unit/test_step_enforcer.py:9 |
TestStepEnforcerRecord |
software | healthy | tests/unit/test_step_enforcer.py:75 |
TestStepEnforcerTerminalReached |
software | healthy | tests/unit/test_step_enforcer.py:108 |
TestStepEnforcerExhaustion |
software | healthy | tests/unit/test_step_enforcer.py:132 |
TestStepEnforcerResetPremature |
software | healthy | tests/unit/test_step_enforcer.py:158 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
README.md |
software | healthy | README.md |
CONTRIBUTING.md |
software | healthy | CONTRIBUTING.md |
eval_rigs.json |
software | healthy | eval_rigs.json |
pyproject.toml |
software | healthy | pyproject.toml |
CHANGELOG.md |
software | healthy | CHANGELOG.md |
codecov.yml |
software | healthy | codecov.yml |
__init__.py |
software | healthy | tests/__init__.py |
conftest.py |
software | warning | tests/conftest.py |
test_error_tracker.py |
software | healthy | tests/unit/test_error_tracker.py |
test_nudges.py |
software | healthy | tests/unit/test_nudges.py |
__init__.py |
software | healthy | tests/unit/__init__.py |
test_runner.py |
software | healthy | tests/unit/test_runner.py |
test_context_manager.py |
software | healthy | tests/unit/test_context_manager.py |
test_steps.py |
software | healthy | tests/unit/test_steps.py |
test_workflow.py |
software | healthy | tests/unit/test_workflow.py |
test_guardrails.py |
software | healthy | tests/unit/test_guardrails.py |
test_step_enforcer.py |
software | healthy | tests/unit/test_step_enforcer.py |
test_eval_budget.py |
software | healthy | tests/unit/test_eval_budget.py |
test_grounded_synthesis.py |
software | healthy | tests/unit/test_grounded_synthesis.py |
test_response_validator.py |
software | healthy | tests/unit/test_response_validator.py |
test_strategies.py |
software | healthy | tests/unit/test_strategies.py |
test_data_gap_recovery_extended.py |
software | healthy | tests/unit/test_data_gap_recovery_extended.py |
test_ollama_client.py |
software | healthy | tests/unit/test_ollama_client.py |
test_inconsistent_api_recovery.py |
software | healthy | tests/unit/test_inconsistent_api_recovery.py |
test_hardware.py |
software | healthy | tests/unit/test_hardware.py |
test_argument_transformation.py |
software | healthy | tests/unit/test_argument_transformation.py |
test_messages.py |
software | healthy | tests/unit/test_messages.py |
test_proxy_handler.py |
software | healthy | tests/unit/test_proxy_handler.py |
test_server.py |
software | healthy | tests/unit/test_server.py |
test_context_thresholds.py |
software | healthy | tests/unit/test_context_thresholds.py |
test_slot_worker.py |
software | healthy | tests/unit/test_slot_worker.py |
test_anthropic_client.py |
software | healthy | tests/unit/test_anthropic_client.py |
test_proxy_server.py |
software | healthy | tests/unit/test_proxy_server.py |
test_llamafile_client.py |
software | healthy | tests/unit/test_llamafile_client.py |
test_respond_tool.py |
software | healthy | tests/unit/test_respond_tool.py |
test_templates.py |
software | healthy | tests/unit/test_templates.py |
test_sampling_defaults.py |
software | healthy | tests/unit/test_sampling_defaults.py |
test_proxy_convert.py |
software | healthy | tests/unit/test_proxy_convert.py |
metrics.py |
software | healthy | tests/eval/metrics.py |
__init__.py |
software | healthy | tests/eval/__init__.py |
eval_runner.py |
software | healthy | tests/eval/eval_runner.py |
significance.py |
software | healthy | tests/eval/significance.py |
batch_eval.py |
software | healthy | tests/eval/batch_eval.py |
report.py |
software | healthy | tests/eval/report.py |
ablation.py |
software | healthy | tests/eval/ablation.py |
tsconfig.app.json |
software | healthy | tests/eval/dashboard/tsconfig.app.json |
vite.config.ts |
software | warning | tests/eval/dashboard/vite.config.ts |
package.json |
software | healthy | tests/eval/dashboard/package.json |
tsconfig.node.json |
software | healthy | tests/eval/dashboard/tsconfig.node.json |
index.html |
software | healthy | tests/eval/dashboard/index.html |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
unit |
software | healthy | tests/unit |
eval |
software | healthy | tests/eval |
dashboard |
software | healthy | tests/eval/dashboard |
src |
software | healthy | tests/eval/dashboard/src |
scenarios |
software | healthy | tests/eval/scenarios |
docs |
software | healthy | docs |
results |
software | healthy | docs/results |
raw |
software | healthy | docs/results/raw |
reforged |
software | healthy | docs/results/raw/reforged |
decisions |
software | healthy | docs/decisions |
scripts |
software | healthy | scripts |
examples |
software | healthy | examples |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
src |
software | healthy | src |
forge |
software | healthy | src/forge |
proxy |
software | healthy | src/forge/proxy |
guardrails |
software | healthy | src/forge/guardrails |
clients |
software | healthy | src/forge/clients |
tools |
software | healthy | src/forge/tools |
core |
software | healthy | src/forge/core |
context |
software | healthy | src/forge/context |
prompts |
software | healthy | src/forge/prompts |
| Label | Layer | Status | Path |
|---|---|---|---|
postgresql |
data | healthy | tests/eval/scenarios/_model_reasoning.py |
redis |
data | healthy | tests/eval/scenarios/_model_reasoning.py |
mysql |
data | healthy | tests/eval/scenarios/_model_reasoning.py |
mongodb |
data | healthy | tests/eval/scenarios/_model_reasoning.py |
| Label | Layer | Status | Path |
|---|---|---|---|
port:9090 |
network | healthy | tests/unit/test_server.py |
port:8080 |
network | healthy | tests/unit/test_server.py |
port:18081 |
network | healthy | scripts/smoke_test_proxy.py |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | tests/unit/test_proxy_server.py |
10.0.3.0 |
network | healthy | tests/eval/scenarios/_stateful_model_quality.py |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-yvgrzicn |
software | healthy | /tmp/repobility-clone-yvgrzicn |
| Label | Layer | Status | Path |
|---|---|---|---|
kafka |
data | healthy | tests/eval/scenarios/_model_reasoning.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gpu (detected) |
hardware | healthy | eval_rigs.json |
| Label | Layer | Status | Path |
|---|---|---|---|
App |
frontend | healthy | tests/eval/dashboard/src/App.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::tests |
cicd | healthy | .github/workflows/tests.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
test |
cicd | healthy | .github/workflows/tests.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
CODECOV_TOKEN |
cicd | healthy | — |
This page is publicly accessible at:
https://repobility.com/scan/7430f221-46c3-4fa9-9c80-8e0d3e844062/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/7430f221-46c3-4fa9-9c80-8e0d3e844062/
Important — please don't re-submit the same URL repeatedly. The submission endpoint is idempotent: re-submitting the same git URL returns this same scan_token, not a new one. To re-scan this repo, sign up free and use the dashboard.