https://github.com/ytchokni/econ-newsfeed
· scanned 2026-06-16 01:08 UTC (2 months, 1 week ago)
60 raw signals (0 security + 60 graph)
Last scanned 2 months, 1 week ago · v1 · 55 actionable findings from 1 signal source. 5 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 2289 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 |
|---|---|---|---|
_classify_by_hostname |
software | healthy | link_extractor.py:91 |
classify_link_type |
software | dead | link_extractor.py:105 |
_check_trusted |
software | healthy | link_extractor.py:109 |
is_trusted_domain |
software | dead | link_extractor.py:121 |
_strip_to_alnum |
software | healthy | link_extractor.py:137 |
_meaningful_words |
software | healthy | link_extractor.py:145 |
_is_generic_anchor |
software | healthy | link_extractor.py:156 |
_get_sibling_anchor_text |
software | healthy | link_extractor.py:170 |
_get_parent_title_text |
software | healthy | link_extractor.py:207 |
_prepare_soup |
software | healthy | link_extractor.py:264 |
_iter_external_links |
software | healthy | link_extractor.py:272 |
extract_trusted_links |
software | healthy | link_extractor.py:292 |
match_link_to_paper |
software | healthy | link_extractor.py:350 |
match_and_save_paper_links |
software | healthy | link_extractor.py:406 |
discover_untrusted_domains |
software | healthy | link_extractor.py:489 |
_pin_dns |
software | healthy | html_fetcher.py:38 |
_pinned_create_connection |
software | healthy | html_fetcher.py:54 |
_is_fast_domain |
software | healthy | html_fetcher.py:96 |
_get_session |
software | healthy | html_fetcher.py:138 |
_get_robots_parser |
software | healthy | html_fetcher.py:158 |
is_allowed_by_robots |
software | healthy | html_fetcher.py:181 |
validate_url |
software | healthy | html_fetcher.py:192 |
validate_url_with_pin |
software | healthy | html_fetcher.py:198 |
_rate_limit |
software | healthy | html_fetcher.py:229 |
fetch_html |
software | healthy | html_fetcher.py:247 |
_fetch_with_curl |
software | healthy | html_fetcher.py:334 |
_decode_bytes |
software | healthy | html_fetcher.py:367 |
extract_text_content |
software | healthy | html_fetcher.py:379 |
hash_text_content |
software | healthy | html_fetcher.py:389 |
normalize_text |
software | healthy | html_fetcher.py:396 |
archive_snapshot |
software | healthy | html_fetcher.py:423 |
get_snapshot |
software | healthy | html_fetcher.py:455 |
list_snapshots |
software | healthy | html_fetcher.py:478 |
save_text |
software | healthy | html_fetcher.py:487 |
has_text_changed |
software | healthy | html_fetcher.py:513 |
_was_fetched_recently |
software | healthy | html_fetcher.py:529 |
fetch_and_save_if_changed |
software | healthy | html_fetcher.py:539 |
_touch_unchanged |
software | healthy | html_fetcher.py:592 |
extract_description |
software | healthy | html_fetcher.py:610 |
validate_draft_url |
software | healthy | html_fetcher.py:650 |
get_fetch_timestamp |
software | healthy | html_fetcher.py:680 |
get_previous_text |
software | healthy | html_fetcher.py:693 |
get_latest_text |
software | healthy | html_fetcher.py:720 |
get_raw_html |
software | healthy | html_fetcher.py:731 |
get_extraction_payload |
software | healthy | html_fetcher.py:739 |
needs_extraction |
software | healthy | html_fetcher.py:753 |
is_first_extraction |
software | healthy | html_fetcher.py:769 |
mark_extracted |
software | healthy | html_fetcher.py:782 |
ok |
software | healthy | extraction.py:45 |
extract_one_url |
software | healthy | extraction.py:49 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
ResponseTooLarge |
software | healthy | html_fetcher.py:23 |
HTMLFetcher |
software | healthy | html_fetcher.py:134 |
ExtractionOutcome |
software | healthy | extraction.py:32 |
PublicationExtraction |
software | healthy | publication.py:46 |
PublicationExtractionList |
software | healthy | publication.py:66 |
PublicationChange |
software | healthy | publication.py:71 |
PublicationChangeList |
software | healthy | publication.py:95 |
Publication |
software | healthy | publication.py:244 |
StructuredResponse |
software | healthy | llm_client.py:62 |
Researcher |
software | healthy | researcher.py:3 |
FeedEventEmitter |
software | healthy | feed_events.py:93 |
_TTLCache |
software | healthy | api.py:66 |
ErrorDetail |
software | healthy | api.py:99 |
ErrorResponse |
software | healthy | api.py:104 |
AuthorResponse |
software | healthy | api.py:112 |
CoAuthorResponse |
software | healthy | api.py:117 |
PaperLinkResponse |
software | healthy | api.py:121 |
PublicationResponse |
software | healthy | api.py:125 |
PaginatedPublications |
software | healthy | api.py:147 |
ResearcherUrlResponse |
software | healthy | api.py:154 |
ResearchFieldResponse |
software | healthy | api.py:159 |
JelCodeResponse |
software | healthy | api.py:164 |
ResearcherResponse |
software | healthy | api.py:168 |
PaginatedResearchers |
software | healthy | api.py:181 |
HealthResponse |
software | healthy | api.py:188 |
_UsageDict |
software | healthy | main.py:176 |
JelClassification |
software | healthy | jel_classifier.py:33 |
JelClassificationResult |
software | healthy | jel_classifier.py:44 |
SaveResult |
software | healthy | paper_saver.py:26 |
TitleRename |
software | healthy | paper_saver.py:35 |
PaperSaver |
software | healthy | paper_saver.py:51 |
TestNewPaperBaselineGuard |
software | healthy | tests_data_quality/test_feed_event_quality.py:12 |
TestStatusChangeProgression |
software | healthy | tests_data_quality/test_feed_event_quality.py:43 |
TestNewPaperStatusGuard |
software | healthy | tests_data_quality/test_feed_event_quality.py:72 |
TestEventDateSanity |
software | healthy | tests_data_quality/test_feed_event_quality.py:98 |
TestNoDuplicateNewPaperEvents |
software | healthy | tests_data_quality/test_feed_event_quality.py:116 |
TestRecentNewPaperEventsAgainstSnapshots |
software | healthy | tests_data_quality/test_feed_event_quality.py:133 |
TestEventsFromDeadUrls |
software | healthy | tests_data_quality/test_feed_event_quality.py:187 |
TestEventEvidence |
software | healthy | tests_data_quality/test_feed_event_quality.py:204 |
TestStatusChainCoherence |
software | healthy | tests_data_quality/test_feed_event_quality.py:228 |
TestSnapshotGuardTrigger |
software | healthy | tests_data_quality/test_schema_integrity.py:11 |
TestExpectedTablesExist |
software | healthy | tests_data_quality/test_schema_integrity.py:23 |
TestLlmUsageCallTypeEnum |
software | healthy | tests_data_quality/test_schema_integrity.py:40 |
TestHtmlContentConsistency |
software | healthy | tests_data_quality/test_schema_integrity.py:71 |
TestTimestampSanity |
software | healthy | tests_data_quality/test_schema_integrity.py:95 |
TestSourceUrlTracking |
software | healthy | tests_data_quality/test_schema_integrity.py:111 |
TestFetchLifecycle |
software | healthy | tests_data_quality/test_schema_integrity.py:125 |
TestLlmUsageAccounting |
software | healthy | tests_data_quality/test_schema_integrity.py:152 |
TestDirectoryServesValidResearchers |
software | healthy | tests_data_quality/test_researcher_quality.py:13 |
TestResearcherFieldQuality |
software | healthy | tests_data_quality/test_researcher_quality.py:57 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
link_extractor.py |
software | healthy | link_extractor.py |
html_fetcher.py |
software | healthy | html_fetcher.py |
poetry.lock |
software | healthy | poetry.lock |
README.md |
software | healthy | README.md |
extraction.py |
software | healthy | extraction.py |
publication.py |
software | healthy | publication.py |
CLAUDE.md |
software | healthy | CLAUDE.md |
encoding_guard.py |
software | healthy | encoding_guard.py |
scheduler.py |
software | healthy | scheduler.py |
doi_resolver.py |
software | healthy | doi_resolver.py |
db_config.py |
software | healthy | db_config.py |
topic_jel_map.py |
software | healthy | topic_jel_map.py |
docker-compose.prod.yml |
software | healthy | docker-compose.prod.yml |
llm_client.py |
software | healthy | llm_client.py |
researcher.py |
software | healthy | researcher.py |
.env.example |
software | healthy | .env.example |
pyproject.toml |
software | healthy | pyproject.toml |
feed_events.py |
software | healthy | feed_events.py |
Makefile |
software | healthy | Makefile |
jel_enrichment.py |
software | healthy | jel_enrichment.py |
openalex.py |
software | healthy | openalex.py |
api.py |
software | healthy | api.py |
paper_merge.py |
software | healthy | paper_merge.py |
main.py |
software | healthy | main.py |
jel_classifier.py |
software | healthy | jel_classifier.py |
docker-compose.yml |
software | healthy | docker-compose.yml |
paper_saver.py |
software | healthy | paper_saver.py |
test_feed_event_quality.py |
software | healthy | tests_data_quality/test_feed_event_quality.py |
conftest.py |
software | healthy | tests_data_quality/conftest.py |
test_schema_integrity.py |
software | healthy | tests_data_quality/test_schema_integrity.py |
test_researcher_quality.py |
software | healthy | tests_data_quality/test_researcher_quality.py |
test_enrichment_quality.py |
software | healthy | tests_data_quality/test_enrichment_quality.py |
test_paper_quality.py |
software | healthy | tests_data_quality/test_paper_quality.py |
test_pipeline_health.py |
software | healthy | tests_data_quality/test_pipeline_health.py |
test_openalex.py |
software | healthy | tests/test_openalex.py |
test_cleanup_data_quality.py |
software | healthy | tests/test_cleanup_data_quality.py |
test_paper_saver.py |
software | healthy | tests/test_paper_saver.py |
test_api_scrape.py |
software | healthy | tests/test_api_scrape.py |
__init__.py |
software | healthy | tests/__init__.py |
test_publication_extraction.py |
software | healthy | tests/test_publication_extraction.py |
conftest.py |
software | healthy | tests/conftest.py |
test_jel_classifier.py |
software | healthy | tests/test_jel_classifier.py |
test_url_deactivation.py |
software | healthy | tests/test_url_deactivation.py |
test_researcher_disambiguation.py |
software | healthy | tests/test_researcher_disambiguation.py |
test_snapshots_integration.py |
software | healthy | tests/test_snapshots_integration.py |
test_html_fetcher.py |
software | healthy | tests/test_html_fetcher.py |
test_researcher_dedup.py |
software | healthy | tests/test_researcher_dedup.py |
test_startup.py |
software | healthy | tests/test_startup.py |
test_title_cleaning.py |
software | healthy | tests/test_title_cleaning.py |
test_api_middleware.py |
software | healthy | tests/test_api_middleware.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_data_quality |
software | healthy | tests_data_quality |
tests |
software | healthy | tests |
docs |
software | healthy | docs |
superpowers |
software | healthy | docs/superpowers |
plans |
software | healthy | docs/superpowers/plans |
specs |
software | healthy | docs/superpowers/specs |
scripts |
software | healthy | scripts |
app |
software | healthy | app |
__mocks__ |
software | healthy | app/__mocks__ |
src |
software | healthy | app/src |
__tests__ |
software | healthy | app/src/__tests__ |
components |
software | healthy | app/src/components |
__tests__ |
software | healthy | app/src/components/__tests__ |
app |
software | healthy | app/src/app |
__tests__ |
software | healthy | app/src/app/__tests__ |
api |
software | healthy | app/src/app/api |
admin |
software | healthy | app/src/app/api/admin |
logout |
software | healthy | app/src/app/api/admin/logout |
login |
software | healthy | app/src/app/api/admin/login |
dashboard |
software | healthy | app/src/app/api/admin/dashboard |
researchers |
software | healthy | app/src/app/researchers |
__tests__ |
software | healthy | app/src/app/researchers/__tests__ |
[id] |
software | healthy | app/src/app/researchers/[id] |
admin |
software | healthy | app/src/app/admin |
__tests__ |
software | healthy | app/src/app/admin/__tests__ |
tabs |
software | healthy | app/src/app/admin/tabs |
papers |
software | healthy | app/src/app/papers |
__tests__ |
software | healthy | app/src/app/papers/__tests__ |
[id] |
software | healthy | app/src/app/papers/[id] |
lib |
software | healthy | app/src/lib |
__tests__ |
software | healthy | app/src/lib/__tests__ |
database |
software | healthy | database |
eval |
software | healthy | eval |
configs |
software | healthy | eval/configs |
.github |
software | healthy | .github |
workflows |
software | healthy | .github/workflows |
| Label | Layer | Status | Path |
|---|---|---|---|
EmptyState |
frontend | healthy | app/src/components/EmptyState.tsx |
ErrorMessage |
frontend | healthy | app/src/components/ErrorMessage.tsx |
SearchableCheckboxDropdown |
frontend | healthy | app/src/components/SearchableCheckboxDropdown.tsx |
SearchInput |
frontend | healthy | app/src/components/SearchInput.tsx |
ResearcherCardSkeleton |
frontend | healthy | app/src/components/ResearcherCardSkeleton.tsx |
PublicationCard |
frontend | healthy | app/src/components/PublicationCard.tsx |
PublicationCardSkeleton |
frontend | healthy | app/src/components/PublicationCardSkeleton.tsx |
ResearcherCard |
frontend | healthy | app/src/components/ResearcherCard.tsx |
AffiliationLine |
frontend | healthy | app/src/components/AffiliationLine.tsx |
Header |
frontend | healthy | app/src/components/Header.tsx |
NewsfeedContent |
frontend | healthy | app/src/app/NewsfeedContent.tsx |
Home |
frontend | healthy | app/src/app/page.tsx |
RootLayout |
frontend | healthy | app/src/app/layout.tsx |
ResearchersPage |
frontend | healthy | app/src/app/researchers/page.tsx |
ResearchersContent |
frontend | healthy | app/src/app/researchers/ResearchersContent.tsx |
ResearcherDetailContent |
frontend | healthy | app/src/app/researchers/[id]/ResearcherDetailContent.tsx |
LoginForm |
frontend | healthy | app/src/app/admin/LoginForm.tsx |
AdminDashboard |
frontend | healthy | app/src/app/admin/AdminDashboard.tsx |
AdminPage |
frontend | healthy | app/src/app/admin/page.tsx |
AdminLayout |
frontend | healthy | app/src/app/admin/layout.tsx |
QualityTab |
frontend | healthy | app/src/app/admin/tabs/QualityTab.tsx |
ContentTab |
frontend | healthy | app/src/app/admin/tabs/ContentTab.tsx |
ExtractionTab |
frontend | healthy | app/src/app/admin/tabs/ExtractionTab.tsx |
ActivityTab |
frontend | healthy | app/src/app/admin/tabs/ActivityTab.tsx |
ScrapesTab |
frontend | healthy | app/src/app/admin/tabs/ScrapesTab.tsx |
CostsTab |
frontend | healthy | app/src/app/admin/tabs/CostsTab.tsx |
HealthTab |
frontend | healthy | app/src/app/admin/tabs/HealthTab.tsx |
PaperDetailContent |
frontend | healthy | app/src/app/papers/[id]/PaperDetailContent.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
researchers |
data | healthy | database/schema.py |
researcher_urls |
data | healthy | database/schema.py |
papers |
data | healthy | database/schema.py |
html_content |
data | healthy | database/schema.py |
html_snapshots |
data | healthy | database/schema.py |
authorship |
data | healthy | database/schema.py |
research_fields |
data | healthy | database/schema.py |
researcher_fields |
data | healthy | database/schema.py |
jel_codes |
data | healthy | database/schema.py |
researcher_jel_codes |
data | healthy | database/schema.py |
paper_topics |
data | healthy | database/schema.py |
scrape_log |
data | healthy | database/schema.py |
researcher_snapshots |
data | healthy | database/schema.py |
paper_snapshots |
data | healthy | database/schema.py |
paper_urls |
data | healthy | database/schema.py |
llm_usage |
data | healthy | database/schema.py |
feed_events |
data | healthy | database/schema.py |
batch_jobs |
data | healthy | database/schema.py |
openalex_coauthors |
data | healthy | database/schema.py |
paper_links |
data | healthy | database/schema.py |
| Label | Layer | Status | Path |
|---|---|---|---|
GET /api/health |
api | healthy | api.py |
GET /api/metrics |
api | healthy | api.py |
GET /api/admin/dashboard |
api | healthy | api.py |
GET /api/admin/deactivated-urls |
api | healthy | api.py |
GET /api/admin/at-risk-urls |
api | healthy | api.py |
POST /api/admin/reactivate-url/{url_id} |
api | healthy | api.py |
GET /api/publications |
api | healthy | api.py |
GET /api/publications/{publication_id} |
api | healthy | api.py |
GET /api/feed.xml |
api | healthy | api.py |
GET /api/fields |
api | healthy | api.py |
GET /api/jel-codes |
api | healthy | api.py |
GET /api/filter-options |
api | healthy | api.py |
GET /api/researchers |
api | healthy | api.py |
GET /api/researchers/{researcher_id} |
api | healthy | api.py |
POST /api/scrape |
api | healthy | api.py |
GET /api/scrape/status |
api | healthy | api.py |
| Label | Layer | Status | Path |
|---|---|---|---|
125.0.0.0 |
network | healthy | html_fetcher.py |
169.254.169.254 |
network | healthy | html_fetcher.py |
1.7.4.2 |
network | healthy | poetry.lock |
1.1.0.11 |
network | healthy | poetry.lock |
1.2.0.0 |
network | healthy | poetry.lock |
127.0.0.1 |
network | healthy | README.md |
18.195.185.188 |
network | healthy | CLAUDE.md |
1.2.3.4 |
network | healthy | tests/test_url_deactivation.py |
192.168.1.1 |
network | healthy | tests/test_link_validation.py |
10.0.0.1 |
network | healthy | tests/test_security.py |
172.16.0.1 |
network | healthy | tests/test_security.py |
93.184.216.34 |
network | healthy | tests/test_security.py |
| Label | Layer | Status | Path |
|---|---|---|---|
/page.tsx |
frontend | healthy | app/src/app/page.tsx |
/researchers |
frontend | healthy | app/src/app/researchers/page.tsx |
/researchers/[id] |
frontend | healthy | app/src/app/researchers/[id]/page.tsx |
/admin |
frontend | healthy | app/src/app/admin/page.tsx |
/papers/[id] |
frontend | healthy | app/src/app/papers/[id]/page.tsx |
/ |
frontend | healthy | app/src/app/api/admin/logout/route.ts |
| Label | Layer | Status | Path |
|---|---|---|---|
claude-review |
cicd | healthy | .github/workflows/claude-code-review.yml |
deploy |
cicd | healthy | .github/workflows/deploy.yml |
backend |
cicd | healthy | .github/workflows/ci.yml |
frontend |
cicd | healthy | .github/workflows/ci.yml |
claude |
cicd | healthy | .github/workflows/claude.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
image::app/Dockerfile |
hardware | healthy | app/Dockerfile |
db |
hardware | healthy | docker-compose.yml |
api |
hardware | healthy | docker-compose.yml |
frontend |
hardware | healthy | docker-compose.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::claude-code-review |
cicd | healthy | .github/workflows/claude-code-review.yml |
gha::deploy |
cicd | healthy | .github/workflows/deploy.yml |
gha::ci |
cicd | healthy | .github/workflows/ci.yml |
gha::claude |
cicd | healthy | .github/workflows/claude.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
mongodb |
data | healthy | poetry.lock |
redis |
data | healthy | poetry.lock |
mysql |
data | healthy | poetry.lock |
| Label | Layer | Status | Path |
|---|---|---|---|
port:3306 |
network | healthy | docker-compose.yml |
port:8000 |
network | healthy | docker-compose.yml |
port:3000 |
network | healthy | docker-compose.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
password_literal::scripts/sync_prod_db.sh |
security | healthy | scripts/sync_prod_db.sh |
password_literal::scripts/sync_prod_db.sh |
security | healthy | scripts/sync_prod_db.sh |
generic_api_key::.github/workflows/ci.yml |
security | healthy | .github/workflows/ci.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
LIGHTSAIL_HOST |
cicd | healthy | — |
LIGHTSAIL_SSH_KEY |
cicd | healthy | — |
CLAUDE_CODE_OAUTH_TOKEN |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::lightsail |
hardware | healthy | CLAUDE.md |
vps::aws |
hardware | healthy | CLAUDE.md |
| Label | Layer | Status | Path |
|---|---|---|---|
repobility-clone-xyx2au11 |
software | healthy | /tmp/repobility-clone-xyx2au11 |
| Label | Layer | Status | Path |
|---|---|---|---|
caddy |
network | healthy | CLAUDE.md |
This page is publicly accessible at:
https://repobility.com/scan/4378d1e2-678f-4d3f-9b63-2993bfcf6060/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/4378d1e2-678f-4d3f-9b63-2993bfcf6060/
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.