bio-foundation-housekeeping — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bio-foundation-housekeeping (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.Inputs:
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 MetadataBundleRun 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-metagenomesThe 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-metagenomesThe 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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.