https://github.com/zkann/cost-engine
· scanned 2026-06-16 01:13 UTC (2 months, 1 week ago)
9 raw signals (0 security + 9 graph)
Last scanned 2 months, 1 week ago · v1 · 8 actionable findings from 1 signal source. 1 repeated signal grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 225 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_schema_columns |
software | healthy | tests/test_synthetic.py:13 |
test_deterministic_given_seed |
software | healthy | tests/test_synthetic.py:17 |
test_different_seed_changes_resource_ids |
software | healthy | tests/test_synthetic.py:24 |
test_total_is_material |
software | healthy | tests/test_synthetic.py:31 |
test_planted_signals_present |
software | healthy | tests/test_synthetic.py:35 |
test_daily_granularity |
software | healthy | tests/test_synthetic.py:48 |
_group |
software | healthy | tests/test_cost_explorer_connector.py:24 |
_ce_response |
software | healthy | tests/test_cost_explorer_connector.py:29 |
_stubbed_ce |
software | healthy | tests/test_cost_explorer_connector.py:41 |
test_loads_service_and_usage_type_rows |
software | healthy | tests/test_cost_explorer_connector.py:47 |
test_paginates |
software | healthy | tests/test_cost_explorer_connector.py:64 |
test_default_period_is_a_complete_prior_month |
software | healthy | tests/test_cost_explorer_connector.py:76 |
test_supported_rules_fire_unsupported_skipped |
software | healthy | tests/test_cost_explorer_connector.py:91 |
synthetic_df |
software | healthy | tests/conftest.py:15 |
clean_df |
software | healthy | tests/conftest.py:20 |
_mt |
software | healthy | tests/test_s3_connector.py:31 |
_parquet_bytes |
software | healthy | tests/test_s3_connector.py:35 |
_stubbed_s3 |
software | healthy | tests/test_s3_connector.py:41 |
_obj |
software | healthy | tests/test_s3_connector.py:47 |
test_find_latest_cur_key_picks_newest_parquet |
software | healthy | tests/test_s3_connector.py:52 |
test_find_latest_raises_when_no_cur_objects |
software | healthy | tests/test_s3_connector.py:73 |
test_load_cur_from_s3_by_key_runs_full_analysis |
software | healthy | tests/test_s3_connector.py:84 |
test_load_cur_from_s3_finds_latest_then_downloads |
software | healthy | tests/test_s3_connector.py:99 |
test_requires_key_or_prefix |
software | healthy | tests/test_s3_connector.py:117 |
test_period_of_parses_both_layouts |
software | healthy | tests/test_s3_connector.py:124 |
test_select_prefers_most_recent_complete_month |
software | healthy | tests/test_s3_connector.py:130 |
test_select_loads_all_parts_in_latest_folder |
software | healthy | tests/test_s3_connector.py:142 |
test_select_explicit_month |
software | healthy | tests/test_s3_connector.py:154 |
test_load_s3_picks_complete_month_not_partial |
software | healthy | tests/test_s3_connector.py:164 |
_minimal_raw_cur |
software | healthy | tests/test_normalize.py:15 |
test_to_snake_handles_raw_and_normalized |
software | healthy | tests/test_normalize.py:33 |
test_optional_columns_filled_and_service_falls_back |
software | healthy | tests/test_normalize.py:39 |
test_resilient_cur_still_analyzes |
software | healthy | tests/test_normalize.py:49 |
test_data_gaps_reported_for_sparse_cur |
software | healthy | tests/test_normalize.py:58 |
test_no_data_gaps_on_full_synthetic |
software | healthy | tests/test_normalize.py:67 |
test_missing_essential_column_raises |
software | healthy | tests/test_normalize.py:73 |
test_distinct_accounts_from_synthetic |
software | healthy | tests/test_engine_report.py:11 |
test_markdown_shows_provenance_when_set |
software | healthy | tests/test_engine_report.py:16 |
test_markdown_omits_provenance_when_absent |
software | healthy | tests/test_engine_report.py:25 |
test_analyze_assembles_full_report |
software | healthy | tests/test_engine_report.py:31 |
test_findings_sorted_by_savings |
software | healthy | tests/test_engine_report.py:40 |
test_breakdown_shares_sum_to_one |
software | healthy | tests/test_engine_report.py:46 |
test_untagged_shows_in_team_breakdown |
software | healthy | tests/test_engine_report.py:51 |
test_null_region_not_labeled_untagged |
software | healthy | tests/test_engine_report.py:56 |
test_all_null_dimension_breakdown_suppressed |
software | healthy | tests/test_engine_report.py:75 |
_make_report |
software | healthy | tests/test_engine_report.py:86 |
_finding |
software | healthy | tests/test_engine_report.py:102 |
test_fallback_advice_never_names_absent_rules |
software | healthy | tests/test_engine_report.py:118 |
test_fallback_advice_names_quick_wins_when_present |
software | healthy | tests/test_engine_report.py:140 |
test_severity_escalates_on_share_of_spend |
software | healthy | tests/test_engine_report.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 |
.env.example |
software | healthy | .env.example |
pyproject.toml |
software | healthy | pyproject.toml |
LICENSE |
software | healthy | LICENSE |
SECURITY.md |
software | healthy | SECURITY.md |
test_synthetic.py |
software | healthy | tests/test_synthetic.py |
test_cost_explorer_connector.py |
software | healthy | tests/test_cost_explorer_connector.py |
conftest.py |
software | healthy | tests/conftest.py |
test_s3_connector.py |
software | healthy | tests/test_s3_connector.py |
test_normalize.py |
software | healthy | tests/test_normalize.py |
test_engine_report.py |
software | healthy | tests/test_engine_report.py |
test_cli.py |
software | healthy | tests/test_cli.py |
test_rules.py |
software | healthy | tests/test_rules.py |
test_mcp_server.py |
software | healthy | tests/test_mcp_server.py |
ARCHITECTURE.md |
software | healthy | docs/ARCHITECTURE.md |
ci.yml |
software | healthy | .github/workflows/ci.yml |
__init__.py |
software | healthy | src/cost_engine/__init__.py |
mcp_server.py |
software | healthy | src/cost_engine/mcp_server.py |
cli.py |
software | healthy | src/cost_engine/cli.py |
schema.py |
software | healthy | src/cost_engine/schema.py |
models.py |
software | healthy | src/cost_engine/models.py |
__init__.py |
software | healthy | src/cost_engine/ingest/__init__.py |
service_names.py |
software | healthy | src/cost_engine/ingest/service_names.py |
synthetic.py |
software | healthy | src/cost_engine/ingest/synthetic.py |
cur.py |
software | healthy | src/cost_engine/ingest/cur.py |
load.py |
software | healthy | src/cost_engine/ingest/load.py |
cost_explorer.py |
software | healthy | src/cost_engine/ingest/cost_explorer.py |
normalize.py |
software | healthy | src/cost_engine/ingest/normalize.py |
__init__.py |
software | healthy | src/cost_engine/analyze/__init__.py |
aggregate.py |
software | healthy | src/cost_engine/analyze/aggregate.py |
engine.py |
software | healthy | src/cost_engine/analyze/engine.py |
rds_reserved.py |
software | healthy | src/cost_engine/analyze/rules/rds_reserved.py |
__init__.py |
software | healthy | src/cost_engine/analyze/rules/__init__.py |
savings_plan_coverage.py |
software | healthy | src/cost_engine/analyze/rules/savings_plan_coverage.py |
idle_elastic_ip.py |
software | healthy | src/cost_engine/analyze/rules/idle_elastic_ip.py |
base.py |
software | healthy | src/cost_engine/analyze/rules/base.py |
untagged_spend.py |
software | healthy | src/cost_engine/analyze/rules/untagged_spend.py |
snapshot_retention.py |
software | healthy | src/cost_engine/analyze/rules/snapshot_retention.py |
gp2_to_gp3.py |
software | healthy | src/cost_engine/analyze/rules/gp2_to_gp3.py |
data_transfer.py |
software | healthy | src/cost_engine/analyze/rules/data_transfer.py |
__init__.py |
software | healthy | src/cost_engine/report/__init__.py |
render.py |
software | healthy | src/cost_engine/report/render.py |
summarize.py |
software | healthy | src/cost_engine/report/summarize.py |
| Label | Layer | Status | Path |
|---|---|---|---|
NoSuchBucket |
software | healthy | tests/test_cli.py:51 |
Format |
software | healthy | src/cost_engine/cli.py:123 |
Severity |
software | healthy | src/cost_engine/models.py:16 |
Category |
software | healthy | src/cost_engine/models.py:25 |
Finding |
software | healthy | src/cost_engine/models.py:33 |
CostSlice |
software | healthy | src/cost_engine/models.py:63 |
Breakdown |
software | healthy | src/cost_engine/models.py:71 |
Report |
software | healthy | src/cost_engine/models.py:77 |
ResourceSpec |
software | healthy | src/cost_engine/ingest/synthetic.py:39 |
RdsReservedCoverageRule |
software | healthy | src/cost_engine/analyze/rules/rds_reserved.py:30 |
SavingsPlanCoverageRule |
software | healthy | src/cost_engine/analyze/rules/savings_plan_coverage.py:33 |
IdleElasticIpRule |
software | healthy | src/cost_engine/analyze/rules/idle_elastic_ip.py:19 |
Rule |
software | healthy | src/cost_engine/analyze/rules/base.py:22 |
UntaggedSpendRule |
software | healthy | src/cost_engine/analyze/rules/untagged_spend.py:21 |
SnapshotRetentionRule |
software | healthy | src/cost_engine/analyze/rules/snapshot_retention.py:25 |
Gp2ToGp3Rule |
software | healthy | src/cost_engine/analyze/rules/gp2_to_gp3.py:21 |
DataTransferRule |
software | healthy | src/cost_engine/analyze/rules/data_transfer.py:27 |
| Label | Layer | Status | Path |
|---|---|---|---|
tests |
software | healthy | tests |
docs |
software | healthy | docs |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
src |
software | healthy | src |
cost_engine |
software | healthy | src/cost_engine |
ingest |
software | healthy | src/cost_engine/ingest |
analyze |
software | healthy | src/cost_engine/analyze |
rules |
software | healthy | src/cost_engine/analyze/rules |
report |
software | healthy | src/cost_engine/report |
| Label | Layer | Status | Path |
|---|---|---|---|
test |
cicd | healthy | .github/workflows/ci.yml |
audit |
cicd | healthy | .github/workflows/ci.yml |
secret-scan |
cicd | healthy | .github/workflows/ci.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::aws |
hardware | healthy | README.md |
vps::ec2 |
hardware | healthy | README.md |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-vx66kvmp |
software | healthy | /tmp/repobility-clone-vx66kvmp |
| Label | Layer | Status | Path |
|---|---|---|---|
sqs |
data | healthy | src/cost_engine/ingest/service_names.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::ci |
cicd | healthy | .github/workflows/ci.yml |
This page is publicly accessible at:
https://repobility.com/scan/76bdf6e6-4d29-470a-b152-579cfa2036cd/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/76bdf6e6-4d29-470a-b152-579cfa2036cd/
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.