{ "guards": [], "id": "provisioning-coverage", "postconditions": [ "Provider function coverage counted per provider (target: 25 functions each)", "Taskserv completeness checked (metadata.ncl + contracts.ncl presence and validity)", "Coverage report generated with maturity score per extension and ecosystem totals" ], "preconditions": [ "catalog/ directory exists", "nickel is available in PATH", "./scripts/ontoref is executable" ], "steps": [ { "action": "catalog_all_providers", "actor": "Agent", "cmd": "ls catalog/providers/ 2>/dev/null | sort", "depends_on": [], "id": "list_providers", "note": "List all provider extension directories.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "catalog_all_taskservs", "actor": "Agent", "cmd": "ls catalog/taskservs/ 2>/dev/null | sort", "depends_on": [], "id": "list_taskservs", "note": "List all taskserv extension directories.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "verify_provider_interface_completeness", "actor": "Agent", "cmd": "for p in catalog/providers/*/; do echo \"--- $(basename $p)\"; rg 'fn ' $p --include='*.rs' -l | head -1 | xargs rg 'pub fn' 2>/dev/null | wc -l | xargs echo 'functions:'; done", "depends_on": [ { "kind": "OnSuccess", "step": "list_providers" } ], "id": "check_provider_functions", "note": "For each provider, count implemented public functions. Target: 25 functions per the provider interface contract.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "verify_taskserv_contracts", "actor": "Agent", "cmd": "for ts in catalog/taskservs/*/; do name=$(basename $ts); has_meta=$(test -f $ts/metadata.ncl && echo yes || echo NO); has_contracts=$(test -f $ts/contracts.ncl && echo yes || echo NO); echo \"$name: metadata=$has_meta contracts=$has_contracts\"; done", "depends_on": [ { "kind": "OnSuccess", "step": "list_taskservs" } ], "id": "check_taskserv_metadata", "note": "For each taskserv, verify it has metadata.ncl and contracts.ncl. Missing files indicate incomplete extension.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "typecheck_taskserv_metadata", "actor": "Agent", "cmd": "find catalog/taskservs -name 'metadata.ncl' | xargs -I{} sh -c 'nickel typecheck {} > /dev/null 2>&1 && echo \"OK: {}\" || echo \"INVALID: {}\"'", "depends_on": [ { "kind": "Always", "step": "check_taskserv_metadata" } ], "id": "check_taskserv_nickel_validity", "note": "Typecheck all taskserv metadata.ncl files. Invalid metadata cannot be used by the platform.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "write_coverage_output", "actor": "Agent", "cmd": "./scripts/ontoref describe provisioning --format coverage", "depends_on": [ { "kind": "Always", "step": "check_provider_functions" }, { "kind": "Always", "step": "check_taskserv_nickel_validity" } ], "id": "generate_coverage_report", "note": "Generate the maturity map: provider coverage (N/25 functions), taskserv completeness, overall ecosystem coverage score.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Stop" } } ], "strategy": "Override", "trigger": "Generate a maturity map of the provisioning extension ecosystem" }