Review gate REJECT attempt 1/10: api_routes/forge.py is fully deleted (260-line all-deletion in diff stat) but its import `from api_routes.forge import router as _forge_router` at api.py:1257 appears as an unchanged context line in the diff — not removed — which will cause ImportError on startup; api_shared/nav.py (112 lines, all deleted) has the same problem with the bare `from api_shared.nav import (nav_html, ...)` at api.py:61.
Effort: thorough
A neuroscience PhD student arriving at SciDEX for the first time
faces a wall of jargon-heavy content: 17K wiki pages, 310+
hypotheses, hundreds of debates. They need a guided "intro to X"
page where X is tau-propagation, microglia-aging, apoe4-risk,
etc. — a page that says "here's what this field is, here are the
five hypotheses you must understand, here are the two debates that
shaped it, here's what's actively being argued about now."
Build an auto-generated /intro/{field-slug} page that synthesizes
the top wiki page + top-3 hypotheses + top-2 active debates +
top-3 open questions for any registered field. Re-generated weekly
so it stays current.
scidex/atlas/intro_pages.py:compose_intro(field_slug: str, audience:
Literal['undergrad', 'med_student', 'phd', 'expert'] =
'phd') -> dict returns Markdown organized as:brief_writer.compose_brief under the hood with aGET /intro/{field_slug}?audience=med_student route inapi.py. Renders Markdown to HTML with section anchors,intro_fields table seeded with attau-propagation,apoe4-risk-mechanisms, microglia-aging-trem2,synaptic-pruning-c1q, mitochondrial-dysfunction-ad,gut-brain-axis-pd, lewy-body-formation, prion-like-
spread, tdp43-aggregation, neurovascular-unit,glymphatic-clearance, etc.
intro_page artifactregister_artifact) so it's discussablescidex-intro-pages-weekly.timer and on-demand by?refresh=1 (admin only).
GET /intro index lists all 25+ fields grouped by layercompose_intro;composite_score filtered bytag = field_slug, top-2 most-recent active debates, top-3importance_elo.
compose_brief(audience=...)med_student andundergrad.
<a href="#glossary-{term}">term</a>intro_fields and re-runscompose_intro for each field × default audience; on-demandeducational=true soq-synth-brief-writer-agent — composition primitive.{
"_gate_retry_count": 1,
"_gate_last_decision": "REJECT",
"_gate_last_reason": "api_routes/forge.py is fully deleted (260-line all-deletion in diff stat) but its import `from api_routes.forge import router as _forge_router` at api.py:1257 appears as an unchanged context line in the diff \u2014 not removed \u2014 which will cause ImportError on startup; api_shared/nav.py (112 lines, all deleted) has the same problem with the bare `from api_shared.nav import (nav_html, ...)` at api.py:61.",
"_gate_judge_used": "max:claude-sonnet-4-6",
"_gate_last_instructions": "Either keep api_routes/forge.py or remove `from api_routes.forge import router as _forge_router` and the corresponding `app.include_router(_forge_router)` call from api.py.\nEither keep api_shared/nav.py or remove `from api_shared.nav import (nav_html, breadcrumb_html, page_template, _canonicalize_local_url, infinite_scroll_html, inject_nav, CSS, NAV)` at api.py:61 and replace all usage sites with an alternative (inline or a surviving module).",
"_gate_branch": "orchestra/task/893283bf-auto-generated-intro-to-field-pages-from",
"_gate_changed_files": [
".orchestra-slot.json",
"agent.py",
"api.py",
"api_routes/api_v2.py",
"api_routes/forge.py",
"api_routes/senate.py",
"api_routes/watchlist_routes.py",
"api_shared/nav.py",
"deploy/scidex-expert-review-queue-weekly.service",
"deploy/scidex-expert-review-queue-weekly.timer",
"docs/api/v2-stability.md",
"docs/planning/specs/q-crowd-expert-review-queue_spec.md",
"docs/planning/specs/q-crowd-replication-bounties_spec.md",
"docs/planning/specs/q-edu-intro-to-field_spec.md",
"docs/planning/specs/q-fed-public-read-api-v2_spec.md",
"docs/planning/specs/q-notif-watchlist-engine_spec.md",
"docs/planning/specs/q-ri-waste-detector_spec.md",
"docs/planning/specs/q-tool-crispr-screen-mageck-pipeline_spec.md",
"docs/planning/specs/q-tool-structural-biology-pipeline_spec.md",
"migrations/123_add_replication_contest_tables.py",
"migrations/138_human_expert_reviews.py",
"migrations/20260428_watchlists.sql",
"migrations/add_crispr_screen_run.py",
"migrations/add_intro_fields_table.py",
"migrations/add_target_dossier_table.py",
"scidex/agents/__init__.py",
"scidex/agents/invoke.py",
"scidex/agents/tests/test_invoke_parsing.py",
"scidex/agora/skill_evidence.py",
"scidex/atlas/intro_pages.py",
"scidex/atlas/material_change.py",
"scidex/atlas/watchlist_match.py",
"scidex/exchange/replication_contests.py",
"scidex/forge/crispr_libraries/brunello.tsv",
"scidex/forge/crispr_libraries/geckov2.tsv",
"scidex/forge/crispr_screen.py",
"scidex/forge/structural_biology.py",
"scidex/forge/tools.py",
"scidex/senate/expert_review_queue.py",
"scidex/senate/scheduled_tasks.py",
"scidex/senate/waste_detector.py",
"scripts/seed_replication_contests.py",
"tests/test_api_v2.py",
"tests/test_crispr_screen.py",
"tests/test_exchange_replication_contests.py",
"tests/test_expert_review_queue.py",
"tests/test_intro_pages.py",
"tests/test_target_dossier.py",
"tests/test_waste_detector.py",
"tests/test_watchlist.py"
],
"_gate_diff_stat": ".orchestra-slot.json | 2 +-\n agent.py | 21 +-\n api.py | 1793 +++-----------------\n api_routes/api_v2.py | 522 ------\n api_routes/forge.py | 260 ---\n api_routes/senate.py | 59 +-\n api_routes/watchlist_routes.py | 283 ---\n api_shared/nav.py | 112 --\n deploy/scidex-expert-review-queue-weekly.service | 14 -\n deploy/scidex-expert-review-queue-weekly.timer | 10 -\n docs/api/v2-stability.md | 129 --\n .../specs/q-crowd-expert-review-queue_spec.md | 82 +-\n .../specs/q-crowd-replication-bounties_spec.md | 28 +-\n docs/planning/specs/q-edu-intro-to-field_spec.md | 62 +\n .../specs/q-fed-public-read-api-v2_spec.md | 25 -\n .../specs/q-notif-watchlist-engine_spec.md | 40 +-\n docs/planning/specs/q-ri-waste-detector_spec.md | 25 -\n .../q-tool-crispr-screen-mageck-pipeline_spec.md | 34 -\n .../q-tool-structural-biology-pipeline_spec.md | 11 -\n migrations/123_add_replication_contest_tables.py | 141 --\n migrations/138_human_expert_reviews.py | 75 -\n migrations/20260428_watchlists.sql | 37 -\n migrations/add_crispr_screen_run.py | 56 -\n migrations/add_intro_fields_table.py | 90 +\n migrations/add_target_dossier_table.py | 57 -\n scidex/agents/__init__.py | 7 +-\n scidex/agents/{invocation.py => invoke.py} | 0\n scidex/agents/tests/test_invoke_parsing.py | 2 +-\n scidex/agora/skill_evidence.py | 34 -\n scidex/atlas/intro_pages.py | 528 ++++++\n scidex/atlas/material_change.py | 91 -\n scidex/atlas/watchlist_match.py | 152 --\n scide",
"_gate_history": [
{
"ts": "2026-04-27 17:29:58",
"decision": "REJECT",
"reason": "api_routes/forge.py is fully deleted (260-line all-deletion in diff stat) but its import `from api_routes.forge import router as _forge_router` at api.py:1257 appears as an unchanged context line in the diff \u2014 not removed \u2014 which will cause ImportError on startup; api_shared/nav.py (112 lines, all deleted) has the same problem with the bare `from api_shared.nav import (nav_html, ...)` at api.py:61.",
"instructions": "Either keep api_routes/forge.py or remove `from api_routes.forge import router as _forge_router` and the corresponding `app.include_router(_forge_router)` call from api.py.\nEither keep api_shared/nav.py or remove `from api_shared.nav import (nav_html, breadcrumb_html, page_template, _canonicalize_local_url, infinite_scroll_html, inject_nav, CSS, NAV)` at api.py:61 and replace all usage sites with an alternative (inline or a surviving module).",
"judge_used": "max:claude-sonnet-4-6",
"actor": "minimax:73",
"retry_count": 1
}
]
}