> ## Continuous-process anchor
>
> This spec describes an instance of one of the retired-script themes
> documented in docs/design/retired_scripts_patterns.md. Before
> implementing, read:
>
> 1. The "Design principles for continuous processes" section of that
> atlas — every principle is load-bearing. In particular:
> - LLMs for semantic judgment; rules for syntactic validation.
> - Gap-predicate driven, not calendar-driven.
> - Idempotent + version-stamped + observable.
> - No hardcoded entity lists, keyword lists, or canonical-name tables.
> - Three surfaces: FastAPI + orchestra + MCP.
> - Progressive improvement via outcome-feedback loop.
> 2. The theme entry in the atlas matching this task's capability:
> A6 (pick the closest from Atlas A1–A7, Agora AG1–AG5,
> Exchange EX1–EX4, Forge F1–F2, Senate S1–S8, Cross-cutting X1–X2).
> 3. If the theme is not yet rebuilt as a continuous process, follow
> docs/planning/specs/rebuild_theme_template_spec.md to scaffold it
> BEFORE doing the per-instance work.
>
> **Specific scripts named below in this spec are retired and must not
> be rebuilt as one-offs.** Implement (or extend) the corresponding
> continuous process instead.
Recurring CI task for Quest 17 (Rich Artifacts). Scan for completed analyses that lack notebooks, generate notebook stubs for the top 3 missing, verify /artifacts and /notebooks pages load correctly, and report coverage percentage to track progress toward 100% notebook coverage.
SELECT id, title FROM analyses WHERE status='completed' AND id NOT IN (SELECT DISTINCT analysis_id FROM notebooks WHERE analysis_id IS NOT NULL)post_process.py or direct DB insert with summary contentnotebooks table with analysis_id column(timestamped entries added during execution)
task-083db551-3597-46e6-94a0-714ea9087bb3.ci_notebook_coverage.py implementation./artifacts and /notebooks routes, and record coverage snapshot.timeout 300 python3 ci_notebook_coverage.py43 / 43 completed analyses covered (100.00%)0timeout 120 scidex status → api and nginx active200 /api/status200 /artifacts200 /notebooks200 /notebook/nb-SDA-2026-04-04-gap-senescent-clearance-neuro (existing notebook still accessible)
timeout 300 python3 link_checker.py1826 pages, 2064 links, 0 concrete broken linksscidex status, and read task spec + quest priorities.ci_notebook_coverage.py for recurring Artifact CI coverage checks and stub generation.35 / 41 covered = 85.37%.SDA-2026-04-04-gap-tau-prop-20260402003221astrocyte-subtypesgba-pd
GET /api/status → 200GET /artifacts → 200GET /notebooks → 200GET /notebook/nb-SDA-2026-04-04-gap-senescent-clearance-neuro → 200
timeout 300 python3 link_checker.py → no persistent broken links (0 broken), transient local API outages auto-suppressed by checker.python3 ci_notebook_coverage.pyapi.py.site/notebooks/, verify /artifacts and /notebooks route health, and record coverage metrics.scripts/artifacts_notebook_coverage_ci.py to automate Quest 17 coverage checks and top-missing stub generation.timeout 180 python3 scripts/artifacts_notebook_coverage_ci.py --db-path postgresql://scidex --notebooks-dir site/notebooks --limit 346/60 completed analyses (76.7%).SDA-2026-04-04-gap-neuro-microglia-early-ad-20260404SDA-2026-04-04-gap-tau-prop-20260402003221sda-2026-04-01-001
site/notebooks/ (.ipynb + .html for each analysis).timeout 120 scidex status => api and nginx active.curl checks after transient outage recovery:200 /artifacts200 /notebooks200 /api/status302 /200 /notebooks/SDA-2026-04-04-gap-neuro-microglia-early-ad-20260404.htmltimeout 300 python3 link_checker.py completed with no broken-link report; run skipped deep crawl due repeated API readiness timeouts (transient service churn).
timeout 300 python3 ci_notebook_coverage.py41 / 43 completed analyses covered (95.35%)2 (below top-3 cap)gut-brain-adtrem2-adsite/notebooks/gut-brain-ad.ipynbsite/notebooks/gut-brain-ad.htmlsite/notebooks/trem2-ad.ipynbsite/notebooks/trem2-ad.html
timeout 120 scidex status → api active, nginx active200 /api/status200 /artifacts200 /notebooks200 /notebook/nb-SDA-2026-04-04-gap-senescent-clearance-neuro (existing notebook route still healthy)
timeout 300 python3 link_checker.py1584 pages, 1737 links, 8 broken refs; most failures were auto-classified as transient outage retrieslogs/link-check-latest.json
95.35% with no regression on core artifact routes.timeout 300 python3 ci_notebook_coverage.py100.00% (46/46 completed analyses covered)200 /api/status200 /artifacts200 /notebooks200 /notebook/nb-SDA-2026-04-04-gap-senescent-clearance-neuro (existing notebook still accessible)
timeout 300 python3 link_checker.pylogs/link-check-latest.json
task-bc5704ce-f2df-401b-a640-f57ded341ced.8e893dbe) included scope creep: hardcoded DB_PATH, removed participant_contributions.py + 4 API endpoints + migration + script, deleted 3 spec files, added .ipynb files to repo.agent_registry.py DB_PATH env-var fallbackapi.py participant contribution endpointsparticipant_contributions.py, migrations/060_agent_contribution_ledger.py, scripts/register_agent_finding.pytimeout 300 python3 ci_notebook_coverage.pydaad56e4task-bc5704ce-f2df-401b-a640-f57ded341ced.timeout 300 python3 ci_notebook_coverage.py --no-registerSDA-2026-04-04-gap-epigenetic-reprog-b685190e (missing_ref, score 0.5609)SDA-2026-04-04-analysis_sea_ad_001 (missing_ref, score 0.5454)SDA-2026-04-09-gap-debate-20260409-201742-ca7016f1 (missing_ref, score 0.0000)SDA-2026-04-08-gap-pubmed-20260406-062218-5c7f15f4 (stale_ref)SDA-2026-04-08-gap-pubmed-20260406-062111-db808ee9 (stale_ref)SDA-2026-04-08-gap-debate-20260406-062033-fecb8755 (stale_ref)SDA-2026-04-03-gap-seaad-v4-20260402065846 (stale_ref)SDA-2026-04-03-gap-seaad-v2-20260402032945 (stale_ref)
sqlite3.DatabaseError: database disk image is malformed in artifacts table INSERT — DB corruption confirmed by PRAGMA integrity_check. Registration skipped this cycle; stubs written only to worktree site/.200 /api/status, 200 /artifacts, 200 /notebookssite/notebooks/ in worktree (will sync via orchestra push)7d1532d1timeout 300 python3 ci_notebook_coverage.pySDA-2026-04-03-gap-aging-mouse-brain-v2-20260402SDA-2026-04-06-gap-pubmed-20260406-041428-e14e6524SDA-2026-04-04-gap-debate-20260403-222510-20260402
200 /api/status, 200 /artifacts, 200 /notebookstimeout 300 python3 ci_notebook_coverage.py --no-registerSDA-2026-04-04-gap-apoe4-lipid-metabolism (1 analysis without notebook ref)SDA-2026-04-04-gap-20260404-052358 (stale notebook_path ref)
ci_notebook_coverage.py: added PRAGMA journal_mode=WAL and PRAGMA busy_timeout=30000 to _connect() function.200 /api/status200 /artifacts200 /notebooks
timeout 300 python3 link_checker.py (background)task-685ade6e-b77e-4794-a6f8-cf2e21e0780c.timeout 120 python3 ci_notebook_coverage.py --db-path postgresql://scidex --site-root /home/ubuntu/scidex/siteSDA-2026-04-03-gap-immune-atlas-neuroinflam-20260402 (missing_ref, score 0.5220, hyps 1)SDA-2026-04-12-gap-debate-20260410-112908-13c403ee (missing_ref, score 0.4800, hyps 1)SDA-2026-04-04-frontier-immunomics-e6f97b29 (missing_ref, score 0.0000, hyps 0)
200 /api/status200 /artifacts200 /notebooks
logs/notebook-coverage-latest.json, logs/notebook-coverage-latest.md, site/notebooks/notebook_coverage_summary_latest.mdtask-ef45217e-ef7d-4535-8cc9-d358abbf5258.timeout 120 python3 ci_notebook_coverage.py --db-path postgresql://scidex --site-root /home/ubuntu/scidex/siteSDA-2026-04-04-gap-epigenetic-reprog-b685190e (missing_ref, score 0.5204, hyps 7)SDA-2026-04-04-analysis_sea_ad_001 (missing_ref, score 0.5117, hyps 5)SDA-2026-04-11-gap-debate-20260410-111113-052488a8 (missing_ref, score 0.0000, hyps 0)
200 /api/status200 /artifacts200 /notebooks
logs/notebook-coverage-latest.json, logs/notebook-coverage-latest.md, site/notebooks/notebook_coverage_summary_latest.mdtask-730d0425-7980-4695-b216-6beac90b0603.timeout 120 python3 ci_notebook_coverage.py --db-path postgresql://scidex --site-root /home/ubuntu/scidex/siteSDA-2026-04-04-frontier-connectomics-84acb35a (missing_ref, score 0.0000, hyps 0)SDA-2026-04-04-frontier-proteomics-1c3dba72 (missing_ref, score 0.0000, hyps 0)SDA-2026-04-09-gap-debate-20260409-201742-ca7016f1 (missing_ref, score 0.0000, hyps 0)
200 /api/status200 /artifacts200 /notebooks
logs/notebook-coverage-latest.json, logs/notebook-coverage-latest.md, site/notebooks/notebook_coverage_summary_latest.mdtimeout 300 python3 ci_notebook_coverage.py in worktree task-33803258-84bd-4bde-873b-740f1de9d1c3SDA-2026-04-09-gap-debate-20260409-201742-1e8eb3bd (missing_ref)SDA-2026-04-09-gap-debate-20260409-201742-d279750b (missing_ref)SDA-2026-04-09-gap-debate-20260409-201742-5407d57d (missing_ref)SDA-2026-04-04-frontier-connectomics-84acb35a (stale_ref repair)SDA-2026-04-04-frontier-proteomics-1c3dba72 (stale_ref repair)
200 /api/status200 /artifacts200 /notebooks
logs/notebook-coverage-latest.json, logs/notebook-coverage-latest.md, site/notebooks/notebook_coverage_summary_latest.mdAGENTS.md, task spec, Quest 17 artifacts spec, artifact governance notes, and retired-script A6 continuous-process guidance.scripts/ci_notebook_coverage.py --report-only --ci-mode: completed-analysis notebook references were 131/131 but strict file coverage was 76/131 (58.02%) with 20 stale analyses.notebook_path refs and 55 stale notebook-link refs.INSERT OR REPLACE / INSERT OR IGNORE syntax; patched registration and artifact-link writes to PostgreSQL-compatible ON CONFLICT upserts and guarded inserts.131/131 (100.00%), missing refs 0, stale analysis refs 0, stale notebook-link refs 0; 55 CI notebook stubs were registered and 57 stale work items were repaired/rewritten.python3 -m py_compile scripts/ci_notebook_coverage.py passes./api/status, /artifacts, /notebooks, and an existing notebook route, but the live API returned 500s from psycopg_pool.PoolTimeout before route-specific handling. scidex services restart api was attempted but sandbox sudo restrictions prevented an effective restart.{
"requirements": {
"analysis": 6,
"reasoning": 6,
"safety": 6
},
"_stall_skip_providers": [
"glm"
],
"_stall_requeued_by": "codex",
"_stall_requeued_at": "2026-04-11 01:14:05",
"completion_shas": [
"33c273e72a089a74b1ee0197797af50bf23b9b0d",
"ad9bf94a2ce832f8cf9ff532e1bb768a204cf7f4",
"c49d36d582f324341cca8cc3962b44e280ed091d"
],
"completion_shas_checked_at": "2026-04-12T23:52:54.817452+00:00",
"completion_shas_missing": [
"582657caecc19b6ef14454f179660c13838ded3e",
"dd5d1a8352639df2b1b2b796825603cbea7ed4c1",
"15742b176648b8c20b685ff198eea20c72e4b662",
"9e28ff2900f928a7f4b79161c283690209ddbab1",
"fc16c2c5502564182d81f41b95c888393c5b9d38",
"fa68b788621fd797735429b75788eace82188817",
"f2e61f69b4a32c8e451a7bb5662c53aa51e5c214",
"bcbdb6b03c66b146c2b7a4252bf3917909783329",
"eb45d1beecc6b2c6203e118d696414b4f04ee59b",
"e8c872a67c65141019f330204d64399060edc62a",
"57b6ed1fc7f414ee003ef67d32ff731959548acf",
"fc7fbf64569e688d00b1bc4094bb01bd9fe2ec0d",
"b949eafe79b9d2acb6444e4554bb11131e1b62a7",
"daad56e4fdb9b3d01805d8943b89973a469ba7e9",
"8e893dbe5c497e7c1e971d27eb19f57697b93f03",
"7d1532d1796feec4a4507b8c30c6b8947e2b0030",
"5c5255413c79977fd2deb4118939a8d188b02dc0",
"37bcd6cef547ce03f2ef02ffd8fc566538e41700",
"ea169f27b906c14400a1e49c12490c185e0b5141",
"362921c2ff7379023e6c5767cb4307da64ef9db1",
"9bcd004998c98494dcc1217f1c0b2abdf856ae87",
"36ebb41506fdb48a1808cd6853c1219c71961a82",
"9c56a7d8abf48f00a0f7229208573c7cd6f8e4fa",
"391d16428c4354dd61a8a108349ccb985af769a7",
"463143363bf7d22b73fd99d493e8935c9ce0c2a0"
],
"_stall_skip_at": {},
"_stall_skip_pruned_at": "2026-04-14T10:37:14.022390+00:00"
}