Codex supervisor issue created from Rye's 2026-06-20 sprint directives. This is the durable operating contract for Agent A (A100 science loop) and Agent B (Codex supervisor/PR gate) until Tuesday.
North star
Build a measured, inspectable organoid protocol workbench on real data:
- real organoid paper
- field-grounded extraction with verbatim evidence and three-state reporting
- live SRI / Cellosaurus grounding with honest unresolved states
- Biolink-validated KGX export
- minimal query layer / TRAPI shape where feasible
- human-verified gold eval with generated metrics
- MIOR completeness scoring if S-tier is locked
Do not optimize for a prettier demo or a larger unmeasured corpus. Optimize for trust.
Hard merge rules
These are supervisor gates:
- No unsupported protocol fact. Evidence or explicit unresolved/requires-review state.
- Grounded does not mean correct; evidence must support the field/type/value/relation, not merely contain a nearby quote.
- Preserve
reported, not_reported, not_extracted, and not_applicable distinctions.
- No metric, count, or rate in README/docs unless generated by a committed artifact.
- No fabricated identifiers. If SRI/Cellosaurus cannot resolve an entity, use
grounding_status: not_found and a null CURIE.
- Grounding has three states:
resolved, not_found, not_attempted; resolved requires a real service response cached as a fixture/artifact.
- Before building against an external service/library, make one real call and commit the captured response as a fixture so tests run offline.
- Gold is human-verified or it does not count. Agents may draft candidate gold, but Rye must sign off with
verified_by.
- New behavior needs tests and must keep
pytest -q plus the existing eval gate green.
- Corpus size, grounding rate, and per-type counts must come from a single generated manifest.
- Claim precisely: do not say
knowledge graph/ontology-grounded unless the committed artifacts earn it.
- Local-first models stay; public SRI/Cellosaurus calls are allowed and should be cached.
Agent split
Agent A / A100 owns:
- Tier-1/2 extraction quality and real-corpus runs.
pipeline/ground.py live SRI Name Resolver + Node Normalizer + Cellosaurus grounding.
- Captured SRI fixtures and offline tests.
- Full grounding run and coverage artifact.
- LLM eval over human-verified gold.
- Error taxonomy, failure examples, confidence calibration if time permits.
Agent B / Codex owns:
- PR gate and merge discipline.
- Dependency/Makefile/CI hardening.
- Biolink/KGX adapter and validation.
- Minimal TRAPI responder if S-tier is green.
- MIOR module mapping and completeness scorer.
- UCUM/unit grounding, eval harness extensions, docs, and number reconciliation.
Tier S backlog: protect first
S1: Live SRI entity grounding
Acceptance:
pipeline/ground.py calls SRI Name Resolver and Node Normalizer and caches responses.
- At least 5 named reagents have captured real responses showing correct CHEBI/PR CURIEs.
- Reagents, organoid tissue, source cell type, species, and cell line/RRID have honest
grounding_status values.
- Coverage table is generated from artifacts, not hand-typed.
- Zero/ambiguous hits are
not_found, never guessed.
- Tests run offline against captured fixtures.
S2: Biolink-validated KGX export
Acceptance:
pipeline/export_kgx.py emits nodes.jsonl and edges.jsonl in KGX shape.
- Nodes carry Biolink category and CURIE when resolved; ungrounded nodes remain present with
grounding_status: not_found.
- Predicates/categories are real Biolink terms validated with
bmt/kgx or equivalent committed validation report.
- The served/demo KG is regenerated from KGX, not a parallel graph.
- Documentation maps existing tables to KGX equivalents.
S3: Human-gold LLM eval loop
Acceptance:
- 8-12 real corpus papers have gold records with
verified_by.
- Agents may prefill candidates, but no circular model-vs-model gold.
- Eval outputs generated artifacts:
evaluation_summary.json, error_analysis.md or equivalent.
- Metrics include scalar exact match, reporting-status accuracy, signaling-factor P/R/F1, unit normalization, grounding validity, wrong-bucket/dup rate.
- README/docs only quote numbers generated by artifacts.
Tier A after S is locked
- Minimal TRAPI 1.5 responder for 1-2 canned query shapes; validate with
reasoner-validator.
- MIOR field mapping and per-paper/corpus completeness score generated from extraction artifacts.
- UCUM unit grounding with tests; do not force-normalize percent or conditioned-medium into false equivalence.
Immediate Codex supervisor behavior
For future PRs, request changes when a PR:
- Adds IDs/CURIEs without captured service evidence or explicit
not_found.
- Adds metrics or README claims not generated by committed artifacts.
- Claims gold/eval without
verified_by human signoff.
- Adds KG/TRAPI/Biolink claims without validation artifacts.
- Breaks the prediction JSON handoff without a versioned schema decision.
- Ships generated data, full text, figures, model transcripts, caches, or local-only artifacts.
Every heartbeat should prioritize open PRs first, then check whether the loop is moving toward S1 -> S2 -> S3 rather than drifting into lower-value UI or corpus-size work.
Codex supervisor issue created from Rye's 2026-06-20 sprint directives. This is the durable operating contract for Agent A (A100 science loop) and Agent B (Codex supervisor/PR gate) until Tuesday.
North star
Build a measured, inspectable organoid protocol workbench on real data:
Do not optimize for a prettier demo or a larger unmeasured corpus. Optimize for trust.
Hard merge rules
These are supervisor gates:
reported,not_reported,not_extracted, andnot_applicabledistinctions.grounding_status: not_foundand a null CURIE.resolved,not_found,not_attempted;resolvedrequires a real service response cached as a fixture/artifact.verified_by.pytest -qplus the existing eval gate green.knowledge graph/ontology-groundedunless the committed artifacts earn it.Agent split
Agent A / A100 owns:
pipeline/ground.pylive SRI Name Resolver + Node Normalizer + Cellosaurus grounding.Agent B / Codex owns:
Tier S backlog: protect first
S1: Live SRI entity grounding
Acceptance:
pipeline/ground.pycalls SRI Name Resolver and Node Normalizer and caches responses.grounding_statusvalues.not_found, never guessed.S2: Biolink-validated KGX export
Acceptance:
pipeline/export_kgx.pyemitsnodes.jsonlandedges.jsonlin KGX shape.grounding_status: not_found.bmt/kgxor equivalent committed validation report.S3: Human-gold LLM eval loop
Acceptance:
verified_by.evaluation_summary.json,error_analysis.mdor equivalent.Tier A after S is locked
reasoner-validator.Immediate Codex supervisor behavior
For future PRs, request changes when a PR:
not_found.verified_byhuman signoff.Every heartbeat should prioritize open PRs first, then check whether the loop is moving toward S1 -> S2 -> S3 rather than drifting into lower-value UI or corpus-size work.