opencode-skills-collection 4.0.68 → 4.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +304 -1
- package/bundled-skills/access-review/SKILL.md +394 -0
- package/bundled-skills/access-review/references/details.md +121 -0
- package/bundled-skills/agent-evals/SKILL.md +420 -0
- package/bundled-skills/agent-observability/SKILL.md +346 -0
- package/bundled-skills/agent-observability/references/details.md +786 -0
- package/bundled-skills/ai-agent-security/SKILL.md +393 -0
- package/bundled-skills/ai-agent-security/references/details.md +912 -0
- package/bundled-skills/ai-coding-agent-guardrails/SKILL.md +442 -0
- package/bundled-skills/ai-coding-agent-guardrails/references/details.md +753 -0
- package/bundled-skills/ai-inference-service-mesh/SKILL.md +449 -0
- package/bundled-skills/ai-pipeline-orchestration/SKILL.md +287 -0
- package/bundled-skills/ai-red-teaming/SKILL.md +409 -0
- package/bundled-skills/ai-security-hardening/SKILL.md +343 -0
- package/bundled-skills/ai-sre-incident-response/SKILL.md +336 -0
- package/bundled-skills/alerting-oncall/SKILL.md +458 -0
- package/bundled-skills/alerting-oncall/references/details.md +84 -0
- package/bundled-skills/api-integration-architect/SKILL.md +241 -0
- package/bundled-skills/apify-generate-output-schema/SKILL.md +438 -0
- package/bundled-skills/apify-integration-development/SKILL.md +168 -0
- package/bundled-skills/apify-integration-development/references/ai-framework-package.md +158 -0
- package/bundled-skills/apify-integration-development/references/ai-harness-plugin.md +192 -0
- package/bundled-skills/apify-integration-development/references/sdk-integration.md +236 -0
- package/bundled-skills/apify-integration-development/references/workflow-automation.md +163 -0
- package/bundled-skills/apk-redteam-pipeline/SKILL.md +446 -0
- package/bundled-skills/architecture-review/README.md +42 -0
- package/bundled-skills/architecture-review/SKILL.md +77 -0
- package/bundled-skills/architecture-review/examples.md +11 -0
- package/bundled-skills/architecture-review/reference/best-practices.md +7 -0
- package/bundled-skills/architecture-review/reference/capabilities.md +20 -0
- package/bundled-skills/architecture-review/reference/fallbacks.md +11 -0
- package/bundled-skills/architecture-review/reference/graph.md +15 -0
- package/bundled-skills/architecture-review/reference/mcp.md +14 -0
- package/bundled-skills/architecture-review/reference/workflow.md +15 -0
- package/bundled-skills/architecture-review/templates/architecture-review.md +21 -0
- package/bundled-skills/argocd-gitops/SKILL.md +469 -0
- package/bundled-skills/arm-templates/SKILL.md +438 -0
- package/bundled-skills/arm-templates/references/details.md +64 -0
- package/bundled-skills/asset-inventory/SKILL.md +412 -0
- package/bundled-skills/asset-inventory/references/details.md +127 -0
- package/bundled-skills/audit-logging/SKILL.md +476 -0
- package/bundled-skills/aws-cloudtrail/SKILL.md +486 -0
- package/bundled-skills/aws-cost-optimization/SKILL.md +331 -0
- package/bundled-skills/aws-ec2/SKILL.md +426 -0
- package/bundled-skills/aws-ecs-fargate/SKILL.md +388 -0
- package/bundled-skills/aws-iam/SKILL.md +463 -0
- package/bundled-skills/aws-lambda/SKILL.md +428 -0
- package/bundled-skills/aws-rds/SKILL.md +380 -0
- package/bundled-skills/aws-s3/SKILL.md +434 -0
- package/bundled-skills/aws-secrets-manager/SKILL.md +486 -0
- package/bundled-skills/aws-vpc/SKILL.md +436 -0
- package/bundled-skills/azure-ai-document-intelligence-ts/SKILL.md +1 -1
- package/bundled-skills/azure-aks/SKILL.md +423 -0
- package/bundled-skills/azure-devops/SKILL.md +457 -0
- package/bundled-skills/azure-functions-devsec/SKILL.md +436 -0
- package/bundled-skills/azure-keyvault/SKILL.md +455 -0
- package/bundled-skills/azure-keyvault/references/details.md +83 -0
- package/bundled-skills/azure-monitor-audit/SKILL.md +379 -0
- package/bundled-skills/azure-networking/SKILL.md +448 -0
- package/bundled-skills/azure-networking/references/details.md +135 -0
- package/bundled-skills/azure-sql/SKILL.md +413 -0
- package/bundled-skills/azure-sql/references/details.md +113 -0
- package/bundled-skills/azure-vms/SKILL.md +402 -0
- package/bundled-skills/azure-vms/references/details.md +134 -0
- package/bundled-skills/backup-recovery/SKILL.md +388 -0
- package/bundled-skills/bb-methodology/SKILL.md +451 -0
- package/bundled-skills/bb-methodology/references/details.md +120 -0
- package/bundled-skills/block-storage/SKILL.md +371 -0
- package/bundled-skills/blue-green-deploy/SKILL.md +453 -0
- package/bundled-skills/blue-green-deploy/references/details.md +90 -0
- package/bundled-skills/bug-bounty/SKILL.md +447 -0
- package/bundled-skills/bug-bounty/references/details.md +1316 -0
- package/bundled-skills/bugcrowd-reporting/SKILL.md +351 -0
- package/bundled-skills/business-continuity/SKILL.md +463 -0
- package/bundled-skills/career-ops/SKILL.md +186 -0
- package/bundled-skills/cdn-setup/SKILL.md +374 -0
- package/bundled-skills/change-management/SKILL.md +438 -0
- package/bundled-skills/change-management/references/details.md +105 -0
- package/bundled-skills/circleci/SKILL.md +475 -0
- package/bundled-skills/cis-benchmarks/SKILL.md +150 -0
- package/bundled-skills/cloudflare-pages/SKILL.md +318 -0
- package/bundled-skills/cloudflare-r2/SKILL.md +353 -0
- package/bundled-skills/cloudflare-workers/SKILL.md +415 -0
- package/bundled-skills/cloudflare-zero-trust/SKILL.md +361 -0
- package/bundled-skills/cloudformation/SKILL.md +461 -0
- package/bundled-skills/code-review-sensei/SKILL.md +177 -0
- package/bundled-skills/codebase-onboarding/README.md +42 -0
- package/bundled-skills/codebase-onboarding/SKILL.md +77 -0
- package/bundled-skills/codebase-onboarding/examples.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/best-practices.md +7 -0
- package/bundled-skills/codebase-onboarding/reference/capabilities.md +20 -0
- package/bundled-skills/codebase-onboarding/reference/fallbacks.md +11 -0
- package/bundled-skills/codebase-onboarding/reference/graph.md +15 -0
- package/bundled-skills/codebase-onboarding/reference/mcp.md +14 -0
- package/bundled-skills/codebase-onboarding/reference/workflow.md +15 -0
- package/bundled-skills/codebase-onboarding/templates/repository-onboarding.md +21 -0
- package/bundled-skills/connection-auth-rules/SKILL.md +199 -0
- package/bundled-skills/connection-auth-rules/fetch_schema.py +320 -0
- package/bundled-skills/constraint-driven-development/SKILL.md +335 -0
- package/bundled-skills/constraint-driven-development/references/floor-guard.md +99 -0
- package/bundled-skills/container-hardening/SKILL.md +126 -0
- package/bundled-skills/container-registries/SKILL.md +435 -0
- package/bundled-skills/container-scanning/SKILL.md +416 -0
- package/bundled-skills/convex-backend/SKILL.md +338 -0
- package/bundled-skills/dast-scanning/SKILL.md +437 -0
- package/bundled-skills/database-backups/SKILL.md +425 -0
- package/bundled-skills/datadog/SKILL.md +487 -0
- package/bundled-skills/dependency-analysis/README.md +42 -0
- package/bundled-skills/dependency-analysis/SKILL.md +76 -0
- package/bundled-skills/dependency-analysis/examples.md +11 -0
- package/bundled-skills/dependency-analysis/reference/best-practices.md +7 -0
- package/bundled-skills/dependency-analysis/reference/capabilities.md +20 -0
- package/bundled-skills/dependency-analysis/reference/fallbacks.md +11 -0
- package/bundled-skills/dependency-analysis/reference/graph.md +15 -0
- package/bundled-skills/dependency-analysis/reference/mcp.md +14 -0
- package/bundled-skills/dependency-analysis/reference/workflow.md +15 -0
- package/bundled-skills/dependency-analysis/templates/dependency-review.md +21 -0
- package/bundled-skills/dependency-scanning/SKILL.md +457 -0
- package/bundled-skills/devcontainers-nix/SKILL.md +416 -0
- package/bundled-skills/devops-pipeline-builder/SKILL.md +200 -0
- package/bundled-skills/disaster-recovery/SKILL.md +374 -0
- package/bundled-skills/disaster-recovery/references/details.md +219 -0
- package/bundled-skills/dns-management/SKILL.md +375 -0
- package/bundled-skills/docker-compose/SKILL.md +482 -0
- package/bundled-skills/docker-management/SKILL.md +426 -0
- package/bundled-skills/eas-app-stores/SKILL.md +197 -0
- package/bundled-skills/eas-app-stores/agents/openai.yaml +4 -0
- package/bundled-skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/bundled-skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/bundled-skills/eas-app-stores/references/native-ios.md +167 -0
- package/bundled-skills/eas-app-stores/references/play-store.md +244 -0
- package/bundled-skills/eas-app-stores/references/testflight.md +62 -0
- package/bundled-skills/eas-app-stores/references/workflows.md +120 -0
- package/bundled-skills/eas-hosting/SKILL.md +448 -0
- package/bundled-skills/eas-hosting/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/SKILL.md +75 -0
- package/bundled-skills/eas-observe/agents/openai.yaml +4 -0
- package/bundled-skills/eas-observe/references/metrics.md +98 -0
- package/bundled-skills/eas-observe/references/queries.md +403 -0
- package/bundled-skills/eas-observe/references/setup.md +476 -0
- package/bundled-skills/eas-observe/references/third-party.md +136 -0
- package/bundled-skills/eas-simulator/SKILL.md +251 -0
- package/bundled-skills/eas-simulator/agents/openai.yaml +4 -0
- package/bundled-skills/eas-simulator/references/controllers.md +135 -0
- package/bundled-skills/eas-simulator/references/run-your-app.md +240 -0
- package/bundled-skills/eas-simulator/references/troubleshooting.md +47 -0
- package/bundled-skills/eas-workflows/SKILL.md +119 -0
- package/bundled-skills/eas-workflows/agents/openai.yaml +4 -0
- package/bundled-skills/eas-workflows/scripts/fetch.js +109 -0
- package/bundled-skills/ebpf-observability/SKILL.md +436 -0
- package/bundled-skills/ebpf-observability/references/details.md +542 -0
- package/bundled-skills/elk-stack/SKILL.md +487 -0
- package/bundled-skills/enterprise-vpn-attack/SKILL.md +395 -0
- package/bundled-skills/evidence-hygiene/SKILL.md +404 -0
- package/bundled-skills/expo-animation/LICENSE +21 -0
- package/bundled-skills/expo-animation/RECIPES.md +385 -0
- package/bundled-skills/expo-animation/SKILL.md +295 -0
- package/bundled-skills/expo-animation/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/SKILL.md +178 -0
- package/bundled-skills/fact-check-x-unified/agents/openai.yaml +4 -0
- package/bundled-skills/fact-check-x-unified/references/acceptance-criteria.md +44 -0
- package/bundled-skills/fact-check-x-unified/references/contracts.md +39 -0
- package/bundled-skills/fact-check-x-unified/scripts/common.py +31 -0
- package/bundled-skills/fact-check-x-unified/scripts/fact_check_x.py +1832 -0
- package/bundled-skills/fact-check-x-unified/scripts/trusted_search_config.py +324 -0
- package/bundled-skills/fact-check-x-unified/tests/anchor_downgrade_test.py +90 -0
- package/bundled-skills/fact-check-x-unified/tests/multi_platform_test.py +369 -0
- package/bundled-skills/fact-check-x-unified/tests/smoke_test.py +740 -0
- package/bundled-skills/fact-check-x-unified/tests/stage_checkpoint_test.py +103 -0
- package/bundled-skills/fact-check-x-unified/tests/trusted_search_config_test.py +156 -0
- package/bundled-skills/feature-flags/SKILL.md +426 -0
- package/bundled-skills/feature-flags/references/details.md +86 -0
- package/bundled-skills/fedramp-compliance/SKILL.md +453 -0
- package/bundled-skills/firebase-app-platform/SKILL.md +381 -0
- package/bundled-skills/firewall-config/SKILL.md +479 -0
- package/bundled-skills/gcp-audit-logs/SKILL.md +452 -0
- package/bundled-skills/gcp-audit-logs/references/details.md +56 -0
- package/bundled-skills/gcp-cloud-functions/SKILL.md +284 -0
- package/bundled-skills/gcp-cloud-sql/SKILL.md +277 -0
- package/bundled-skills/gcp-compute/SKILL.md +319 -0
- package/bundled-skills/gcp-gke/SKILL.md +307 -0
- package/bundled-skills/gcp-networking/SKILL.md +293 -0
- package/bundled-skills/gcp-secret-manager/SKILL.md +421 -0
- package/bundled-skills/gcp-secret-manager/references/details.md +131 -0
- package/bundled-skills/gdpr-compliance/SKILL.md +451 -0
- package/bundled-skills/gdpr-compliance/references/details.md +145 -0
- package/bundled-skills/geo-audit/SKILL.md +368 -0
- package/bundled-skills/geo-brand-mentions/SKILL.md +68 -0
- package/bundled-skills/geo-brand-mentions/references/details.md +471 -0
- package/bundled-skills/geo-citability/SKILL.md +350 -0
- package/bundled-skills/geo-compare/SKILL.md +340 -0
- package/bundled-skills/geo-content/SKILL.md +383 -0
- package/bundled-skills/geo-crawlers/SKILL.md +408 -0
- package/bundled-skills/geo-llmstxt/SKILL.md +464 -0
- package/bundled-skills/geo-platform-optimizer/SKILL.md +314 -0
- package/bundled-skills/geo-proposal/SKILL.md +378 -0
- package/bundled-skills/geo-prospect/SKILL.md +225 -0
- package/bundled-skills/geo-report/SKILL.md +436 -0
- package/bundled-skills/geo-report-pdf/SKILL.md +157 -0
- package/bundled-skills/geo-schema/SKILL.md +408 -0
- package/bundled-skills/geo-technical/SKILL.md +78 -0
- package/bundled-skills/geo-technical/references/details.md +543 -0
- package/bundled-skills/git-workflow/SKILL.md +460 -0
- package/bundled-skills/github-actions/SKILL.md +368 -0
- package/bundled-skills/gitlab-ci/SKILL.md +340 -0
- package/bundled-skills/gpt-taste/SKILL.md +8 -1
- package/bundled-skills/gpu-kubernetes-operations/SKILL.md +468 -0
- package/bundled-skills/gpu-server-management/SKILL.md +236 -0
- package/bundled-skills/hashicorp-vault/SKILL.md +408 -0
- package/bundled-skills/helm-charts/SKILL.md +469 -0
- package/bundled-skills/hf-cli/SKILL.md +263 -0
- package/bundled-skills/hipaa-compliance/SKILL.md +451 -0
- package/bundled-skills/huggingface-community-evals/SKILL.md +228 -0
- package/bundled-skills/huggingface-community-evals/examples/.env.example +3 -0
- package/bundled-skills/huggingface-community-evals/examples/USAGE_EXAMPLES.md +101 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_eval_uv.py +104 -0
- package/bundled-skills/huggingface-community-evals/scripts/inspect_vllm_uv.py +306 -0
- package/bundled-skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py +297 -0
- package/bundled-skills/huggingface-datasets/SKILL.md +130 -0
- package/bundled-skills/hunt-aspnet/SKILL.md +321 -0
- package/bundled-skills/hunt-ato/SKILL.md +184 -0
- package/bundled-skills/hunt-auth-bypass/SKILL.md +426 -0
- package/bundled-skills/hunt-auth-bypass/references/details.md +80 -0
- package/bundled-skills/hunt-brute-force/SKILL.md +341 -0
- package/bundled-skills/hunt-business-logic/SKILL.md +281 -0
- package/bundled-skills/hunt-cache-poison/SKILL.md +382 -0
- package/bundled-skills/hunt-captcha-bypass/SKILL.md +136 -0
- package/bundled-skills/hunt-cicd/SKILL.md +311 -0
- package/bundled-skills/hunt-clickjacking/SKILL.md +110 -0
- package/bundled-skills/hunt-cors/SKILL.md +335 -0
- package/bundled-skills/hunt-dom/SKILL.md +323 -0
- package/bundled-skills/hunt-exceptional-conditions/SKILL.md +111 -0
- package/bundled-skills/hunt-file-upload/SKILL.md +202 -0
- package/bundled-skills/hunt-fintech-graphql/SKILL.md +289 -0
- package/bundled-skills/hunt-forgot-password/SKILL.md +114 -0
- package/bundled-skills/hunt-grpc/SKILL.md +317 -0
- package/bundled-skills/hunt-host-header/SKILL.md +309 -0
- package/bundled-skills/hunt-html-injection/SKILL.md +106 -0
- package/bundled-skills/hunt-http-smuggling/SKILL.md +129 -0
- package/bundled-skills/hunt-http-smuggling/references/phase2h-smuggling-cachepoison.md +177 -0
- package/bundled-skills/hunt-idor/SKILL.md +434 -0
- package/bundled-skills/hunt-jwt-crypto/SKILL.md +221 -0
- package/bundled-skills/hunt-k8s/SKILL.md +337 -0
- package/bundled-skills/hunt-laravel/SKILL.md +255 -0
- package/bundled-skills/hunt-ldap/SKILL.md +351 -0
- package/bundled-skills/hunt-lfi/SKILL.md +311 -0
- package/bundled-skills/hunt-llm-ai/SKILL.md +289 -0
- package/bundled-skills/hunt-mfa-bypass/SKILL.md +177 -0
- package/bundled-skills/hunt-misc/SKILL.md +378 -0
- package/bundled-skills/hunt-nextjs/SKILL.md +299 -0
- package/bundled-skills/hunt-nodejs/SKILL.md +263 -0
- package/bundled-skills/hunt-nosqli/SKILL.md +210 -0
- package/bundled-skills/hunt-ntlm-info/SKILL.md +314 -0
- package/bundled-skills/hunt-oauth/SKILL.md +459 -0
- package/bundled-skills/hunt-open-redirect/SKILL.md +223 -0
- package/bundled-skills/hunt-race-condition/SKILL.md +381 -0
- package/bundled-skills/hunt-race-condition/references/details.md +159 -0
- package/bundled-skills/hunt-rag-vector/SKILL.md +212 -0
- package/bundled-skills/hunt-rce/SKILL.md +444 -0
- package/bundled-skills/hunt-rce/references/details.md +110 -0
- package/bundled-skills/hunt-saml/SKILL.md +156 -0
- package/bundled-skills/hunt-session/SKILL.md +342 -0
- package/bundled-skills/hunt-shadow-api/SKILL.md +198 -0
- package/bundled-skills/hunt-source-leak/SKILL.md +345 -0
- package/bundled-skills/hunt-spa-api/SKILL.md +163 -0
- package/bundled-skills/hunt-springboot/SKILL.md +285 -0
- package/bundled-skills/hunt-sqli/SKILL.md +466 -0
- package/bundled-skills/hunt-ssrf/SKILL.md +396 -0
- package/bundled-skills/hunt-ssrf/references/details.md +179 -0
- package/bundled-skills/hunt-ssti/SKILL.md +163 -0
- package/bundled-skills/hunt-subdomain/SKILL.md +379 -0
- package/bundled-skills/hunt-tls-network/SKILL.md +399 -0
- package/bundled-skills/hunt-xxe/SKILL.md +466 -0
- package/bundled-skills/i-have-adhd/SKILL.md +170 -0
- package/bundled-skills/identity-access-management/SKILL.md +382 -0
- package/bundled-skills/identity-access-management/references/details.md +524 -0
- package/bundled-skills/incident-management/SKILL.md +484 -0
- package/bundled-skills/incident-response/SKILL.md +448 -0
- package/bundled-skills/incident-response/references/details.md +113 -0
- package/bundled-skills/interview-me/SKILL.md +248 -0
- package/bundled-skills/iso27001-compliance/SKILL.md +460 -0
- package/bundled-skills/jenkins/SKILL.md +462 -0
- package/bundled-skills/jev-social/SKILL.md +182 -0
- package/bundled-skills/jev-use/SKILL.md +158 -0
- package/bundled-skills/kubernetes-hardening/SKILL.md +154 -0
- package/bundled-skills/kubernetes-ops/SKILL.md +449 -0
- package/bundled-skills/kubernetes-ops/references/details.md +108 -0
- package/bundled-skills/kustomize/SKILL.md +478 -0
- package/bundled-skills/linux-administration/SKILL.md +367 -0
- package/bundled-skills/linux-hardening/SKILL.md +154 -0
- package/bundled-skills/llm-app-security/SKILL.md +389 -0
- package/bundled-skills/llm-app-security/references/details.md +674 -0
- package/bundled-skills/llm-caching/SKILL.md +334 -0
- package/bundled-skills/llm-cost-optimization/SKILL.md +311 -0
- package/bundled-skills/llm-fine-tuning/SKILL.md +329 -0
- package/bundled-skills/llm-gateway/SKILL.md +282 -0
- package/bundled-skills/llm-inference-scaling/SKILL.md +286 -0
- package/bundled-skills/llmops-platform-engineering/SKILL.md +472 -0
- package/bundled-skills/load-balancing/SKILL.md +403 -0
- package/bundled-skills/loki-logging/SKILL.md +479 -0
- package/bundled-skills/longbridge-derivatives/SKILL.md +117 -0
- package/bundled-skills/longbridge-derivatives/references/option.md +36 -0
- package/bundled-skills/longbridge-derivatives/references/options-advanced.md +101 -0
- package/bundled-skills/longbridge-derivatives/references/options-pnl.md +74 -0
- package/bundled-skills/longbridge-derivatives/references/options-strategy.md +82 -0
- package/bundled-skills/longbridge-derivatives/references/options-volatility.md +70 -0
- package/bundled-skills/longbridge-derivatives/references/warrant.md +12 -0
- package/bundled-skills/longbridge-quant/SKILL.md +151 -0
- package/bundled-skills/longbridge-quant/references/correlation.md +51 -0
- package/bundled-skills/longbridge-quant/references/execution-model.md +68 -0
- package/bundled-skills/longbridge-quant/references/factor-research.md +95 -0
- package/bundled-skills/longbridge-quant/references/factor-screen.md +101 -0
- package/bundled-skills/longbridge-quant/references/hedging.md +136 -0
- package/bundled-skills/longbridge-quant/references/ml-strategy.md +77 -0
- package/bundled-skills/longbridge-quant/references/multifactor.md +68 -0
- package/bundled-skills/longbridge-quant/references/pairs-trading.md +61 -0
- package/bundled-skills/longbridge-quant/references/quant-cli.md +133 -0
- package/bundled-skills/longbridge-quant/references/quant-stats.md +150 -0
- package/bundled-skills/longbridge-quant/references/seasonality.md +50 -0
- package/bundled-skills/longbridge-quant/references/strategy-optimizer.md +68 -0
- package/bundled-skills/longbridge-quant/references/volatility-strategy.md +52 -0
- package/bundled-skills/longbridge-research/SKILL.md +187 -0
- package/bundled-skills/longbridge-research/references/company-profile.md +96 -0
- package/bundled-skills/longbridge-research/references/company-tearsheet.md +82 -0
- package/bundled-skills/longbridge-research/references/competitive-analysis.md +81 -0
- package/bundled-skills/longbridge-research/references/consensus.md +92 -0
- package/bundled-skills/longbridge-research/references/coverage-initiation.md +76 -0
- package/bundled-skills/longbridge-research/references/defi-yield.md +60 -0
- package/bundled-skills/longbridge-research/references/finance-calendar.md +165 -0
- package/bundled-skills/longbridge-research/references/financial-planning.md +77 -0
- package/bundled-skills/longbridge-research/references/forecast-eps.md +39 -0
- package/bundled-skills/longbridge-research/references/fund-holder.md +44 -0
- package/bundled-skills/longbridge-research/references/hkipo-analysis.md +101 -0
- package/bundled-skills/longbridge-research/references/industry-peers.md +46 -0
- package/bundled-skills/longbridge-research/references/industry-rank.md +62 -0
- package/bundled-skills/longbridge-research/references/insider-trades.md +48 -0
- package/bundled-skills/longbridge-research/references/institution-rating.md +62 -0
- package/bundled-skills/longbridge-research/references/investment-ideas.md +69 -0
- package/bundled-skills/longbridge-research/references/investment-proposal.md +95 -0
- package/bundled-skills/longbridge-research/references/investors.md +87 -0
- package/bundled-skills/longbridge-research/references/onchain.md +70 -0
- package/bundled-skills/longbridge-research/references/post-investment.md +76 -0
- package/bundled-skills/longbridge-research/references/shareholder.md +72 -0
- package/bundled-skills/longbridge-research/references/short-positions.md +50 -0
- package/bundled-skills/longbridge-research/references/short-trades.md +50 -0
- package/bundled-skills/longbridge-research/references/stock-research.md +61 -0
- package/bundled-skills/longbridge-research/references/thesis-tracker.md +64 -0
- package/bundled-skills/m365-entra-attack/SKILL.md +423 -0
- package/bundled-skills/mac-mini-llm-lab/SKILL.md +350 -0
- package/bundled-skills/makepad-2-0-animation/SKILL.md +318 -0
- package/bundled-skills/makepad-2-0-animation/references/animator-reference.md +433 -0
- package/bundled-skills/makepad-2-0-dsl/SKILL.md +492 -0
- package/bundled-skills/makepad-2-0-dsl/references/dsl-syntax-reference.md +511 -0
- package/bundled-skills/makepad-2-0-dsl/references/extended-guide.md +56 -0
- package/bundled-skills/makepad-2-0-dsl/references/property-system.md +757 -0
- package/bundled-skills/makepad-2-0-events/SKILL.md +497 -0
- package/bundled-skills/makepad-2-0-events/references/event-patterns.md +802 -0
- package/bundled-skills/makepad-2-0-events/references/extended-guide.md +590 -0
- package/bundled-skills/makepad-2-0-layout/SKILL.md +499 -0
- package/bundled-skills/makepad-2-0-layout/references/extended-guide.md +243 -0
- package/bundled-skills/makepad-2-0-layout/references/layout-patterns.md +881 -0
- package/bundled-skills/makepad-2-0-widgets/SKILL.md +261 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-advanced.md +648 -0
- package/bundled-skills/makepad-2-0-widgets/references/widget-catalog.md +547 -0
- package/bundled-skills/mcp-server-security/SKILL.md +356 -0
- package/bundled-skills/mcp-server-security/references/details.md +745 -0
- package/bundled-skills/mdm-device-management/SKILL.md +404 -0
- package/bundled-skills/mdm-device-management/references/details.md +410 -0
- package/bundled-skills/meeting-distiller-pro/SKILL.md +120 -0
- package/bundled-skills/meme-coin-audit/SKILL.md +402 -0
- package/bundled-skills/mid-engagement-ir-detection/SKILL.md +377 -0
- package/bundled-skills/model-registry-governance/SKILL.md +452 -0
- package/bundled-skills/model-serving-kubernetes/SKILL.md +339 -0
- package/bundled-skills/model-supply-chain-security/SKILL.md +427 -0
- package/bundled-skills/mongodb/SKILL.md +436 -0
- package/bundled-skills/monte-carlo-analyze-root-cause/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-asset-health/SKILL.md +12 -1
- package/bundled-skills/monte-carlo-context-detection/SKILL.md +170 -0
- package/bundled-skills/monte-carlo-context-detection/references/signal-definitions.md +46 -0
- package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +435 -0
- package/bundled-skills/multi-tenant-llm-hosting/references/details.md +211 -0
- package/bundled-skills/mysql/SKILL.md +390 -0
- package/bundled-skills/new-relic/SKILL.md +472 -0
- package/bundled-skills/nfs-storage/SKILL.md +356 -0
- package/bundled-skills/object-storage/SKILL.md +378 -0
- package/bundled-skills/offensive-osint/SKILL.md +443 -0
- package/bundled-skills/okta-attack/SKILL.md +436 -0
- package/bundled-skills/ollama-stack/SKILL.md +379 -0
- package/bundled-skills/openclaw-deployment-hardening/SKILL.md +135 -0
- package/bundled-skills/openclaw-local-mac-mini/SKILL.md +426 -0
- package/bundled-skills/openclaw-local-mac-mini/references/details.md +221 -0
- package/bundled-skills/openclaw-security-hardening/SKILL.md +135 -0
- package/bundled-skills/openshift/SKILL.md +485 -0
- package/bundled-skills/opentelemetry/SKILL.md +438 -0
- package/bundled-skills/opentelemetry/references/details.md +78 -0
- package/bundled-skills/opentofu-migration/SKILL.md +349 -0
- package/bundled-skills/osint-methodology/SKILL.md +460 -0
- package/bundled-skills/osint-methodology/references/details.md +1350 -0
- package/bundled-skills/pci-dss-compliance/SKILL.md +446 -0
- package/bundled-skills/penetration-testing/SKILL.md +152 -0
- package/bundled-skills/performance-tuning/SKILL.md +381 -0
- package/bundled-skills/planetscale/SKILL.md +297 -0
- package/bundled-skills/platform-engineering/SKILL.md +348 -0
- package/bundled-skills/platform-engineering/references/details.md +944 -0
- package/bundled-skills/podman/SKILL.md +405 -0
- package/bundled-skills/policy-as-code/SKILL.md +434 -0
- package/bundled-skills/policy-as-code/references/details.md +204 -0
- package/bundled-skills/postgresql-devsec/SKILL.md +378 -0
- package/bundled-skills/prometheus-grafana/SKILL.md +469 -0
- package/bundled-skills/prompt-injection-defense/SKILL.md +483 -0
- package/bundled-skills/rag-infrastructure/SKILL.md +269 -0
- package/bundled-skills/rag-observability-evals/SKILL.md +444 -0
- package/bundled-skills/rag-observability-evals/references/details.md +92 -0
- package/bundled-skills/recon-scope-triage/SKILL.md +128 -0
- package/bundled-skills/redis/SKILL.md +421 -0
- package/bundled-skills/redteam-report-template/SKILL.md +370 -0
- package/bundled-skills/remotion-captions/SKILL.md +57 -0
- package/bundled-skills/remotion-captions/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-captions/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-captions/display-captions.md +190 -0
- package/bundled-skills/remotion-captions/import-srt-captions.md +73 -0
- package/bundled-skills/remotion-captions/transcribe-captions.md +70 -0
- package/bundled-skills/remotion-create/SKILL.md +106 -0
- package/bundled-skills/remotion-create/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-create/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-create/tailwind.md +11 -0
- package/bundled-skills/remotion-create/video-layout.md +9 -0
- package/bundled-skills/remotion-docs/SKILL.md +67 -0
- package/bundled-skills/remotion-docs/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-docs/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-interactivity/SKILL.md +270 -0
- package/bundled-skills/remotion-interactivity/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-interactivity/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/SKILL.md +48 -0
- package/bundled-skills/remotion-render/agents/openai.yaml +7 -0
- package/bundled-skills/remotion-render/assets/remotion-icon.svg +4 -0
- package/bundled-skills/remotion-render/transparent-videos.md +106 -0
- package/bundled-skills/report-writing/SKILL.md +426 -0
- package/bundled-skills/report-writing/references/details.md +187 -0
- package/bundled-skills/reverse-proxy/SKILL.md +420 -0
- package/bundled-skills/runbook-creation/SKILL.md +438 -0
- package/bundled-skills/runbook-creation/references/details.md +71 -0
- package/bundled-skills/saas-pricing-strategist/SKILL.md +169 -0
- package/bundled-skills/saas-security-posture/SKILL.md +415 -0
- package/bundled-skills/sast-scanning/SKILL.md +444 -0
- package/bundled-skills/sbom-supply-chain/SKILL.md +433 -0
- package/bundled-skills/score-eval/SKILL.md +35 -0
- package/bundled-skills/security-arsenal/SKILL.md +446 -0
- package/bundled-skills/security-arsenal/references/details.md +540 -0
- package/bundled-skills/security-automation/SKILL.md +146 -0
- package/bundled-skills/semantic-versioning/SKILL.md +434 -0
- package/bundled-skills/semantic-versioning/references/details.md +83 -0
- package/bundled-skills/service-mesh/SKILL.md +422 -0
- package/bundled-skills/soc2-compliance/SKILL.md +409 -0
- package/bundled-skills/sops-encryption/SKILL.md +124 -0
- package/bundled-skills/sre-dashboards/SKILL.md +143 -0
- package/bundled-skills/ssh-configuration/SKILL.md +324 -0
- package/bundled-skills/ssl-tls-management/SKILL.md +428 -0
- package/bundled-skills/ssl-tls-management/references/details.md +99 -0
- package/bundled-skills/startup-it-troubleshooting/SKILL.md +415 -0
- package/bundled-skills/supply-chain-attack-recon/SKILL.md +453 -0
- package/bundled-skills/supply-chain-attack-recon/references/details.md +258 -0
- package/bundled-skills/systemd-services/SKILL.md +379 -0
- package/bundled-skills/terraform-aws/SKILL.md +125 -0
- package/bundled-skills/terraform-azure/SKILL.md +415 -0
- package/bundled-skills/terraform-azure/references/details.md +231 -0
- package/bundled-skills/terraform-gcp/SKILL.md +369 -0
- package/bundled-skills/threat-modeling/SKILL.md +487 -0
- package/bundled-skills/user-management/SKILL.md +383 -0
- package/bundled-skills/using-agent-skills/SKILL.md +220 -0
- package/bundled-skills/vector-database-ops/SKILL.md +300 -0
- package/bundled-skills/vendor-management/SKILL.md +439 -0
- package/bundled-skills/vendor-management/references/details.md +109 -0
- package/bundled-skills/vercel-deployments/SKILL.md +296 -0
- package/bundled-skills/vllm-server/SKILL.md +236 -0
- package/bundled-skills/vmware-vcenter-attack/SKILL.md +412 -0
- package/bundled-skills/vpn-setup/SKILL.md +452 -0
- package/bundled-skills/vulnerability-scanning/SKILL.md +448 -0
- package/bundled-skills/waf-setup/SKILL.md +354 -0
- package/bundled-skills/waf-setup/references/details.md +211 -0
- package/bundled-skills/web2-recon/SKILL.md +440 -0
- package/bundled-skills/web2-recon/references/details.md +319 -0
- package/bundled-skills/web3-audit/SKILL.md +445 -0
- package/bundled-skills/web3-audit/references/details.md +224 -0
- package/bundled-skills/windows-hardening/SKILL.md +454 -0
- package/bundled-skills/windows-hardening/references/details.md +204 -0
- package/bundled-skills/windows-server/SKILL.md +318 -0
- package/bundled-skills/writing-guidelines/SKILL.md +60 -0
- package/bundled-skills/zero-trust/SKILL.md +461 -0
- package/package.json +1 -1
- package/skills_index.json +7874 -277
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: model-registry-governance
|
|
3
|
+
description: Establish model registry standards, governance controls, metadata schemas,
|
|
4
|
+
approvals, and lifecycle policies for enterprise AI deployments.
|
|
5
|
+
category: devops
|
|
6
|
+
risk: critical
|
|
7
|
+
source: https://github.com/BagelHole/DevOps-Security-Agent-Skills
|
|
8
|
+
source_repo: BagelHole/DevOps-Security-Agent-Skills
|
|
9
|
+
source_type: community
|
|
10
|
+
date_added: '2026-09-20'
|
|
11
|
+
license: MIT
|
|
12
|
+
license_source: https://github.com/BagelHole/DevOps-Security-Agent-Skills/blob/main/LICENSE
|
|
13
|
+
compatibility: Requires the relevant platform CLIs (kubectl, helm, terraform, git,
|
|
14
|
+
CI runners) and authorized access to the target environment. Docs-only; helper scripts
|
|
15
|
+
and templates not bundled.
|
|
16
|
+
metadata:
|
|
17
|
+
author: devops-skills
|
|
18
|
+
version: '1.0'
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Model Registry Governance
|
|
22
|
+
|
|
23
|
+
Create a trustworthy system of record for model artifacts, prompts, adapters, and evaluation evidence.
|
|
24
|
+
|
|
25
|
+
## When to Use This Skill
|
|
26
|
+
|
|
27
|
+
- Setting up a centralized model registry for your organization
|
|
28
|
+
- Defining metadata standards for model artifacts
|
|
29
|
+
- Building approval workflows for model promotion to production
|
|
30
|
+
- Implementing lifecycle policies for model retirement
|
|
31
|
+
- Preparing for compliance audits of AI systems
|
|
32
|
+
|
|
33
|
+
## Prerequisites
|
|
34
|
+
|
|
35
|
+
- MLflow Tracking Server or Weights & Biases instance deployed
|
|
36
|
+
- Object storage for model artifacts (S3, GCS, or MinIO)
|
|
37
|
+
- CI/CD pipeline with access to the registry API
|
|
38
|
+
- OPA or similar policy engine for governance checks
|
|
39
|
+
- Git repository for policy definitions and promotion scripts
|
|
40
|
+
|
|
41
|
+
## Core Principles
|
|
42
|
+
|
|
43
|
+
- **Traceability**: every production model maps to source code, data snapshot, and evaluation results.
|
|
44
|
+
- **Reproducibility**: builds are deterministic with pinned dependencies.
|
|
45
|
+
- **Policy-driven promotion**: no manual bypass for critical safety checks.
|
|
46
|
+
- **Lifecycle hygiene**: stale, vulnerable, or unowned models are retired automatically.
|
|
47
|
+
|
|
48
|
+
## MLflow Registry Setup
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Install MLflow with required backends
|
|
52
|
+
pip install mlflow[extras] psycopg2-binary boto3
|
|
53
|
+
|
|
54
|
+
# Start MLflow tracking server with PostgreSQL backend and S3 artifact store
|
|
55
|
+
mlflow server \
|
|
56
|
+
--backend-store-uri postgresql://mlflow:password@db:5432/mlflow \
|
|
57
|
+
--default-artifact-root s3://mlflow-artifacts/models \
|
|
58
|
+
--host 0.0.0.0 \
|
|
59
|
+
--port 5000 \
|
|
60
|
+
--serve-artifacts
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
# docker-compose.yaml for MLflow
|
|
65
|
+
services:
|
|
66
|
+
mlflow:
|
|
67
|
+
image: ghcr.io/mlflow/mlflow:2.12.0
|
|
68
|
+
command: >
|
|
69
|
+
mlflow server
|
|
70
|
+
--backend-store-uri postgresql://mlflow:${DB_PASSWORD}@db:5432/mlflow
|
|
71
|
+
--default-artifact-root s3://mlflow-artifacts/models
|
|
72
|
+
--host 0.0.0.0
|
|
73
|
+
--port 5000
|
|
74
|
+
--serve-artifacts
|
|
75
|
+
ports:
|
|
76
|
+
- "5000:5000"
|
|
77
|
+
environment:
|
|
78
|
+
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
|
|
79
|
+
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
|
|
80
|
+
depends_on:
|
|
81
|
+
- db
|
|
82
|
+
|
|
83
|
+
db:
|
|
84
|
+
image: postgres:16-alpine
|
|
85
|
+
environment:
|
|
86
|
+
POSTGRES_DB: mlflow
|
|
87
|
+
POSTGRES_USER: mlflow
|
|
88
|
+
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
|
89
|
+
volumes:
|
|
90
|
+
- pgdata:/var/lib/postgresql/data
|
|
91
|
+
|
|
92
|
+
volumes:
|
|
93
|
+
pgdata:
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Required Metadata Schema
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
# model_metadata_schema.py
|
|
100
|
+
from pydantic import BaseModel, Field
|
|
101
|
+
from typing import List, Optional
|
|
102
|
+
from datetime import datetime
|
|
103
|
+
from enum import Enum
|
|
104
|
+
|
|
105
|
+
class LifecycleState(str, Enum):
|
|
106
|
+
DRAFT = "draft"
|
|
107
|
+
CANDIDATE = "candidate"
|
|
108
|
+
APPROVED = "approved"
|
|
109
|
+
DEPRECATED = "deprecated"
|
|
110
|
+
RETIRED = "retired"
|
|
111
|
+
|
|
112
|
+
class RiskRating(str, Enum):
|
|
113
|
+
LOW = "low"
|
|
114
|
+
MEDIUM = "medium"
|
|
115
|
+
HIGH = "high"
|
|
116
|
+
CRITICAL = "critical"
|
|
117
|
+
|
|
118
|
+
class ModelMetadata(BaseModel):
|
|
119
|
+
"""Required metadata for every registered model."""
|
|
120
|
+
# Identity
|
|
121
|
+
name: str = Field(description="Model name matching registry key")
|
|
122
|
+
version: str = Field(description="Semantic version")
|
|
123
|
+
checksum: str = Field(description="SHA-256 of model artifact")
|
|
124
|
+
storage_uri: str = Field(description="Artifact store path")
|
|
125
|
+
|
|
126
|
+
# Lineage
|
|
127
|
+
base_model: str = Field(description="Parent model identifier")
|
|
128
|
+
fine_tune_method: Optional[str] = Field(default=None)
|
|
129
|
+
training_dataset: Optional[str] = Field(default=None)
|
|
130
|
+
training_date: Optional[datetime] = Field(default=None)
|
|
131
|
+
source_commit: str = Field(description="Git SHA of training code")
|
|
132
|
+
|
|
133
|
+
# Evaluation
|
|
134
|
+
eval_datasets: List[str] = Field(description="Evaluation dataset IDs")
|
|
135
|
+
eval_report_uri: str = Field(description="Path to evaluation results")
|
|
136
|
+
quality_score: float = Field(ge=0, le=1)
|
|
137
|
+
safety_score: float = Field(ge=0, le=1)
|
|
138
|
+
|
|
139
|
+
# Governance
|
|
140
|
+
license: str = Field(description="SPDX license identifier")
|
|
141
|
+
allowed_use_cases: List[str]
|
|
142
|
+
prohibited_use_cases: List[str]
|
|
143
|
+
risk_rating: RiskRating
|
|
144
|
+
security_controls: List[str]
|
|
145
|
+
|
|
146
|
+
# Ownership
|
|
147
|
+
owner: str = Field(description="Primary owner email")
|
|
148
|
+
backup_owner: str = Field(description="Backup owner email")
|
|
149
|
+
escalation_contact: str
|
|
150
|
+
team: str
|
|
151
|
+
|
|
152
|
+
# Lifecycle
|
|
153
|
+
state: LifecycleState = LifecycleState.DRAFT
|
|
154
|
+
created_at: datetime = Field(default_factory=datetime.utcnow)
|
|
155
|
+
approved_at: Optional[datetime] = None
|
|
156
|
+
approved_by: Optional[str] = None
|
|
157
|
+
expires_at: Optional[datetime] = None
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Model Registration Script
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
# register_model.py
|
|
164
|
+
import mlflow
|
|
165
|
+
from mlflow.tracking import MlflowClient
|
|
166
|
+
import json
|
|
167
|
+
import hashlib
|
|
168
|
+
|
|
169
|
+
def register_model(
|
|
170
|
+
model_path: str,
|
|
171
|
+
model_name: str,
|
|
172
|
+
metadata: dict,
|
|
173
|
+
mlflow_uri: str = "http://mlflow:5000"
|
|
174
|
+
):
|
|
175
|
+
"""Register a model with full metadata and governance tags."""
|
|
176
|
+
mlflow.set_tracking_uri(mlflow_uri)
|
|
177
|
+
client = MlflowClient()
|
|
178
|
+
|
|
179
|
+
# Compute artifact checksum
|
|
180
|
+
with open(model_path, "rb") as f:
|
|
181
|
+
checksum = hashlib.sha256(f.read()).hexdigest()
|
|
182
|
+
metadata["checksum"] = checksum
|
|
183
|
+
|
|
184
|
+
# Log model with metadata
|
|
185
|
+
with mlflow.start_run(run_name=f"register-{model_name}-{metadata['version']}") as run:
|
|
186
|
+
# Log all metadata as params
|
|
187
|
+
mlflow.log_params({
|
|
188
|
+
"model_name": model_name,
|
|
189
|
+
"version": metadata["version"],
|
|
190
|
+
"base_model": metadata["base_model"],
|
|
191
|
+
"risk_rating": metadata["risk_rating"],
|
|
192
|
+
"owner": metadata["owner"],
|
|
193
|
+
"license": metadata["license"],
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
# Log quality metrics
|
|
197
|
+
mlflow.log_metrics({
|
|
198
|
+
"quality_score": metadata["quality_score"],
|
|
199
|
+
"safety_score": metadata["safety_score"],
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
# Log full metadata as artifact
|
|
203
|
+
with open("metadata.json", "w") as f:
|
|
204
|
+
json.dump(metadata, f, indent=2, default=str)
|
|
205
|
+
mlflow.log_artifact("metadata.json")
|
|
206
|
+
|
|
207
|
+
# Log model artifact
|
|
208
|
+
mlflow.log_artifact(model_path)
|
|
209
|
+
|
|
210
|
+
# Register in model registry
|
|
211
|
+
model_uri = f"runs:/{run.info.run_id}/model"
|
|
212
|
+
result = mlflow.register_model(model_uri, model_name)
|
|
213
|
+
|
|
214
|
+
# Set lifecycle tags
|
|
215
|
+
client.set_model_version_tag(
|
|
216
|
+
model_name, result.version, "state", "draft"
|
|
217
|
+
)
|
|
218
|
+
client.set_model_version_tag(
|
|
219
|
+
model_name, result.version, "risk_rating", metadata["risk_rating"]
|
|
220
|
+
)
|
|
221
|
+
client.set_model_version_tag(
|
|
222
|
+
model_name, result.version, "checksum", checksum
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
return result
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Approval Workflow
|
|
229
|
+
|
|
230
|
+
1. Registration request created from CI.
|
|
231
|
+
2. Security checks (artifact scan, dependency scan, provenance).
|
|
232
|
+
3. Evaluation package uploaded (quality, toxicity, jailbreak, bias, latency, cost).
|
|
233
|
+
4. Required approvals: platform + product + security (as policy dictates).
|
|
234
|
+
5. Promotion to stage/prod based on signed decision record.
|
|
235
|
+
|
|
236
|
+
## Promotion Script
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
# promote_model.py
|
|
240
|
+
import mlflow
|
|
241
|
+
from mlflow.tracking import MlflowClient
|
|
242
|
+
from datetime import datetime
|
|
243
|
+
import sys
|
|
244
|
+
|
|
245
|
+
def promote_model(
|
|
246
|
+
model_name: str,
|
|
247
|
+
version: str,
|
|
248
|
+
target_stage: str,
|
|
249
|
+
approver: str,
|
|
250
|
+
mlflow_uri: str = "http://mlflow:5000"
|
|
251
|
+
):
|
|
252
|
+
"""Promote a model version after governance checks pass."""
|
|
253
|
+
mlflow.set_tracking_uri(mlflow_uri)
|
|
254
|
+
client = MlflowClient()
|
|
255
|
+
|
|
256
|
+
# Verify current state allows promotion
|
|
257
|
+
mv = client.get_model_version(model_name, version)
|
|
258
|
+
current_state = mv.tags.get("state", "draft")
|
|
259
|
+
|
|
260
|
+
valid_transitions = {
|
|
261
|
+
"draft": ["candidate"],
|
|
262
|
+
"candidate": ["approved", "draft"],
|
|
263
|
+
"approved": ["deprecated"],
|
|
264
|
+
"deprecated": ["retired"],
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
if target_stage not in valid_transitions.get(current_state, []):
|
|
268
|
+
raise ValueError(
|
|
269
|
+
f"Invalid transition: {current_state} -> {target_stage}. "
|
|
270
|
+
f"Allowed: {valid_transitions.get(current_state, [])}"
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
# Verify required eval scores for production promotion
|
|
274
|
+
if target_stage == "approved":
|
|
275
|
+
run = client.get_run(mv.run_id)
|
|
276
|
+
quality = float(run.data.metrics.get("quality_score", 0))
|
|
277
|
+
safety = float(run.data.metrics.get("safety_score", 0))
|
|
278
|
+
|
|
279
|
+
if quality < 0.85:
|
|
280
|
+
raise ValueError(f"Quality score {quality} below threshold 0.85")
|
|
281
|
+
if safety < 0.95:
|
|
282
|
+
raise ValueError(f"Safety score {safety} below threshold 0.95")
|
|
283
|
+
|
|
284
|
+
# Record promotion
|
|
285
|
+
now = datetime.utcnow().isoformat()
|
|
286
|
+
client.set_model_version_tag(model_name, version, "state", target_stage)
|
|
287
|
+
client.set_model_version_tag(model_name, version, f"promoted_to_{target_stage}_at", now)
|
|
288
|
+
client.set_model_version_tag(model_name, version, f"promoted_to_{target_stage}_by", approver)
|
|
289
|
+
|
|
290
|
+
# Transition MLflow stage alias
|
|
291
|
+
stage_map = {
|
|
292
|
+
"candidate": "Staging",
|
|
293
|
+
"approved": "Production",
|
|
294
|
+
"deprecated": "Archived",
|
|
295
|
+
}
|
|
296
|
+
if target_stage in stage_map:
|
|
297
|
+
client.transition_model_version_stage(
|
|
298
|
+
model_name, version, stage_map[target_stage]
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
print(f"Model {model_name} v{version}: {current_state} -> {target_stage}")
|
|
302
|
+
print(f"Approved by: {approver} at {now}")
|
|
303
|
+
|
|
304
|
+
if __name__ == "__main__":
|
|
305
|
+
promote_model(
|
|
306
|
+
model_name=sys.argv[1],
|
|
307
|
+
version=sys.argv[2],
|
|
308
|
+
target_stage=sys.argv[3],
|
|
309
|
+
approver=sys.argv[4],
|
|
310
|
+
)
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
## Lifecycle States
|
|
314
|
+
|
|
315
|
+
| State | Description | Serving Allowed | New Usage |
|
|
316
|
+
|-------|-------------|-----------------|-----------|
|
|
317
|
+
| `draft` | Internal experimentation | Dev only | Dev only |
|
|
318
|
+
| `candidate` | Passed baseline tests | Staging | Staging |
|
|
319
|
+
| `approved` | Authorized for production | All environments | Yes |
|
|
320
|
+
| `deprecated` | Replacement announced | Existing only | Blocked |
|
|
321
|
+
| `retired` | Archived for audit | None | None |
|
|
322
|
+
|
|
323
|
+
## Lifecycle Automation
|
|
324
|
+
|
|
325
|
+
```python
|
|
326
|
+
# lifecycle_policy.py
|
|
327
|
+
from mlflow.tracking import MlflowClient
|
|
328
|
+
from datetime import datetime, timedelta
|
|
329
|
+
|
|
330
|
+
def enforce_lifecycle_policies(mlflow_uri: str = "http://mlflow:5000"):
|
|
331
|
+
"""Run periodic lifecycle enforcement."""
|
|
332
|
+
client = MlflowClient()
|
|
333
|
+
|
|
334
|
+
for rm in client.search_registered_models():
|
|
335
|
+
for mv in client.search_model_versions(f"name='{rm.name}'"):
|
|
336
|
+
tags = mv.tags
|
|
337
|
+
state = tags.get("state", "draft")
|
|
338
|
+
|
|
339
|
+
# Auto-deprecate models with expired approvals (90 days)
|
|
340
|
+
if state == "approved":
|
|
341
|
+
approved_at = tags.get("promoted_to_approved_at")
|
|
342
|
+
if approved_at:
|
|
343
|
+
approved_date = datetime.fromisoformat(approved_at)
|
|
344
|
+
if datetime.utcnow() - approved_date > timedelta(days=90):
|
|
345
|
+
print(f"Auto-deprecating {rm.name} v{mv.version}: approval expired")
|
|
346
|
+
client.set_model_version_tag(rm.name, mv.version, "state", "deprecated")
|
|
347
|
+
client.set_model_version_tag(
|
|
348
|
+
rm.name, mv.version, "auto_deprecated_reason", "approval_expired"
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
# Auto-retire deprecated models after 30 days
|
|
352
|
+
if state == "deprecated":
|
|
353
|
+
deprecated_at = tags.get("promoted_to_deprecated_at")
|
|
354
|
+
if deprecated_at:
|
|
355
|
+
deprecated_date = datetime.fromisoformat(deprecated_at)
|
|
356
|
+
if datetime.utcnow() - deprecated_date > timedelta(days=30):
|
|
357
|
+
print(f"Auto-retiring {rm.name} v{mv.version}")
|
|
358
|
+
client.set_model_version_tag(rm.name, mv.version, "state", "retired")
|
|
359
|
+
client.transition_model_version_stage(
|
|
360
|
+
rm.name, mv.version, "Archived"
|
|
361
|
+
)
|
|
362
|
+
|
|
363
|
+
# Flag drafts with no activity for 14 days
|
|
364
|
+
if state == "draft":
|
|
365
|
+
created = datetime.fromisoformat(mv.creation_timestamp / 1000)
|
|
366
|
+
if datetime.utcnow() - created > timedelta(days=14):
|
|
367
|
+
print(f"Stale draft: {rm.name} v{mv.version}")
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
## Governance Policies (OPA/Rego)
|
|
371
|
+
|
|
372
|
+
```rego
|
|
373
|
+
# policy/model_governance.rego
|
|
374
|
+
package model.governance
|
|
375
|
+
|
|
376
|
+
# Reject artifacts without SBOM
|
|
377
|
+
deny[msg] {
|
|
378
|
+
not input.metadata.sbom_uri
|
|
379
|
+
msg := "Model must include SBOM artifact URI"
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
# Block promotion if critical CVEs remain
|
|
383
|
+
deny[msg] {
|
|
384
|
+
input.target_state == "approved"
|
|
385
|
+
input.security_scan.critical_cves > 0
|
|
386
|
+
msg := sprintf("Cannot promote: %d critical CVEs unresolved", [input.security_scan.critical_cves])
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
# Require refreshed evals after prompt changes
|
|
390
|
+
deny[msg] {
|
|
391
|
+
input.target_state == "approved"
|
|
392
|
+
input.prompt_changed
|
|
393
|
+
not input.eval_refreshed_after_prompt_change
|
|
394
|
+
msg := "Evaluation must be re-run after prompt template changes"
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
# Require minimum eval scores for production
|
|
398
|
+
deny[msg] {
|
|
399
|
+
input.target_state == "approved"
|
|
400
|
+
input.metadata.quality_score < 0.85
|
|
401
|
+
msg := sprintf("Quality score %.2f below threshold 0.85", [input.metadata.quality_score])
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
# Require dual approval for high-risk models
|
|
405
|
+
deny[msg] {
|
|
406
|
+
input.target_state == "approved"
|
|
407
|
+
input.metadata.risk_rating == "high"
|
|
408
|
+
count(input.approvals) < 2
|
|
409
|
+
msg := "High-risk models require at least 2 approvals"
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
## Audit Readiness
|
|
414
|
+
|
|
415
|
+
Maintain immutable records of:
|
|
416
|
+
|
|
417
|
+
- Who approved and when
|
|
418
|
+
- Which policy checks executed
|
|
419
|
+
- Which exceptions were granted
|
|
420
|
+
- What model/version served each customer request window
|
|
421
|
+
|
|
422
|
+
## Troubleshooting
|
|
423
|
+
|
|
424
|
+
| Issue | Diagnosis | Resolution |
|
|
425
|
+
|-------|-----------|------------|
|
|
426
|
+
| Model registration fails | Check MLflow server connectivity and artifact store permissions | Verify S3/GCS credentials and bucket policy |
|
|
427
|
+
| Promotion blocked by policy | Review OPA deny messages in CI output | Fix metadata gaps or request policy exception |
|
|
428
|
+
| Stale models not auto-retiring | Lifecycle cron job not running | Check CronJob status in Kubernetes |
|
|
429
|
+
| Duplicate model versions | Race condition in CI pipeline | Add locking via registry API or database |
|
|
430
|
+
| Missing eval evidence | Eval pipeline skipped or failed | Re-run eval suite and re-register |
|
|
431
|
+
|
|
432
|
+
## Related Skills
|
|
433
|
+
|
|
434
|
+
- sbom-supply-chain (`sbom-supply-chain`) - Provenance and signing
|
|
435
|
+
- policy-as-code (`policy-as-code`) - Enforce governance with policy engines
|
|
436
|
+
- llm-fine-tuning (`llm-fine-tuning`) - Version adapters and training outputs
|
|
437
|
+
- llmops-platform-engineering (`llmops-platform-engineering`) - Platform CI/CD and promotion workflows
|
|
438
|
+
- ai-sre-incident-response (`ai-sre-incident-response`) - Incident response for model issues
|
|
439
|
+
|
|
440
|
+
## Limitations
|
|
441
|
+
|
|
442
|
+
- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.
|
|
443
|
+
- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.
|
|
444
|
+
|
|
445
|
+
### Example
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
git status && git diff --stat
|
|
449
|
+
kubectl diff -f manifest.yaml
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
> Adapted from [BagelHole/DevOps-Security-Agent-Skills](https://github.com/BagelHole/DevOps-Security-Agent-Skills) (MIT); frontmatter, When to Use/Limitations, and safety boundaries added for upstream compliance. Docs-only import: helper scripts and templates not bundled.
|