feat(uploads): ADR-0011 manual-upload safety gate (Now slice)
#2
by anne-voigt - opened
Standalone, non-agent-facing upload gate (quarantine -> validate -> admin register). Inert until wired to a UI: no MCP tool, no server.py change, no new dependency. See docs/adr/ADR-0011-upload-safety-gate.md. 24 new tests green. This PR does NOT deploy until merged into main.
Cannot merge
This branch has merge conflicts in the following files:
- .gitattributes
- .gitignore
- README.md
- app.py
- docs/adr/ADR-0003-spaces-dev-mode.md
- docs/adr/ADR-0005-private-storage-persistence.md
- docs/adr/ADR-0006-loveless-single-cell-serving.md
- docs/adr/ADR-0010-dataset-integrity-verification.md
- docs/adr/ADR-0011-upload-safety-gate.md
- gradio_ui.py
- prompts.yaml
- requirements.in
- requirements.txt
- scripts/_gse205154_sears_common.py
- scripts/_investigate_gpl6244.py
- scripts/_precompute_common.py
- scripts/_verify_precompute.py
- scripts/assemble_cptac_pda.py
- scripts/assemble_cptac_pda_counts.py
- scripts/assemble_gse15471.py
- scripts/assemble_gse16515_mayo.py
- scripts/assemble_gse17891.py
- scripts/assemble_gse205154_sears.py
- scripts/assemble_gse205154_sears_counts.py
- scripts/assemble_gse205154_sears_tmm.py
- scripts/assemble_gse21501.py
- scripts/assemble_gse28735_pdac.py
- scripts/assemble_gse57495.py
- scripts/assemble_gse62165_jiang.py
- scripts/assemble_gse71729_moffitt.py
- scripts/assemble_gse71989_chen.py
- scripts/assemble_nones.py
- scripts/assemble_paca_ca.py
- scripts/fix_gse50827_nones_symbols.py
- scripts/load_and_validate_geo.py
- scripts/requirements-dev.txt
- scripts/security_scan.sh
- scripts/verify_s3_sink.py
- security/.gitignore
- security/sbom.json
- server.py
- src/agent.py
- src/cache.py
- src/core/__init__.py
- src/core/combine.py
- src/core/constants.py
- src/core/data_io.py
- src/core/integrity.py
- src/core/perf.py
- src/core/types.py
- src/datasets/manifest_schema.py
- src/datasets/registry.py
- src/logging_sink.py
- src/managers/__init__.py
- src/managers/execution/__init__.py
- src/managers/execution/python_executor.py
- src/managers/hf_storage.py
- src/managers/support/__init__.py
- src/managers/support/console_display.py
- src/managers/support/package_manager.py
- src/managers/tools/__init__.py
- src/managers/tools/builtin_tools.py
- src/managers/tools/mcp_manager.py
- src/managers/tools/tool_manager.py
- src/managers/tools/tool_registry.py
- src/managers/workflow/__init__.py
- src/managers/workflow/plan_manager.py
- src/managers/workflow/state_manager.py
- src/managers/workflow/workflow_engine.py
- src/mcp_server/dependencies/r_dependencies.py
- src/semantic/__init__.py
- src/semantic/gene_sets.py
- src/semantic/gene_symbols.py
- src/semantic/regulators.py
- src/semantic/result_annotation.py
- src/semantic/semantic_audit.py
- src/tools/bulk_dataset_tools.py
- src/tools/bulk_rnaseq/__init__.py
- src/tools/bulk_rnaseq/_base.py
- src/tools/bulk_rnaseq/tools.py
- src/tools/dataset_tools/__init__.py
- src/tools/dataset_tools/_base.py
- src/tools/dataset_tools/catalog.py
- src/tools/dataset_tools/metadata.py
- src/tools/example.py
- src/tools/integration_tools.py
- src/tools/licenses.py
- src/tools/orthologs.py
- src/tools/rna/__init__.py
- src/tools/rna/_base.py
- src/tools/rna/analysis.py
- src/tools/rna/loaders.py
- src/tools/rna_pstime.py
- src/tools/rna_sc.py
- src/tools/rna_visium.py
- src/uploads/__init__.py
- src/uploads/promotion.py
- src/uploads/records.py
- src/uploads/staging.py
- src/uploads/validation.py
- src/workflows/activity_scoring.py
- src/workflows/activity_stats.py
- src/workflows/concordance.py
- src/workflows/geo.py
- src/workflows/integration.py
- src/workflows/manifest_data_validation.py
- src/workflows/meta_analysis.py
- src/workflows/metadata_validation.py
- src/workflows/microarray.py
- src/workflows/sanity_checks.py
- src/workflows/signatures.py
- src/workflows/survival.py
- tests/test_activity_scoring.py
- tests/test_bulk_dataset_url_loading.py
- tests/test_clinical_join.py
- tests/test_combine_conformance.py
- tests/test_compare_activity_by_group.py
- tests/test_concordance.py
- tests/test_concordance_tool.py
- tests/test_curated_sample_filter.py
- tests/test_data_type_detection.py
- tests/test_dataset_manifest_contract.py
- tests/test_dataset_registry.py
- tests/test_de_batch_covariate.py
- tests/test_deseq2_workflow.py
- tests/test_enrichment_contamination_wiring.py
- tests/test_gdc_star_counts.py
- tests/test_geo_workflow.py
- tests/test_gpl_annotation.py
- tests/test_gse16515_integration.py
- tests/test_gse28735_integration.py
- tests/test_gse62165_integration.py
- tests/test_gse71989_integration.py
- tests/test_inmemory_adata_cache.py
- tests/test_integrate_datasets_tool.py
- tests/test_integration_mode_a.py
- tests/test_integration_plan_tool.py
- tests/test_loading_plan_h5ad.py
- tests/test_loading_plan_url.py
- tests/test_logging_sink.py
- tests/test_manifest_data_validation.py
- tests/test_meta_analysis.py
- tests/test_meta_analyze_tool.py
- tests/test_metadata_validation.py
- tests/test_metadata_validation_helpers.py
- tests/test_microarray_workflow.py
- tests/test_moffitt_integration.py
- tests/test_planner_tool.py
- tests/test_pool_cohorts_tool.py
- tests/test_rna_sc_loader.py
- tests/test_sanity_checks.py
- tests/test_semantic_audit.py
- tests/test_semantic_gene_symbols.py
- tests/test_semantic_regulators.py
- tests/test_semantic_result_annotation.py
- tests/test_signatures.py
- tests/test_tcga_paad_integration.py
- tests/test_tool_registry.py
- tests/test_tool_response_schemas.py
- tests/test_upload_gate.py
- tests/test_url_counts_loader.py
- ui_formatting.py