技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
bio-foundation-housekeeping【数据与研究】Add LinkML/Pydantic metadata validation, Parquet tables, and a DuckDB catalog to a bioinformatics project. Use when records need schema checks or a queryable catalog.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Add validated metadata models and a queryable catalog to an existing bioinformatics project. This is an independent entry point when the layout already exists; if it does not, complete bioinformatics-project as a separate setup task.
bioinformatics-project has established input/output boundaries, project records, and a pinned environment. Do not create a competing project layout.schemas/project-metadata.yaml for the sample, run, file, result, and provenance records the project needs. Keep identifiers stable and declare types, required fields, enumerations, and patterns in the schema.scripts/generate_models.py. The command pins LinkML and Pydantic, rejects changed outputs, imports the generated module, and can assert that expected classes exist.MetadataBundle model. Reject unexpected fields and malformed types before checking relationships.scripts/build_metadata_catalog.py and the bundled valid, model-invalid, and foreign-key-invalid fixtures. Use scripts/build_sample_catalog.py only for the smaller sample-only smoke path.scripts/check_schema_compatibility.py. Optional slots and new classes are compatible; required additions and constraint changes are reported as breaking. Keep a versioned input/expected migration fixture like fixtures/schema-migration-v1-to-v1.1.json for every supported transition.| Task | Action |
|---|---|
| Project structure is missing | Stop catalog work and run bioinformatics-project as a separate setup task. |
| Define records | Adapt schemas/project-metadata.yaml without changing identifier semantics silently. |
| Generate models | Run scripts/generate_models.py through uv run --script. |
| Normalize linked metadata | Run scripts/build_metadata_catalog.py with the schema and a JSON bundle. |
| Sample-only smoke test | Run scripts/build_sample_catalog.py with the JSONL fixtures. |
| Build catalog | Register validated Parquet only, then verify counts, hashes, and foreign keys. |
| Check an extension | Run check_schema_compatibility.py and review its machine-readable report before regenerating models. |
| Tool docs | See docs/README.md. |
Prerequisites:
docs/README.md for expected tools.bioinformatics-project.--expect-class finds every expected class, and the source contains no build-machine absolute paths.report.md records the schema hash, Parquet hashes, row counts, and exact LinkML, Pydantic, and DuckDB versions.SKILL_ROOT=~/.agents/skills/bio-foundation-housekeeping
uv run --script "$SKILL_ROOT/scripts/generate_models.py" \
--schema "$SKILL_ROOT/schemas/project-metadata.yaml" \
--output ./coastal-metagenomes/schemas/generated/project_metadata.py \
--expect-class MetadataBundle
Run the same command with --check in CI. The generator exits non-zero if the output is missing or differs from the schema-derived model.
SKILL_ROOT=~/.agents/skills/bio-foundation-housekeeping
uv run --script "$SKILL_ROOT/scripts/build_metadata_catalog.py" \
--schema "$SKILL_ROOT/schemas/project-metadata.yaml" \
--input "$SKILL_ROOT/fixtures/valid-project-metadata.json" \
--project-root ./coastal-metagenomes
The bundled driver generates and imports the model in a temporary directory, validates every field and cross-record relationship, then publishes schema, model, Parquet, and DuckDB artifacts. Adapt the schema and fixtures together for project-specific records.
SKILL_ROOT=~/.agents/skills/bio-foundation-housekeeping
uv run --script "$SKILL_ROOT/scripts/build_sample_catalog.py" \
--input "$SKILL_ROOT/fixtures/valid-samples.jsonl" \
--project-root ./coastal-metagenomes
The bundled invalid fixtures demonstrate that malformed types, unexpected keys, duplicate identifiers, and missing foreign keys fail before ingestion. Rejection reports record locations and error classes, not rejected values.
Issue: A Pydantic field validator cannot see another field
Solution: Pydantic validates fields in declaration order. Declare the dependency first or move the cross-field rule to @model_validator(mode="after").
Issue: A constructed model is accepted without validation
Solution: Do not use model_construct() for external input. Parse raw records with model_validate(), or configure revalidate_instances="always" when existing model instances must be checked again.
Issue: LinkML generation passes but the bundle has missing references Solution: Schema validation checks record shape, while foreign keys span collections. Run the cross-record checks before creating output directories or opening DuckDB.
Issue: A generated model already exists and differs from the schema Solution: Review the schema and model diff. Remove or relocate the generated file only after confirming it is disposable; the generator does not overwrite changed files.
Issue: A killed process leaves some generated targets but no catalog
Solution: Treat data/catalog.duckdb as the completion marker. Compare the remaining target paths with the run log and remove only artifacts from the interrupted run after confirming they are not project-owned; the next run refuses partial targets instead of guessing.