{ "guards": [], "id": "provisioning-assess", "postconditions": [ "Assessment report identifies infrastructure nodes from child project ontology", "Report cross-references available providers and taskservs", "Gaps between requirements and available extensions are listed" ], "preconditions": [ "{child_project_dir}/.ontology/core.ncl exists and is valid Nickel", "nickel is available in PATH", "./scripts/ontoref is available and executable", "provisioning platform catalog (extensions/providers/, extensions/taskservs/) is readable" ], "steps": [ { "action": "export_child_ontology", "actor": "Agent", "cmd": "nickel export {child_project_dir}/.ontology/core.ncl", "depends_on": [], "id": "read_child_core", "note": "Export the child project's core ontology. Identifies nodes with infrastructure implications.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Stop" } }, { "action": "catalog_providers", "actor": "Agent", "cmd": "ls extensions/providers/ 2>/dev/null || echo 'no-providers'", "depends_on": [], "id": "list_available_providers", "note": "List available provider extensions. Used to cross-reference child requirements.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "catalog_taskservs", "actor": "Agent", "cmd": "ls extensions/taskservs/ 2>/dev/null || echo 'no-taskservs'", "depends_on": [], "id": "list_available_taskservs", "note": "List available taskservs. Used to cross-reference child requirements.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "filter_infra_relevant_nodes", "actor": "Agent", "cmd": "nickel export {child_project_dir}/.ontology/core.ncl | jq '[.nodes[] | select(.level == \"Project\" or .level == \"Axiom\")]'", "depends_on": [ { "kind": "OnSuccess", "step": "read_child_core" } ], "id": "identify_infra_nodes", "note": "Filter nodes that imply infrastructure requirements — Project and Axiom level nodes typically require provisioning.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Stop" } }, { "action": "match_requirements_to_providers", "actor": "Agent", "cmd": "nickel export {child_project_dir}/.ontology/core.ncl | jq -r '.nodes[] | select(.level == \"Project\") | .id' | while read id; do echo \"$id: check extensions/providers/$id 2>/dev/null || echo 'no match'\"; done", "depends_on": [ { "kind": "OnSuccess", "step": "identify_infra_nodes" }, { "kind": "Always", "step": "list_available_providers" } ], "id": "cross_reference_providers", "note": "Cross-reference identified infrastructure nodes with available providers.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Continue" } }, { "action": "write_assessment_output", "actor": "Agent", "cmd": "./scripts/ontoref describe {child_project_name} --format assessment", "depends_on": [ { "kind": "Always", "step": "cross_reference_providers" }, { "kind": "Always", "step": "list_available_taskservs" } ], "id": "generate_assessment_report", "note": "Generate the final assessment report: what the child project needs from provisioning, what is available, what gaps exist.", "on_error": { "backoff_s": 5, "max": 3, "strategy": "Stop" } } ], "trigger": "Assess a project's infrastructure requirements against the provisioning platform" }