{"id":35013350,"url":"https://github.com/yuummmer/fairy-lab","last_synced_at":"2026-05-22T06:02:47.412Z","repository":{"id":316367512,"uuid":"1062956312","full_name":"yuummmer/fairy-lab","owner":"yuummmer","description":"a FAIRy prototype that validates and guides datasets through repository-ready, standards-compliant metadata.","archived":false,"fork":false,"pushed_at":"2025-12-03T17:33:03.000Z","size":54251,"stargazers_count":1,"open_issues_count":63,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-06T22:30:10.758Z","etag":null,"topics":["bioinformatics","data-validation","fair-data","metadata","reproducibility"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yuummmer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-24T01:12:30.000Z","updated_at":"2025-12-03T17:33:01.000Z","dependencies_parsed_at":"2025-10-25T08:21:34.845Z","dependency_job_id":null,"html_url":"https://github.com/yuummmer/fairy-lab","commit_stats":null,"previous_names":["yuummmer/metadata-wizard","yuummmer/fairy-skeleton","yuummmer/fairy-lab"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yuummmer/fairy-lab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuummmer%2Ffairy-lab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuummmer%2Ffairy-lab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuummmer%2Ffairy-lab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuummmer%2Ffairy-lab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yuummmer","download_url":"https://codeload.github.com/yuummmer/fairy-lab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuummmer%2Ffairy-lab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28072707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-27T02:00:05.897Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","data-validation","fair-data","metadata","reproducibility"],"created_at":"2025-12-27T05:05:57.489Z","updated_at":"2025-12-27T05:05:57.819Z","avatar_url":"https://github.com/yuummmer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FAIRy Lab\n\n\u003e **External name:** FAIRy Lab (GitHub: `FAIRy-lab`) • **Internal name:** `fairy-skeleton`  \n\u003e Web + CLI demo runner for [FAIRy Core](https://github.com/yuummmer/fairy-core)\n\nFAIRy Lab is the self-hosted demo environment for **FAIRy** — a local-first validator and packager for FAIR-friendly, repository-ready datasets.\n\nThis repo gives you:\n\n- A small CLI demo runner (`fairy-skel`) that calls the real engine in **FAIRy Core**\n- Toy datasets and configs that show PASS / WARN / FAIL workflows\n- Example outputs you can use in demos, talks, and screenshots\n- (Experimental) a Streamlit app entry point (`app.py`) for a lightweight web UI\n\n**FAIRy Lab is about workflows and demos.**  \n**FAIRy Core is where the validator engine and rulepacks live.**\n\n---\n\n## What FAIRy Lab is / isn’t\n\n**FAIRy Lab _is_:**\n\n- A reference, self-hosted “lab” for exploring FAIRy:\n  - Upload / point at sample TSVs\n  - Run rulepacks via `fairy-skel`\n  - Inspect findings, PASS/WARN/FAIL, and reports\n- A place to keep:\n  - Demo configs\n  - Toy datasets\n  - Example outputs (for screenshots, grants, and onboarding)\n\n**FAIRy Lab _is not_:**\n\n- The validator engine (that’s **FAIRy Core**)\n- A multi-tenant hosted service (that would be a future “FAIRy Preflight+ / Teams” product)\n\nAll actual validation logic, rulepacks, and the `fairy` CLI live in  \n👉 **[FAIRy Core](https://github.com/yuummmer/fairy-core)**\n\n---\n\n## TL;DR (quick start)\n\nAssuming `fairy-core` and `fairy-skeleton` are siblings:\n\n```bash\n# 1) Create a virtualenv\npython -m venv .venv\nsource .venv/bin/activate\n\n# 2) Install FAIRy Core (engine)\ncd ../fairy-core\npip install -e .\n\n# 3) Install FAIRy Lab (this repo)\ncd ../fairy-skeleton\npip install -e .\n\n# 4) List and run demos\nfairy-skel demos\nfairy-skel run bulk_rnaseq_min     # intentionally FAILS (shows findings)\nfairy-skel run bulk_rnaseq_pass    # clean PASS\n\n```\nOutputs are written to each demo’s out/ path defined in its config.yaml.\n---\n## Requirements\n- Python 3.10+ (FAIRy-core polyfills datetime.UTC for 3.10)\n- Unix-like shell (Linux/macOS/WSL)\n- pip and venv (or conda/mamba equivalent)\n\n---\n## Getting Started\n1. Clone both repos side-by-side (recommended layout):\nprojects/\n  fairy-core/\n  fairy-skeleton/\n2. Install:\n\n```bash\ncd projects/fairy-core\npython -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install -e .\n\ncd ../fairy-skeleton\npip install -e .\n\n```\n3. Run a demo:\n```bash\nfairy-skel demos\nfairy-skel run bulk_rnaseq_min   # FAIL + WARN (shows findings)\nfairy-skel run bulk_rnaseq_pass  # PASS (submission_ready: True)\n\n```\nOr call the engine directly\n```bash\nfairy preflight \\\n  --rulepack /absolute/path/to/fairy-core/src/fairy/rulepacks/GEO-SEQ-BULK/v0_1_0.json \\\n  --samples  /absolute/path/to/samples.tsv \\\n  --files    /absolute/path/to/files.tsv \\\n  --out      /path/to/out/report.json\n\n```\n\n## 🧪 Demos\nEach demo is a folder under demos/\u003cname\u003e with a config.yaml:\n```yaml\nrulepack: /abs/path/to/fairy-core/src/fairy/rulepacks/GEO-SEQ-BULK/v0_1_0.json\ninputs:\n  samples: demos/\u003cname\u003e/inputs/samples.tsv\n  files:   demos/\u003cname\u003e/inputs/files.tsv\nout: demos/\u003cname\u003e/out/report.json\n```\nCurrent demos:\n- bulk_rnaseq_min - intentionally FAIL + WARN to show findings\n- bulk_rnaseq_pass - clean PASS\n\nList all the demos:\n```bash\nfairy-skel demos\n```\nRun one:\n```bash\nfairy-skel run \u003cname\u003e\n```\n---\n## 🗺️ Roadmap (v0.1 scope)\nStreamlit Export \u0026 Validate tab wired to backend (warn-mode).\n\nDeterministic report.json writer validated by JSON Schema.\n\nGolden fixture test for bad.csv.\n\n(See GitHub issues for v0.2 items like bundles, manifests, ZIP export, and provenance.)\n---\n## Create your own demo\n```bash\nmkdir -p demos/my_demo/inputs\n\n# Provide TAB-separated TSVs\n# samples.tsv\ncat \u003e demos/my_demo/inputs/samples.tsv \u003c\u003c'TSV'\nsample_id\torganism\tcollection_date\nS1\tHomo sapiens\t2025-01-01\nS2\tHomo sapiens\t2025-01-02\nTSV\n\n# files.tsv\ncat \u003e demos/my_demo/inputs/files.tsv \u003c\u003c'TSV'\nsample_id\tpath\nS1\treads/S1_R1.fastq.gz\nS2\treads/S2_R1.fastq.gz\nTSV\n\n# config.yaml\ncat \u003e demos/my_demo/config.yaml \u003c\u003c'YAML'\nrulepack: /absolute/path/to/fairy-core/src/fairy/rulepacks/GEO-SEQ-BULK/v0_1_0.json\ninputs:\n  samples: demos/my_demo/inputs/samples.tsv\n  files:   demos/my_demo/inputs/files.tsv\nout: demos/my_demo/out/report.json\nYAML\n\n# Try it\nfairy-skel run my_demo\n\n```\nTip: you can also point inputs: to files inside fairy-core/demos/... via absolute paths or symlinks.\n---\n## Repo structure \u0026 legacy note\n- fairy_skeleton/ — small demo runner CLI (fairy-skel)\n- demos/ — demo configs + inputs + outputs\n- scripts/run_demo.sh — helper invoked by the runner\n- _legacy/ — archived code moved out of the package; not maintained.\nWe prefer our branch during merges for this folder via .gitattributes.\n\nPackaging: only fairy_skeleton* is packaged. The validator engine lives in FAIRy-core.\n---\n## FAIRy-core + versions\n- Engine repo: https://github.com/yuummmer/fairy-core\n- CLI commands available there: fairy validate, fairy preflight\n- This skeleton requires FAIRy-core ≥ 0.1.0\n\n(Coming soon: a tiny matrix mapping skeleton tags → minimum core version.)\n---\n## Development \u0026 tests\nSkeleton has a minimal test/smoke setup. Most tests live in FAIRy-core.\n```bash\npytest -q\n```\nOptional GitHub Actions “smoke” workflow suggestion:\n\n- run pip install -e . (core + skeleton)\n- fairy-skel run bulk_rnaseq_min and assert an output file exists\n---\n## Issues \u0026 support\n- Engine/validator bugs → FAIRy-core issues\n- Demo runner or example configs here → this repo’s issues\n\nSecurity reports should target FAIRy-core.\n---\n## 📜 License\n\n- **FAIRy Lab** (this repo, internally `fairy-skeleton`):  \n  Application / UI code in this repository is licensed under the **MIT License**.  \n  See [`LICENSE`](./LICENSE).\n\n- **FAIRy-core (engine)**:  \n  Licensed under **AGPL-3.0-only** in the core repository.\n\nWhen this Lab UI is used together with FAIRy-core, the AGPL terms apply to\nFAIRy-core and any modifications to it. The Lab code in this repo remains MIT,\nand may also be adapted to work with other backends.\n\n- **Third-party components**:  \n  See [`THIRD_PARTY_LICENSES.md`](./THIRD_PARTY_LICENSES.md) if present.\n\nThe underlying engine, **FAIRy-core**, is licensed under **AGPL-3.0-only**  \n(see the core repository for details). If you embed or call FAIRy-core as part\nof a product or service, the AGPL terms for FAIRy-core still apply unless you\nhave a separate commercial license for the core. For commercial licensing\nquestions around FAIRy-core, contact **hello@datadabra.com**.\n---\n\n## 📸 Screenshot\n\n### Dashboard view\n![FAIRy Dashboard](FAIRy_Dash.png)\n---\n\n## Citation\n\nIf you use FAIRy in demos, talks, or publications, please cite:\n\nFAIRy (v0.1). Local-first validator for FAIR, AI-ready research data.  \nFAIRy-core (engine): https://github.com/yuummmer/fairy-core  \nFAIRy Lab (UI \u0026 labs): https://github.com/yuummmer/FAIRy-lab\n\nFor more detailed citation metadata (authors, version, DOI if applicable),\nsee [`CITATION.cff`](./CITATION.cff).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuummmer%2Ffairy-lab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuummmer%2Ffairy-lab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuummmer%2Ffairy-lab/lists"}