119 lines
3.9 KiB
JSON
119 lines
3.9 KiB
JSON
{
|
|
"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"
|
|
}
|