https://github.com/SamirStandnes/kodak-portfolio
· scanned 2026-06-16 00:01 UTC (2 months, 3 weeks ago)
29 raw signals (0 security + 29 graph)
Last scanned 2 months, 3 weeks ago · v1 · 20 actionable findings from 1 signal source. 9 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 370 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_returns_dict |
software | healthy | tests/test_parser_utils.py:15 |
test_has_required_keys |
software | healthy | tests/test_parser_utils.py:20 |
test_has_unique_external_id |
software | healthy | tests/test_parser_utils.py:32 |
test_numeric_defaults |
software | healthy | tests/test_parser_utils.py:38 |
test_valid_transaction |
software | healthy | tests/test_parser_utils.py:53 |
test_missing_date |
software | healthy | tests/test_parser_utils.py:69 |
test_missing_type |
software | healthy | tests/test_parser_utils.py:78 |
test_invalid_type |
software | healthy | tests/test_parser_utils.py:87 |
test_invalid_date_format |
software | healthy | tests/test_parser_utils.py:97 |
test_invalid_numeric_field |
software | healthy | tests/test_parser_utils.py:107 |
test_invalid_currency_code |
software | healthy | tests/test_parser_utils.py:118 |
test_valid_output |
software | healthy | tests/test_parser_utils.py:133 |
test_non_list_output |
software | healthy | tests/test_parser_utils.py:148 |
test_empty_list |
software | healthy | tests/test_parser_utils.py:154 |
test_invalid_row |
software | healthy | tests/test_parser_utils.py:159 |
test_basic_usage |
software | healthy | tests/test_parser_utils.py:176 |
test_float_passthrough |
software | healthy | tests/test_utils.py:9 |
test_int_to_float |
software | healthy | tests/test_utils.py:15 |
test_string_parsing |
software | healthy | tests/test_utils.py:21 |
test_empty_values |
software | healthy | tests/test_utils.py:27 |
test_invalid_string |
software | healthy | tests/test_utils.py:32 |
test_consistent_hash |
software | healthy | tests/test_utils.py:41 |
test_different_inputs_different_hash |
software | healthy | tests/test_utils.py:47 |
test_amount_precision |
software | healthy | tests/test_utils.py:53 |
test_date_with_time |
software | healthy | tests/test_utils.py:59 |
test_returns_dict |
software | healthy | tests/test_utils.py:69 |
test_has_base_currency |
software | healthy | tests/test_utils.py:74 |
test_has_defaults |
software | healthy | tests/test_utils.py:80 |
test_column_translates_to_epoch_days |
software | healthy | tests/test_sql_compat.py:8 |
test_epoch_days_are_continuous_across_year_boundary |
software | healthy | tests/test_sql_compat.py:15 |
test_question_marks_become_psycopg2_placeholders |
software | healthy | tests/test_sql_compat.py:25 |
test_question_mark_inside_string_literal_untouched |
software | healthy | tests/test_sql_compat.py:29 |
test_single_alias_rewritten |
software | healthy | tests/test_sql_compat.py:36 |
test_all_coalesce_aliases_rewritten |
software | healthy | tests/test_sql_compat.py:41 |
test_year_translates_to_to_char |
software | healthy | tests/test_sql_compat.py:50 |
test_relative_months_translates_to_interval |
software | healthy | tests/test_sql_compat.py:56 |
test_empty_transactions |
software | healthy | tests/test_calculations.py:16 |
test_all_positive_flows |
software | healthy | tests/test_calculations.py:21 |
test_all_negative_flows |
software | healthy | tests/test_calculations.py:30 |
test_simple_100_percent_return |
software | healthy | tests/test_calculations.py:39 |
test_simple_50_percent_return |
software | healthy | tests/test_calculations.py:48 |
test_negative_return |
software | healthy | tests/test_calculations.py:57 |
test_multiple_investments |
software | healthy | tests/test_calculations.py:66 |
test_transactions_sorted |
software | healthy | tests/test_calculations.py:76 |
test_no_splits |
software | healthy | tests/test_calculations.py:90 |
test_symbol_not_in_map |
software | healthy | tests/test_calculations.py:96 |
test_zero_quantity |
software | healthy | tests/test_calculations.py:102 |
test_split_after_ref_date |
software | healthy | tests/test_calculations.py:108 |
test_split_before_ref_date |
software | healthy | tests/test_calculations.py:115 |
test_multiple_splits |
software | healthy | tests/test_calculations.py:122 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
config.yaml |
software | healthy | config.yaml |
README.md |
software | healthy | README.md |
CLAUDE.md |
software | healthy | CLAUDE.md |
CONTRIBUTING.md |
software | healthy | CONTRIBUTING.md |
Procfile |
software | healthy | Procfile |
LICENSE |
software | healthy | LICENSE |
requirements.txt |
software | healthy | requirements.txt |
__init__.py |
software | healthy | tests/__init__.py |
test_parser_utils.py |
software | healthy | tests/test_parser_utils.py |
test_utils.py |
software | healthy | tests/test_utils.py |
test_sql_compat.py |
software | healthy | tests/test_sql_compat.py |
test_calculations.py |
software | healthy | tests/test_calculations.py |
ARCHITECTURE.md |
software | healthy | docs/ARCHITECTURE.md |
GETTING_STARTED.md |
software | healthy | docs/GETTING_STARTED.md |
ROADMAP.md |
software | healthy | docs/ROADMAP.md |
__init__.py |
software | healthy | kodak/__init__.py |
market_data.py |
software | healthy | kodak/shared/market_data.py |
calculations.py |
software | healthy | kodak/shared/calculations.py |
__init__.py |
software | healthy | kodak/shared/__init__.py |
parser_utils.py |
software | healthy | kodak/shared/parser_utils.py |
db.py |
software | healthy | kodak/shared/db.py |
constants.py |
software | healthy | kodak/shared/constants.py |
utils.py |
software | healthy | kodak/shared/utils.py |
__init__.py |
software | healthy | kodak/dashboard/__init__.py |
Home.py |
software | healthy | kodak/dashboard/Home.py |
style.py |
software | healthy | kodak/dashboard/style.py |
common.py |
software | healthy | kodak/dashboard/common.py |
1_Holdings.py |
software | healthy | kodak/dashboard/_pages/1_Holdings.py |
5_Activity.py |
software | healthy | kodak/dashboard/_pages/5_Activity.py |
4_Fees.py |
software | healthy | kodak/dashboard/_pages/4_Fees.py |
__init__.py |
software | healthy | kodak/dashboard/_pages/__init__.py |
0_Overview.py |
software | healthy | kodak/dashboard/_pages/0_Overview.py |
7_Performance.py |
software | healthy | kodak/dashboard/_pages/7_Performance.py |
6_FX_Analysis.py |
software | healthy | kodak/dashboard/_pages/6_FX_Analysis.py |
8_Risk.py |
software | healthy | kodak/dashboard/_pages/8_Risk.py |
3_Interest.py |
software | healthy | kodak/dashboard/_pages/3_Interest.py |
2_Dividends.py |
software | healthy | kodak/dashboard/_pages/2_Dividends.py |
99_System.py |
software | healthy | kodak/dashboard/_pages/99_System.py |
analyze_dividends.py |
software | healthy | kodak/cli/analyze_dividends.py |
analyze_fx.py |
software | healthy | kodak/cli/analyze_fx.py |
__init__.py |
software | healthy | kodak/cli/__init__.py |
analyze_fees.py |
software | healthy | kodak/cli/analyze_fees.py |
analyze_interest.py |
software | healthy | kodak/cli/analyze_interest.py |
add_transaction.py |
software | healthy | kodak/cli/add_transaction.py |
performance_report.py |
software | healthy | kodak/cli/performance_report.py |
analyze_portfolio.py |
software | healthy | kodak/cli/analyze_portfolio.py |
analyze_performance_realized.py |
software | healthy | kodak/cli/analyze_performance_realized.py |
__init__.py |
software | healthy | kodak/maintenance/__init__.py |
test_parser.py |
software | healthy | kodak/maintenance/test_parser.py |
check_last_update.py |
software | healthy | kodak/maintenance/check_last_update.py |
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 |
docs |
software | healthy | docs |
kodak |
software | healthy | kodak |
shared |
software | healthy | kodak/shared |
dashboard |
software | healthy | kodak/dashboard |
_pages |
software | healthy | kodak/dashboard/_pages |
cli |
software | healthy | kodak/cli |
maintenance |
software | healthy | kodak/maintenance |
pipeline |
software | healthy | kodak/pipeline |
parsers |
software | healthy | kodak/pipeline/parsers |
setup |
software | healthy | kodak/setup |
workflows |
software | healthy | workflows |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
heroku |
software | healthy | heroku |
static |
software | healthy | heroku/static |
api |
software | healthy | heroku/static/api |
scripts |
software | healthy | heroku/scripts |
| Label | Layer | Status | Path |
|---|---|---|---|
TestCreateEmptyTransaction |
software | healthy | tests/test_parser_utils.py:12 |
TestValidateTransaction |
software | healthy | tests/test_parser_utils.py:50 |
TestValidateParserOutput |
software | healthy | tests/test_parser_utils.py:130 |
TestCleanNum |
software | healthy | tests/test_parser_utils.py:173 |
TestCleanNum |
software | healthy | tests/test_utils.py:6 |
TestGenerateTxnHash |
software | healthy | tests/test_utils.py:38 |
TestLoadConfig |
software | healthy | tests/test_utils.py:66 |
TestJulianDayTranslation |
software | healthy | tests/test_sql_compat.py:7 |
TestPlaceholders |
software | healthy | tests/test_sql_compat.py:24 |
TestGroupByCoalesce |
software | healthy | tests/test_sql_compat.py:35 |
TestStrftimeYear |
software | healthy | tests/test_sql_compat.py:49 |
TestDateNow |
software | healthy | tests/test_sql_compat.py:55 |
TestXirr |
software | healthy | tests/test_calculations.py:13 |
TestGetAdjustedQty |
software | healthy | tests/test_calculations.py:87 |
TestGetPriceWithFallback |
software | healthy | tests/test_calculations.py:147 |
DictRow |
software | healthy | heroku/db_adapter.py:23 |
TranslatingCursor |
software | healthy | heroku/db_adapter.py:38 |
TranslatingConnection |
software | healthy | heroku/db_adapter.py:80 |
| Label | Layer | Status | Path |
|---|---|---|---|
transactions_staging |
data | healthy | kodak/pipeline/ingest.py |
accounts |
data | healthy | kodak/setup/initialize_database.py |
instruments |
data | healthy | kodak/setup/initialize_database.py |
transactions |
data | healthy | kodak/setup/initialize_database.py |
market_prices |
data | healthy | kodak/setup/initialize_database.py |
exchange_rates |
data | healthy | kodak/setup/initialize_database.py |
| Label | Layer | Status | Path |
|---|---|---|---|
postgresql |
data | healthy | README.md |
sqlite |
data | healthy | README.md |
postgres |
data | healthy | CLAUDE.md |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-ru4xhyxa |
software | healthy | /tmp/repobility-clone-ru4xhyxa |
| Label | Layer | Status | Path |
|---|---|---|---|
port:22 |
network | healthy | .github/workflows/update-prices.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
password_literal::CLAUDE.md |
security | healthy | CLAUDE.md |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::update-prices |
cicd | healthy | .github/workflows/update-prices.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
update-prices |
cicd | healthy | .github/workflows/update-prices.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
DATABASE_URL |
cicd | healthy | — |
This page is publicly accessible at:
https://repobility.com/scan/6e024a0a-e267-423d-b29d-0ae8ab9a0ff9/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/6e024a0a-e267-423d-b29d-0ae8ab9a0ff9/
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.