https://github.com/abundant-ai/oddish
· scanned 2026-06-17 01:28 UTC (1 month, 2 weeks ago)
282 raw signals (0 security + 282 graph)
Last scanned 1 month, 2 weeks ago · v2 · last Δ -29.1 (diff) · 237 actionable findings from 1 signal source. 45 repeated signals grouped for readability. Security checks, system graph analysis, and verified AI-agent feedback are merged into one review queue.
All 4635 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 |
|---|---|---|---|
_env_flag |
software | healthy | backend/modal_app.py:8 |
_env_int |
software | healthy | backend/modal_app.py:15 |
_env_float |
software | healthy | backend/modal_app.py:22 |
_lookup_env |
software | healthy | backend/modal_app.py:271 |
_build_worker_task_mount_secret |
software | healthy | backend/modal_app.py:275 |
_build_worker_task_bucket_mount |
software | healthy | backend/modal_app.py:314 |
get_default_cloud_environment |
software | healthy | backend/cloud_policy.py:10 |
as_dict |
software | healthy | backend/dashboard_attribution.py:38 |
from_dict |
software | healthy | backend/dashboard_attribution.py:46 |
_normalize_github_handle |
software | healthy | backend/dashboard_attribution.py:64 |
_looks_like_email |
software | healthy | backend/dashboard_attribution.py:69 |
_cache_key |
software | healthy | backend/dashboard_attribution.py:73 |
_memory_get |
software | healthy | backend/dashboard_attribution.py:77 |
_memory_set |
software | healthy | backend/dashboard_attribution.py:88 |
invalidate_attribution_cache |
software | healthy | backend/dashboard_attribution.py:92 |
_db_cache_profile |
software | healthy | backend/dashboard_attribution.py:96 |
_schedule_profile_refresh |
software | healthy | backend/dashboard_attribution.py:121 |
_run |
software | healthy | backend/dashboard_attribution.py:132 |
_other_member_github_handles |
software | healthy | backend/dashboard_attribution.py:151 |
_other_member_emails |
software | healthy | backend/dashboard_attribution.py:172 |
_baseline_profile |
software | healthy | backend/dashboard_attribution.py:193 |
_add_handle |
software | healthy | backend/dashboard_attribution.py:278 |
_add_email |
software | healthy | backend/dashboard_attribution.py:288 |
_row_has_strong_attribution_match |
software | healthy | backend/dashboard_attribution.py:232 |
_discover_attribution_from_tasks |
software | healthy | backend/dashboard_attribution.py:263 |
_persist_profile |
software | healthy | backend/dashboard_attribution.py:347 |
_compute_and_persist_profile |
software | healthy | backend/dashboard_attribution.py:356 |
_profile_gained_identities |
software | healthy | backend/dashboard_attribution.py:390 |
_load_attribution_profile |
software | healthy | backend/dashboard_attribution.py:404 |
_resolve_target_user_id |
software | healthy | backend/dashboard_attribution.py:424 |
resolve_experiments_author |
software | healthy | backend/dashboard_attribution.py:444 |
generate_id |
software | healthy | backend/models.py:30 |
generate_api_key |
software | healthy | backend/models.py:35 |
hash_api_key |
software | healthy | backend/models.py:348 |
create_api_key |
software | healthy | backend/models.py:353 |
api_app |
software | healthy | backend/endpoints.py:64 |
profile_from_user_row |
software | healthy | backend/dashboard_owner_backfill.py:29 |
_claim_candidates_select |
software | healthy | backend/dashboard_owner_backfill.py:77 |
_claim_update_statement |
software | healthy | backend/dashboard_owner_backfill.py:123 |
_claim_for_user |
software | healthy | backend/dashboard_owner_backfill.py:140 |
_sentinel_update_statement |
software | healthy | backend/dashboard_owner_backfill.py:167 |
_org_ids_with_unowned_experiments |
software | healthy | backend/dashboard_owner_backfill.py:184 |
_claim_for_org |
software | healthy | backend/dashboard_owner_backfill.py:202 |
reclaim_experiments_for_user |
software | healthy | backend/dashboard_owner_backfill.py:265 |
backfill_experiment_owners |
software | healthy | backend/dashboard_owner_backfill.py:332 |
_resolve_environment |
software | healthy | backend/observability.py:28 |
_extra_resource_attributes |
software | healthy | backend/observability.py:44 |
configure_logfire |
software | healthy | backend/observability.py:70 |
_safe_instrument |
software | healthy | backend/observability.py:180 |
span |
software | healthy | backend/observability.py:187 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
CLAUDE.md |
software | healthy | CLAUDE.md |
AGENTS.md |
software | healthy | AGENTS.md |
CHANGELOG.md |
software | healthy | CHANGELOG.md |
README.md |
software | healthy | README.md |
DOCS.md |
software | healthy | DOCS.md |
LICENSE |
software | healthy | LICENSE |
SELF_HOSTING.md |
software | healthy | SELF_HOSTING.md |
.pre-commit-config.yaml |
software | healthy | .pre-commit-config.yaml |
.env.example |
software | healthy | backend/.env.example |
modal_app.py |
software | healthy | backend/modal_app.py |
cloud_policy.py |
software | healthy | backend/cloud_policy.py |
dashboard_attribution.py |
software | healthy | backend/dashboard_attribution.py |
README.md |
software | healthy | backend/README.md |
pyproject.toml |
software | healthy | backend/pyproject.toml |
models.py |
software | healthy | backend/models.py |
endpoints.py |
software | healthy | backend/endpoints.py |
dashboard_owner_backfill.py |
software | healthy | backend/dashboard_owner_backfill.py |
serve.py |
software | healthy | backend/serve.py |
observability.py |
software | healthy | backend/observability.py |
deploy.py |
software | healthy | backend/deploy.py |
preview_seed.py |
software | healthy | backend/preview_seed.py |
Dockerfile |
software | healthy | backend/Dockerfile |
__init__.py |
software | healthy | backend/worker/__init__.py |
github.py |
software | healthy | backend/worker/github.py |
runtime.py |
software | healthy | backend/worker/runtime.py |
functions.py |
software | healthy | backend/worker/functions.py |
test_provisioning_attribution_cache.py |
software | healthy | backend/tests/test_provisioning_attribution_cache.py |
test_preview_seed.py |
software | healthy | backend/tests/test_preview_seed.py |
test_dashboard_attribution.py |
software | healthy | backend/tests/test_dashboard_attribution.py |
conftest.py |
software | healthy | backend/tests/conftest.py |
test_skills_overlay.py |
software | healthy | backend/tests/test_skills_overlay.py |
test_browse_search.py |
software | healthy | backend/tests/test_browse_search.py |
test_task_affiliated_experiments.py |
software | healthy | backend/tests/test_task_affiliated_experiments.py |
test_probe_tool_usage.py |
software | healthy | backend/tests/test_probe_tool_usage.py |
test_local_runner.py |
software | healthy | backend/tests/test_local_runner.py |
test_stamp_experiment_owner.py |
software | healthy | backend/tests/test_stamp_experiment_owner.py |
__init__.py |
software | healthy | backend/tests/__init__.py |
test_documents.py |
software | healthy | backend/tests/test_documents.py |
test_probe_analyzer.py |
software | healthy | backend/tests/test_probe_analyzer.py |
test_digest.py |
software | healthy | backend/tests/test_digest.py |
test_probe_staging_skills.py |
software | healthy | backend/tests/test_probe_staging_skills.py |
test_org_probes_api.py |
software | healthy | backend/tests/test_org_probes_api.py |
test_document_search.py |
software | healthy | backend/tests/test_document_search.py |
test_docstore_mcp.py |
software | healthy | backend/tests/test_docstore_mcp.py |
test_owner_backfill.py |
software | healthy | backend/tests/test_owner_backfill.py |
test_extraction.py |
software | healthy | backend/tests/test_extraction.py |
test_local_runner_watchdog.py |
software | healthy | backend/tests/test_local_runner_watchdog.py |
test_experiment_probes_api.py |
software | healthy | backend/tests/test_experiment_probes_api.py |
test_skills_parse.py |
software | healthy | backend/tests/test_skills_parse.py |
test_skills.py |
software | healthy | backend/tests/test_skills.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
AttributionProfile |
software | healthy | backend/dashboard_attribution.py:34 |
UserRole |
software | healthy | backend/models.py:54 |
APIKeyScope |
software | healthy | backend/models.py:62 |
OrganizationModel |
software | healthy | backend/models.py:75 |
UserModel |
software | healthy | backend/models.py:105 |
APIKeyModel |
software | healthy | backend/models.py:174 |
ChatScopeKind |
software | healthy | backend/models.py:247 |
ChatStatus |
software | healthy | backend/models.py:252 |
ChatTurnStatus |
software | healthy | backend/models.py:259 |
ChatSession |
software | healthy | backend/models.py:268 |
ChatSessionEvent |
software | healthy | backend/models.py:291 |
ChatTurn |
software | healthy | backend/models.py:307 |
_FakeTask |
software | healthy | backend/tests/test_dashboard_attribution.py:155 |
FakeTrial |
software | healthy | backend/tests/test_local_runner.py:196 |
_FakeClient |
software | healthy | backend/tests/test_documents.py:43 |
_FakeScalars |
software | healthy | backend/tests/test_owner_backfill.py:112 |
_FakeResult |
software | healthy | backend/tests/test_owner_backfill.py:120 |
_FakeSession |
software | healthy | backend/tests/test_owner_backfill.py:128 |
_FakeRuntime |
software | healthy | backend/tests/cc_chat/test_orchestrator_send.py:11 |
_FakeSandbox |
software | healthy | backend/tests/cc_chat/test_orchestrator_send.py:17 |
_FakeDaytona |
software | healthy | backend/tests/cc_chat/test_restart_sweep.py:8 |
OrganizationResponse |
software | healthy | backend/api/schemas.py:11 |
UserResponse |
software | healthy | backend/api/schemas.py:26 |
InviteUserRequest |
software | healthy | backend/api/schemas.py:38 |
InviteUserResponse |
software | healthy | backend/api/schemas.py:46 |
APIKeyResponse |
software | healthy | backend/api/schemas.py:60 |
APIKeyCreateResponse |
software | healthy | backend/api/schemas.py:74 |
CreateAPIKeyRequest |
software | healthy | backend/api/schemas.py:87 |
ExperimentShareResponse |
software | healthy | backend/api/schemas.py:100 |
ExperimentUpdateRequest |
software | healthy | backend/api/schemas.py:108 |
ExperimentUpdateResponse |
software | healthy | backend/api/schemas.py:114 |
ExpandBackfillResponse |
software | healthy | backend/api/routers/admin.py:93 |
ChatStartRequest |
software | healthy | backend/api/routers/cc_chat.py:18 |
ChatStartResponse |
software | healthy | backend/api/routers/cc_chat.py:23 |
ChatSendRequest |
software | healthy | backend/api/routers/cc_chat.py:27 |
RefreshResponse |
software | healthy | backend/api/routers/github_webhooks.py:22 |
SessionNotFound |
software | healthy | backend/api/services/cc_chat/orchestrator.py:33 |
ChatOrchestrator |
software | healthy | backend/api/services/cc_chat/orchestrator.py:37 |
_Closeable |
software | healthy | backend/api/services/cc_chat/idle_reaper.py:17 |
SessionTranscriptBuffer |
software | healthy | backend/api/services/cc_chat/transcript_buffer.py:11 |
Provisioner |
software | healthy | backend/api/services/cc_chat/provisioner.py:13 |
CreatedSandbox |
software | healthy | backend/api/services/cc_chat/daytona_client.py:21 |
DaytonaClient |
software | healthy | backend/api/services/cc_chat/daytona_client.py:28 |
RealDaytonaClient |
software | healthy | backend/api/services/cc_chat/daytona_client.py:74 |
FakeDaytonaClient |
software | healthy | backend/api/services/cc_chat/daytona_client.py:251 |
AgentRunResult |
software | healthy | backend/api/services/cc_chat/claude_code_runtime.py:17 |
ClaudeCodeRuntime |
software | healthy | backend/api/services/cc_chat/claude_code_runtime.py:29 |
AuthMethod |
software | healthy | backend/auth/types.py:11 |
AuthContext |
software | healthy | backend/auth/types.py:20 |
CachedAuthData |
software | healthy | backend/auth/verification.py:44 |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
backend |
software | healthy | backend |
worker |
software | healthy | backend/worker |
tests |
software | healthy | backend/tests |
cc_chat |
software | healthy | backend/tests/cc_chat |
api |
software | healthy | backend/api |
routers |
software | healthy | backend/api/routers |
services |
software | healthy | backend/api/services |
cc_chat |
software | healthy | backend/api/services/cc_chat |
alembic |
software | healthy | backend/alembic |
versions |
software | healthy | backend/alembic/versions |
auth |
software | healthy | backend/auth |
scripts |
software | healthy | scripts |
.github |
software | healthy | .github |
scripts |
software | healthy | .github/scripts |
preview |
software | healthy | .github/scripts/preview |
workflows |
software | healthy | .github/workflows |
docker |
software | healthy | .github/docker |
frontend |
software | healthy | frontend |
src |
software | healthy | frontend/src |
app |
software | healthy | frontend/src/app |
api |
software | healthy | frontend/src/app/api |
experiments |
software | healthy | frontend/src/app/api/experiments |
[experiment] |
software | healthy | frontend/src/app/api/experiments/[experiment] |
unpublish |
software | healthy | frontend/src/app/api/experiments/[experiment]/unpublish |
probes |
software | healthy | frontend/src/app/api/experiments/[experiment]/probes |
share |
software | healthy | frontend/src/app/api/experiments/[experiment]/share |
publish |
software | healthy | frontend/src/app/api/experiments/[experiment]/publish |
tasks |
software | healthy | frontend/src/app/api/experiments/[experiment]/tasks |
dashboard |
software | healthy | frontend/src/app/api/dashboard |
tag-policy |
software | healthy | frontend/src/app/api/tag-policy |
trials |
software | healthy | frontend/src/app/api/trials |
[trial_id] |
software | healthy | frontend/src/app/api/trials/[trial_id] |
probe-artifacts |
software | healthy | frontend/src/app/api/trials/[trial_id]/probe-artifacts |
files |
software | healthy | frontend/src/app/api/trials/[trial_id]/files |
[...path] |
software | healthy | frontend/src/app/api/trials/[trial_id]/files/[...path] |
trajectory |
software | healthy | frontend/src/app/api/trials/[trial_id]/trajectory |
retry |
software | healthy | frontend/src/app/api/trials/[trial_id]/retry |
logs |
software | healthy | frontend/src/app/api/trials/[trial_id]/logs |
structured |
software | healthy | frontend/src/app/api/trials/[trial_id]/logs/structured |
result |
software | healthy | frontend/src/app/api/trials/[trial_id]/result |
admin |
software | healthy | frontend/src/app/api/admin |
worker-jobs |
software | healthy | frontend/src/app/api/admin/worker-jobs |
orphaned-state |
software | healthy | frontend/src/app/api/admin/orphaned-state |
slots |
software | healthy | frontend/src/app/api/admin/slots |
queue-health |
software | healthy | frontend/src/app/api/admin/queue-health |
queue-status |
software | healthy | frontend/src/app/api/admin/queue-status |
users |
software | healthy | frontend/src/app/api/users |
probes |
software | healthy | frontend/src/app/api/probes |
tag-filters |
software | healthy | frontend/src/app/api/tag-filters |
[filter_id] |
software | healthy | frontend/src/app/api/tag-filters/[filter_id] |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
GET /documents |
api | healthy | backend/api/routers/documents.py |
GET /documents/{document_id} |
api | healthy | backend/api/routers/documents.py |
POST /documents |
api | healthy | backend/api/routers/documents.py |
PUT /documents/{document_id} |
api | healthy | backend/api/routers/documents.py |
DELETE /documents/{document_id} |
api | healthy | backend/api/routers/documents.py |
POST /tasks/upload/init |
api | healthy | backend/api/routers/tasks.py |
POST /tasks/upload/complete |
api | healthy | backend/api/routers/tasks.py |
POST /tasks/sweep |
api | healthy | backend/api/routers/tasks.py |
GET /tasks |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/browse |
api | healthy | backend/api/routers/tasks.py |
POST /experiments/combine |
api | healthy | backend/api/routers/tasks.py |
GET /experiments/{experiment_id}/share |
api | healthy | backend/api/routers/tasks.py |
PATCH /experiments/{experiment_id} |
api | healthy | backend/api/routers/tasks.py |
DELETE /experiments/{experiment_id} |
api | healthy | backend/api/routers/tasks.py |
POST /experiments/{experiment_id}/publish |
api | healthy | backend/api/routers/tasks.py |
POST /experiments/{experiment_id}/unpublish |
api | healthy | backend/api/routers/tasks.py |
GET /experiments/{experiment_id}/probes |
api | healthy | backend/api/routers/tasks.py |
GET /probes |
api | healthy | backend/api/routers/tasks.py |
POST /tasks/cancel |
api | healthy | backend/api/routers/tasks.py |
POST /tasks/{task_id}/qa/retry |
api | healthy | backend/api/routers/tasks.py |
POST /tasks/{task_id}/qa/cancel |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id} |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id}/detail |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id}/versions |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id}/versions/{version} |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id}/files |
api | healthy | backend/api/routers/tasks.py |
GET /tasks/{task_id}/files/{file_path:path} |
api | healthy | backend/api/routers/tasks.py |
GET /slots |
api | healthy | backend/api/routers/admin.py |
GET /queue-status |
api | healthy | backend/api/routers/admin.py |
GET /orphaned-state |
api | healthy | backend/api/routers/admin.py |
GET /queue-health |
api | healthy | backend/api/routers/admin.py |
GET /worker-jobs |
api | healthy | backend/api/routers/admin.py |
POST /tasks/expand-backfill |
api | healthy | backend/api/routers/admin.py |
POST /clerk |
api | healthy | backend/api/routers/clerk_webhooks.py |
POST /chat-sessions |
api | healthy | backend/api/routers/cc_chat.py |
GET /chat-sessions/{session_id} |
api | healthy | backend/api/routers/cc_chat.py |
GET /chat-sessions/{session_id}/events |
api | healthy | backend/api/routers/cc_chat.py |
POST /chat-sessions/{session_id}/messages |
api | healthy | backend/api/routers/cc_chat.py |
DELETE /chat-sessions/{session_id} |
api | healthy | backend/api/routers/cc_chat.py |
GET /skills |
api | healthy | backend/api/routers/skills.py |
GET /skills/{skill_id} |
api | healthy | backend/api/routers/skills.py |
POST /skills |
api | healthy | backend/api/routers/skills.py |
PUT /skills/{skill_id} |
api | healthy | backend/api/routers/skills.py |
DELETE /skills/{skill_id} |
api | healthy | backend/api/routers/skills.py |
GET /org |
api | healthy | backend/api/routers/orgs.py |
GET /users |
api | healthy | backend/api/routers/orgs.py |
POST /users |
api | healthy | backend/api/routers/orgs.py |
DELETE /users/{user_id} |
api | healthy | backend/api/routers/orgs.py |
GET /dashboard |
api | healthy | backend/api/routers/dashboard.py |
POST /imports/zip |
api | healthy | backend/api/routers/imports.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
IF |
data | healthy | backend/preview_seed.py |
organizations |
data | healthy | backend/alembic/versions/a1b2c3d4e5f6_add_cloud_auth_tables… |
users |
data | healthy | backend/alembic/versions/a1b2c3d4e5f6_add_cloud_auth_tables… |
api_keys |
data | healthy | backend/alembic/versions/a1b2c3d4e5f6_add_cloud_auth_tables… |
chat_sessions |
data | healthy | backend/alembic/versions/p2q3r4s5t6u7_add_chat_tables.py |
chat_session_events |
data | healthy | backend/alembic/versions/p2q3r4s5t6u7_add_chat_tables.py |
chat_turns |
data | healthy | backend/alembic/versions/p2q3r4s5t6u7_add_chat_tables.py |
provider_slots |
data | healthy | backend/alembic/versions/i5j6k7l8m9n0_add_provider_slots_ta… |
experiment_dispatch_log |
data | healthy | oddish/alembic/versions/a4b5c6d7e8f0_add_experiment_dispatc… |
experiments |
data | healthy | oddish/alembic/versions/9c1d2e3f4a5b_add_experiments_table.… |
queue_runtime_status |
data | healthy | oddish/alembic/versions/qh01_add_queue_runtime_status.py |
task_experiments |
data | healthy | oddish/alembic/versions/e8f9a0b1c2d3_task_experiments_mtm.py |
tag_projection_sweep_state |
data | healthy | oddish/alembic/versions/aa04ta05sweep_add_tag_sweep_state.py |
worker_jobs |
data | healthy | oddish/alembic/versions/a4b5c6d7e8f9_add_worker_jobs_table.… |
queue_slots |
data | healthy | oddish/alembic/versions/r3s4t5u6v7w8_add_queue_slots_table.… |
tags |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
tag_assignments |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
tag_exclusions |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
tag_grants |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
tag_events |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
tag_policies |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
saved_tag_filters |
data | healthy | oddish/alembic/versions/aa00ta01core_add_tag_tables.py |
OrganizationModel |
data | healthy | backend/models.py |
UserModel |
data | healthy | backend/models.py |
APIKeyModel |
data | healthy | backend/models.py |
ChatSession |
data | healthy | backend/models.py |
ChatSessionEvent |
data | healthy | backend/models.py |
ChatTurn |
data | healthy | backend/models.py |
organizations |
data | healthy | backend/models.py |
users |
data | healthy | backend/models.py |
api_keys |
data | healthy | backend/models.py |
chat_sessions |
data | healthy | backend/models.py |
chat_session_events |
data | healthy | backend/models.py |
chat_turns |
data | healthy | backend/models.py |
Base |
data | healthy | oddish/src/oddish/db/models.py |
ExperimentModel |
data | healthy | oddish/src/oddish/db/models.py |
TaskModel |
data | healthy | oddish/src/oddish/db/models.py |
TaskVersionModel |
data | healthy | oddish/src/oddish/db/models.py |
TrialModel |
data | healthy | oddish/src/oddish/db/models.py |
QueueSlotModel |
data | healthy | oddish/src/oddish/db/models.py |
WorkerJobModel |
data | healthy | oddish/src/oddish/db/models.py |
ProbePresetModel |
data | healthy | oddish/src/oddish/db/models.py |
TagModel |
data | healthy | oddish/src/oddish/db/models.py |
TagAssignmentModel |
data | healthy | oddish/src/oddish/db/models.py |
TagExclusionModel |
data | healthy | oddish/src/oddish/db/models.py |
TagGrantModel |
data | healthy | oddish/src/oddish/db/models.py |
TagEventModel |
data | healthy | oddish/src/oddish/db/models.py |
TagPolicyModel |
data | healthy | oddish/src/oddish/db/models.py |
SavedTagFilterModel |
data | healthy | oddish/src/oddish/db/models.py |
SkillModel |
data | healthy | oddish/src/oddish/db/models.py |
Showing first 50 of this kind. Full payload available via the JSON button at the top of the page.
| Label | Layer | Status | Path |
|---|---|---|---|
RootLayout |
frontend | healthy | frontend/src/app/layout.tsx |
LandingPage |
frontend | healthy | frontend/src/app/page.tsx |
DatasetsLandingPage |
frontend | healthy | frontend/src/app/datasets/page.tsx |
PublicDatasetPage |
frontend | healthy | frontend/src/app/datasets/[token]/page.tsx |
PublicExperimentPage |
frontend | healthy | frontend/src/app/share/[token]/page.tsx |
AppLayout |
frontend | healthy | frontend/src/app/(app)/layout.tsx |
ExperimentsPage |
frontend | healthy | frontend/src/app/(app)/experiments/page.tsx |
ExperimentDetailLoading |
frontend | healthy | frontend/src/app/(app)/experiments/[experiment]/loading.tsx |
DashboardLoading |
frontend | healthy | frontend/src/app/(app)/dashboard/loading.tsx |
AdminPage |
frontend | healthy | frontend/src/app/(app)/admin/page.tsx |
QaLayout |
frontend | healthy | frontend/src/app/(app)/qa/layout.tsx |
QaPage |
frontend | healthy | frontend/src/app/(app)/qa/page.tsx |
QaRunsPage |
frontend | healthy | frontend/src/app/(app)/qa/runs/page.tsx |
PresetsPage |
frontend | healthy | frontend/src/app/(app)/qa/presets/page.tsx |
SkillsPage |
frontend | healthy | frontend/src/app/(app)/qa/skills/page.tsx |
DocumentsPage |
frontend | healthy | frontend/src/app/(app)/qa/documents/page.tsx |
SettingsPage |
frontend | healthy | frontend/src/app/(app)/settings/page.tsx |
TasksLoading |
frontend | healthy | frontend/src/app/(app)/tasks/loading.tsx |
ProbeResultPage |
frontend | healthy | frontend/src/app/(app)/tasks/[task_id]/probe/[trial_id]/pag… |
SkillsRedirect |
frontend | healthy | frontend/src/app/(app)/skills/page.tsx |
DocumentsRedirect |
frontend | healthy | frontend/src/app/(app)/documents/page.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
/page.tsx |
frontend | healthy | frontend/src/app/page.tsx |
/datasets |
frontend | healthy | frontend/src/app/datasets/page.tsx |
/datasets/[token] |
frontend | healthy | frontend/src/app/datasets/[token]/page.tsx |
/share/[token] |
frontend | healthy | frontend/src/app/share/[token]/page.tsx |
/(app)/experiments |
frontend | healthy | frontend/src/app/(app)/experiments/page.tsx |
/(app)/experiments/[experiment] |
frontend | healthy | frontend/src/app/(app)/experiments/[experiment]/page.tsx |
/(app)/dashboard |
frontend | healthy | frontend/src/app/(app)/dashboard/page.tsx |
/(app)/admin |
frontend | healthy | frontend/src/app/(app)/admin/page.tsx |
/(app)/qa |
frontend | healthy | frontend/src/app/(app)/qa/page.tsx |
/(app)/qa/runs |
frontend | healthy | frontend/src/app/(app)/qa/runs/page.tsx |
/(app)/qa/presets |
frontend | healthy | frontend/src/app/(app)/qa/presets/page.tsx |
/(app)/qa/skills |
frontend | healthy | frontend/src/app/(app)/qa/skills/page.tsx |
/(app)/qa/documents |
frontend | healthy | frontend/src/app/(app)/qa/documents/page.tsx |
/(app)/settings |
frontend | healthy | frontend/src/app/(app)/settings/page.tsx |
/(app)/tasks |
frontend | healthy | frontend/src/app/(app)/tasks/page.tsx |
/(app)/tasks/[task_id] |
frontend | healthy | frontend/src/app/(app)/tasks/[task_id]/page.tsx |
/(app)/tasks/[task_id]/probe |
frontend | healthy | frontend/src/app/(app)/tasks/[task_id]/probe/page.tsx |
/(app)/tasks/[task_id]/probe/[trial_id] |
frontend | healthy | frontend/src/app/(app)/tasks/[task_id]/probe/[trial_id]/pag… |
/(app)/skills |
frontend | healthy | frontend/src/app/(app)/skills/page.tsx |
/(app)/documents |
frontend | healthy | frontend/src/app/(app)/documents/page.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
auth::oddish/src/oddish/workers/harbor_runner.py |
security | healthy | oddish/src/oddish/workers/harbor_runner.py |
auth::frontend/README.md |
security | healthy | frontend/README.md |
auth::oddish/tests/test_subscription_routing.py |
security | healthy | oddish/tests/test_subscription_routing.py |
auth::AGENTS.md |
security | healthy | AGENTS.md |
auth::backend/auth/provisioning.py |
security | healthy | backend/auth/provisioning.py |
auth::backend/modal_app.py |
security | healthy | backend/modal_app.py |
auth::oddish/src/oddish/config.py |
security | healthy | oddish/src/oddish/config.py |
auth::backend/auth/__init__.py |
security | healthy | backend/auth/__init__.py |
auth::oddish/src/oddish/analyze/classifier.py |
security | healthy | oddish/src/oddish/analyze/classifier.py |
auth::backend/README.md |
security | healthy | backend/README.md |
auth::oddish/tests/test_backend_task_user_resolution.py |
security | healthy | oddish/tests/test_backend_task_user_resolution.py |
auth::backend/auth/verification.py |
security | healthy | backend/auth/verification.py |
auth::oddish/src/oddish/worker/probe_overlay.py |
security | healthy | oddish/src/oddish/worker/probe_overlay.py |
auth::oddish/src/oddish/core/tag_permissions.py |
security | healthy | oddish/src/oddish/core/tag_permissions.py |
auth::backend/pyproject.toml |
security | healthy | backend/pyproject.toml |
auth::frontend/src/lib/backend-config.ts |
security | healthy | frontend/src/lib/backend-config.ts |
auth::backend/.env.example |
security | healthy | backend/.env.example |
auth::.github/workflows/modal-deploy.yml |
security | healthy | .github/workflows/modal-deploy.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
deploy |
cicd | healthy | .github/workflows/modal-deploy.yml |
migrate |
cicd | healthy | .github/workflows/supabase-db-migrations.yml |
detect-changes |
cicd | healthy | .github/workflows/pr-preview.yml |
stop-previous-preview-backend |
cicd | healthy | .github/workflows/pr-preview.yml |
prepare-preview-database |
cicd | healthy | .github/workflows/pr-preview.yml |
deploy-preview-backend |
cicd | healthy | .github/workflows/pr-preview.yml |
update-vercel-preview |
cicd | healthy | .github/workflows/pr-preview.yml |
post-preview-links |
cicd | healthy | .github/workflows/pr-preview.yml |
stop-preview |
cicd | healthy | .github/workflows/pr-preview.yml |
update-changelog |
cicd | healthy | .github/workflows/daily-changelog.yml |
build |
cicd | healthy | .github/workflows/ci-base-image.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
port:5432 |
network | healthy | AGENTS.md |
port:3000 |
network | healthy | AGENTS.md |
port:8000 |
network | healthy | backend/Dockerfile |
port:06 |
network | healthy | .github/workflows/ci-base-image.yml |
port:17 |
network | healthy | .github/workflows/ci-base-image.yml |
port:443 |
network | healthy | frontend/run-prod-clerk-local.sh |
port:64 |
network | healthy | frontend/pnpm-lock.yaml |
port:16 |
network | healthy | frontend/pnpm-lock.yaml |
port:11 |
network | healthy | frontend/pnpm-lock.yaml |
| Label | Layer | Status | Path |
|---|---|---|---|
GITHUB_TOKEN |
cicd | healthy | — |
VERCEL_ORG_ID |
cicd | healthy | — |
CLAUDE_CODE_OAUTH_TOKEN |
cicd | healthy | — |
MODAL_TOKEN_SECRET |
cicd | healthy | — |
MODAL_TOKEN_ID |
cicd | healthy | — |
VERCEL_PROJECT_ID |
cicd | healthy | — |
ODDISH_DATABASE_URL |
cicd | healthy | — |
VERCEL_TOKEN |
cicd | healthy | — |
SUPABASE_ACCESS_TOKEN |
cicd | healthy | — |
| Label | Layer | Status | Path |
|---|---|---|---|
127.0.0.1 |
network | healthy | backend/api/app.py |
10.9.6.1 |
network | healthy | frontend/src/components/icons/github.tsx |
3.2.8.8 |
network | healthy | frontend/src/components/icons/github.tsx |
5.7.4.4 |
network | healthy | frontend/src/components/icons/github.tsx |
3.2.7.8 |
network | healthy | frontend/src/components/icons/github.tsx |
| Label | Layer | Status | Path |
|---|---|---|---|
gha::modal-deploy |
cicd | healthy | .github/workflows/modal-deploy.yml |
gha::supabase-db-migrations |
cicd | healthy | .github/workflows/supabase-db-migrations.yml |
gha::pr-preview |
cicd | healthy | .github/workflows/pr-preview.yml |
gha::daily-changelog |
cicd | healthy | .github/workflows/daily-changelog.yml |
gha::ci-base-image |
cicd | healthy | .github/workflows/ci-base-image.yml |
| Label | Layer | Status | Path |
|---|---|---|---|
postgres |
data | healthy | CLAUDE.md |
postgresql |
data | healthy | AGENTS.md |
sqlite |
data | healthy | oddish/tests/test_tags_effective_resolution.py |
| Label | Layer | Status | Path |
|---|---|---|---|
vps::azure |
hardware | healthy | AGENTS.md |
vps::aws |
hardware | healthy | AGENTS.md |
vps::gcp |
hardware | healthy | backend/tests/test_document_search.py |
| Label | Layer | Status | Path |
|---|---|---|---|
image::backend/Dockerfile |
hardware | healthy | backend/Dockerfile |
image::frontend/Dockerfile |
hardware | healthy | frontend/Dockerfile |
| Label | Layer | Status | Path |
|---|---|---|---|
abundant-ai__oddish |
software | healthy | /data/fable5_failed_archive/abundant-ai__oddish |
| Label | Layer | Status | Path |
|---|---|---|---|
test_tags_migration_sanity.py |
data | healthy | oddish/tests/test_tags_migration_sanity.py |
| Label | Layer | Status | Path |
|---|---|---|---|
gpu (detected) |
hardware | healthy | oddish/tests/test_cli_run_gpu.py |
This page is publicly accessible at:
https://repobility.com/scan/5f6ff65b-5c4d-4d28-98d3-810861f4ce7e/
To check status programmatically (no auth required):
curl -s https://repobility.com/api/v1/public/scan/5f6ff65b-5c4d-4d28-98d3-810861f4ce7e/
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.