igniter 0.5.1 → 0.5.2

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.
Files changed (1132) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +169 -215
  3. data/docs/README.md +12 -15
  4. data/docs/assets/README.md +8 -0
  5. data/docs/concepts/README.md +18 -0
  6. data/docs/concepts/igniter.md +119 -0
  7. data/docs/dev/README.md +48 -0
  8. data/docs/dev/agent-orchestra-dna.md +271 -0
  9. data/docs/dev/ai-agents-target-plan.md +178 -0
  10. data/docs/dev/application-target-plan.md +45 -0
  11. data/docs/dev/application-web-integration.md +59 -0
  12. data/docs/dev/application-web-poc-pattern-guide.md +167 -0
  13. data/docs/dev/architect-supervisor-bootstrap.md +322 -0
  14. data/docs/dev/architecture.md +20 -0
  15. data/docs/dev/cluster-target-plan.md +43 -0
  16. data/docs/dev/contract-persistence-target-plan.md +426 -0
  17. data/docs/dev/current-runtime-snapshot.md +73 -0
  18. data/docs/dev/data-ownership.md +29 -0
  19. data/docs/dev/document-rotation.md +51 -0
  20. data/docs/dev/embed-target-plan.md +51 -0
  21. data/docs/dev/execution-model.md +324 -0
  22. data/docs/dev/igniter-web-dsl-sketch.md +151 -0
  23. data/docs/dev/igniter-web-target-plan.md +56 -0
  24. data/docs/dev/mcp-adapter-package-spec.md +81 -0
  25. data/docs/dev/module-system.md +46 -0
  26. data/docs/dev/package-map.md +112 -0
  27. data/docs/guide/README.md +77 -0
  28. data/docs/guide/ai-and-tools.md +33 -0
  29. data/docs/guide/api-and-runtime.md +38 -0
  30. data/docs/guide/app.md +45 -0
  31. data/docs/guide/application-capsules.md +139 -0
  32. data/docs/guide/application-showcase-portfolio.md +181 -0
  33. data/docs/guide/cli.md +70 -0
  34. data/docs/guide/cluster.md +55 -0
  35. data/docs/guide/configuration.md +31 -0
  36. data/docs/guide/contract-class-dsl.md +154 -0
  37. data/docs/guide/core-runtime-features.md +34 -0
  38. data/docs/guide/core.md +43 -0
  39. data/docs/guide/credentials.md +51 -0
  40. data/docs/guide/deployment-modes.md +63 -0
  41. data/docs/guide/distributed-workflows.md +21 -0
  42. data/docs/guide/getting-started.md +49 -0
  43. data/docs/guide/how-tos.md +33 -0
  44. data/docs/guide/igniter-lang-foundation.md +133 -0
  45. data/docs/guide/integrations.md +47 -0
  46. data/docs/guide/interactive-app-structure.md +91 -0
  47. data/docs/guide/store-adapters.md +183 -0
  48. data/docs/research/README.md +131 -0
  49. data/docs/research/contract-persistence-landing-zone.md +126 -0
  50. data/docs/research/contract-persistence-organic-model.md +279 -0
  51. data/docs/research/contract-persistence-organic-model.ru.md +277 -0
  52. data/docs/research/horizon-protocol.md +180 -0
  53. data/docs/research/igniter-lang-convergence-report.md +338 -0
  54. data/docs/research/project-status-horizon-report.md +363 -0
  55. data/docs/research/vision-handoff-protocol.md +141 -0
  56. data/docs/research/wizard-type-spec-architecture.md +293 -0
  57. data/docs/research/wizard-type-spec-research-request.md +134 -0
  58. data/docs/store/README.md +7 -0
  59. data/docs/store/convergence-audit.md +901 -0
  60. data/examples/README.md +148 -65
  61. data/examples/catalog.rb +1374 -300
  62. data/examples/cluster/incident_workflow.rb +70 -0
  63. data/examples/cluster/incidents.rb +63 -0
  64. data/examples/cluster/mesh_diagnostics.rb +89 -0
  65. data/examples/cluster/remediation.rb +63 -0
  66. data/examples/cluster/routing.rb +65 -0
  67. data/examples/contracts/aggregates.rb +39 -0
  68. data/examples/contracts/auditing.rb +35 -0
  69. data/examples/contracts/basic_pricing.rb +31 -0
  70. data/examples/contracts/branching.rb +36 -0
  71. data/examples/contracts/build_effect_executor_pack.rb +88 -0
  72. data/examples/contracts/build_your_own_pack.rb +82 -0
  73. data/examples/contracts/capabilities.rb +34 -0
  74. data/examples/contracts/class_callable.rb +45 -0
  75. data/examples/contracts/class_pricing.rb +32 -0
  76. data/examples/contracts/collection.rb +44 -0
  77. data/examples/contracts/commerce.rb +44 -0
  78. data/examples/contracts/compose_your_own_packs.rb +110 -0
  79. data/examples/contracts/composition.rb +61 -0
  80. data/examples/contracts/content_addressing.rb +33 -0
  81. data/examples/contracts/contractable_service.rb +43 -0
  82. data/examples/contracts/contractable_shadow.rb +69 -0
  83. data/examples/contracts/create_pack.rb +105 -0
  84. data/examples/contracts/dataflow.rb +57 -0
  85. data/examples/contracts/debug.rb +32 -0
  86. data/examples/contracts/debug_pack_authoring.rb +31 -0
  87. data/examples/contracts/diagnostics.rb +33 -0
  88. data/examples/contracts/differential.rb +97 -0
  89. data/examples/contracts/effects.rb +34 -0
  90. data/examples/contracts/embed_class_registration.rb +40 -0
  91. data/examples/contracts/embed_human_sugar.rb +106 -0
  92. data/examples/contracts/formula.rb +32 -0
  93. data/examples/contracts/incremental.rb +44 -0
  94. data/examples/contracts/introspection.rb +48 -0
  95. data/examples/contracts/invariants.rb +54 -0
  96. data/examples/contracts/journal.rb +37 -0
  97. data/examples/contracts/lang_foundation.rb +37 -0
  98. data/examples/contracts/mcp.rb +62 -0
  99. data/examples/contracts/mcp_host.rb +55 -0
  100. data/examples/contracts/mcp_server.rb +25 -0
  101. data/examples/contracts/piecewise.rb +30 -0
  102. data/examples/contracts/provenance.rb +55 -0
  103. data/examples/contracts/reactive.rb +62 -0
  104. data/examples/contracts/saga.rb +56 -0
  105. data/examples/contracts/scale.rb +30 -0
  106. data/examples/contracts/step_result.rb +58 -0
  107. data/examples/run.rb +9 -9
  108. data/lib/igniter/cluster.rb +3 -0
  109. data/lib/igniter/contract.rb +3 -0
  110. data/lib/igniter/monorepo_packages.rb +8 -9
  111. data/lib/igniter/version.rb +5 -0
  112. data/lib/igniter/web.rb +3 -0
  113. data/lib/igniter.rb +46 -54
  114. data/packages/igniter-agents/README.md +37 -15
  115. data/packages/igniter-agents/lib/igniter/agents/agent_definition.rb +26 -0
  116. data/packages/igniter-agents/lib/igniter/agents/agent_run.rb +47 -0
  117. data/packages/igniter-agents/lib/igniter/agents/agent_turn.rb +34 -0
  118. data/packages/igniter-agents/lib/igniter/agents/runner.rb +56 -0
  119. data/packages/igniter-agents/lib/igniter/agents/tool_call.rb +26 -0
  120. data/packages/igniter-agents/lib/igniter/agents/trace_event.rb +24 -0
  121. data/packages/igniter-agents/lib/igniter/agents.rb +25 -15
  122. data/packages/igniter-agents/lib/igniter-agents.rb +0 -4
  123. data/packages/igniter-ai/README.md +35 -13
  124. data/packages/igniter-ai/lib/igniter/ai/client.rb +18 -0
  125. data/packages/igniter-ai/lib/igniter/ai/error.rb +14 -0
  126. data/packages/igniter-ai/lib/igniter/ai/model_request.rb +28 -0
  127. data/packages/igniter-ai/lib/igniter/ai/model_response.rb +31 -0
  128. data/packages/igniter-ai/lib/igniter/ai/providers/fake.rb +24 -0
  129. data/packages/igniter-ai/lib/igniter/ai/providers/openai_responses.rb +100 -0
  130. data/packages/igniter-ai/lib/igniter/ai/providers/recorded.rb +40 -0
  131. data/packages/igniter-ai/lib/igniter/ai/usage.rb +32 -0
  132. data/packages/igniter-ai/lib/igniter/ai.rb +14 -84
  133. data/packages/igniter-application/README.md +194 -0
  134. data/packages/igniter-application/lib/igniter/application/agent_definition.rb +38 -0
  135. data/packages/igniter-application/lib/igniter/application/agent_registry.rb +33 -0
  136. data/packages/igniter-application/lib/igniter/application/agent_runtime.rb +29 -0
  137. data/packages/igniter-application/lib/igniter/application/agents_builder.rb +26 -0
  138. data/packages/igniter-application/lib/igniter/application/ai_builder.rb +26 -0
  139. data/packages/igniter-application/lib/igniter/application/ai_provider_definition.rb +59 -0
  140. data/packages/igniter-application/lib/igniter/application/ai_registry.rb +34 -0
  141. data/packages/igniter-application/lib/igniter/application/application_assembly_plan.rb +67 -0
  142. data/packages/igniter-application/lib/igniter/application/application_blueprint.rb +227 -0
  143. data/packages/igniter-application/lib/igniter/application/application_capsule_report.rb +61 -0
  144. data/packages/igniter-application/lib/igniter/application/application_composition_report.rb +161 -0
  145. data/packages/igniter-application/lib/igniter/application/application_handoff_manifest.rb +100 -0
  146. data/packages/igniter-application/lib/igniter/application/application_host_activation_commit_readiness.rb +182 -0
  147. data/packages/igniter-application/lib/igniter/application/application_host_activation_dry_run_result.rb +190 -0
  148. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_commit.rb +285 -0
  149. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_verification.rb +301 -0
  150. data/packages/igniter-application/lib/igniter/application/application_host_activation_operation_digest.rb +68 -0
  151. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan.rb +200 -0
  152. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan_verification.rb +140 -0
  153. data/packages/igniter-application/lib/igniter/application/application_host_activation_readiness.rb +226 -0
  154. data/packages/igniter-application/lib/igniter/application/application_host_activation_receipt.rb +151 -0
  155. data/packages/igniter-application/lib/igniter/application/application_layout.rb +91 -0
  156. data/packages/igniter-application/lib/igniter/application/application_load_path.rb +38 -0
  157. data/packages/igniter-application/lib/igniter/application/application_load_report.rb +74 -0
  158. data/packages/igniter-application/lib/igniter/application/application_manifest.rb +65 -0
  159. data/packages/igniter-application/lib/igniter/application/application_structure_entry.rb +58 -0
  160. data/packages/igniter-application/lib/igniter/application/application_structure_plan.rb +128 -0
  161. data/packages/igniter-application/lib/igniter/application/application_transfer_applied_verification.rb +301 -0
  162. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_plan.rb +167 -0
  163. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_result.rb +321 -0
  164. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_artifact.rb +160 -0
  165. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_plan.rb +125 -0
  166. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_verification.rb +154 -0
  167. data/packages/igniter-application/lib/igniter/application/application_transfer_intake_plan.rb +195 -0
  168. data/packages/igniter-application/lib/igniter/application/application_transfer_inventory.rb +153 -0
  169. data/packages/igniter-application/lib/igniter/application/application_transfer_readiness.rb +260 -0
  170. data/packages/igniter-application/lib/igniter/application/application_transfer_receipt.rb +179 -0
  171. data/packages/igniter-application/lib/igniter/application/artifact_reference.rb +39 -0
  172. data/packages/igniter-application/lib/igniter/application/boot_phase.rb +27 -0
  173. data/packages/igniter-application/lib/igniter/application/boot_plan.rb +55 -0
  174. data/packages/igniter-application/lib/igniter/application/boot_report.rb +70 -0
  175. data/packages/igniter-application/lib/igniter/application/capsule_builder.rb +396 -0
  176. data/packages/igniter-application/lib/igniter/application/capsule_export.rb +26 -0
  177. data/packages/igniter-application/lib/igniter/application/capsule_import.rb +38 -0
  178. data/packages/igniter-application/lib/igniter/application/collection_invoker.rb +54 -0
  179. data/packages/igniter-application/lib/igniter/application/collection_transport_adapter.rb +37 -0
  180. data/packages/igniter-application/lib/igniter/application/compose_invoker.rb +51 -0
  181. data/packages/igniter-application/lib/igniter/application/compose_transport_adapter.rb +34 -0
  182. data/packages/igniter-application/lib/igniter/application/config.rb +86 -0
  183. data/packages/igniter-application/lib/igniter/application/config_builder.rb +69 -0
  184. data/packages/igniter-application/lib/igniter/application/contract_registry.rb +30 -0
  185. data/packages/igniter-application/lib/igniter/application/credential_definition.rb +65 -0
  186. data/packages/igniter-application/lib/igniter/application/credential_store.rb +68 -0
  187. data/packages/igniter-application/lib/igniter/application/embedded_host.rb +23 -0
  188. data/packages/igniter-application/lib/igniter/application/environment.rb +1071 -0
  189. data/packages/igniter-application/lib/igniter/application/feature_slice.rb +61 -0
  190. data/packages/igniter-application/lib/igniter/application/feature_slice_report.rb +43 -0
  191. data/packages/igniter-application/lib/igniter/application/file_backed_host_activation_ledger_adapter.rb +138 -0
  192. data/packages/igniter-application/lib/igniter/application/file_backed_installed_capsule_registry.rb +132 -0
  193. data/packages/igniter-application/lib/igniter/application/flow_declaration.rb +62 -0
  194. data/packages/igniter-application/lib/igniter/application/flow_event.rb +50 -0
  195. data/packages/igniter-application/lib/igniter/application/flow_session_snapshot.rb +98 -0
  196. data/packages/igniter-application/lib/igniter/application/installed_capsule_entry.rb +47 -0
  197. data/packages/igniter-application/lib/igniter/application/interface.rb +11 -0
  198. data/packages/igniter-application/lib/igniter/application/kernel.rb +385 -0
  199. data/packages/igniter-application/lib/igniter/application/lifecycle_plan_step.rb +38 -0
  200. data/packages/igniter-application/lib/igniter/application/manual_loader.rb +18 -0
  201. data/packages/igniter-application/lib/igniter/application/manual_scheduler.rb +15 -0
  202. data/packages/igniter-application/lib/igniter/application/memory_session_store.rb +33 -0
  203. data/packages/igniter-application/lib/igniter/application/missing_credential_error.rb +23 -0
  204. data/packages/igniter-application/lib/igniter/application/mount_intent.rb +48 -0
  205. data/packages/igniter-application/lib/igniter/application/mount_registration.rb +49 -0
  206. data/packages/igniter-application/lib/igniter/application/pending_action.rb +39 -0
  207. data/packages/igniter-application/lib/igniter/application/pending_input.rb +45 -0
  208. data/packages/igniter-application/lib/igniter/application/plan_executor.rb +93 -0
  209. data/packages/igniter-application/lib/igniter/application/profile.rb +178 -0
  210. data/packages/igniter-application/lib/igniter/application/provider.rb +19 -0
  211. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_report.rb +72 -0
  212. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_result.rb +54 -0
  213. data/packages/igniter-application/lib/igniter/application/provider_registration.rb +19 -0
  214. data/packages/igniter-application/lib/igniter/application/rack_host.rb +311 -0
  215. data/packages/igniter-application/lib/igniter/application/seam_lifecycle_result.rb +62 -0
  216. data/packages/igniter-application/lib/igniter/application/service_definition.rb +25 -0
  217. data/packages/igniter-application/lib/igniter/application/service_registry.rb +58 -0
  218. data/packages/igniter-application/lib/igniter/application/session_entry.rb +46 -0
  219. data/packages/igniter-application/lib/igniter/application/shutdown_plan.rb +45 -0
  220. data/packages/igniter-application/lib/igniter/application/shutdown_report.rb +54 -0
  221. data/packages/igniter-application/lib/igniter/application/snapshot.rb +35 -0
  222. data/packages/igniter-application/lib/igniter/application/transport_request.rb +40 -0
  223. data/packages/igniter-application/lib/igniter/application/transport_response.rb +22 -0
  224. data/packages/igniter-application/lib/igniter/application.rb +354 -0
  225. data/packages/igniter-application/lib/igniter-application.rb +3 -0
  226. data/packages/igniter-cluster/README.md +112 -5
  227. data/packages/igniter-cluster/lib/igniter/cluster/active_incident_set.rb +40 -0
  228. data/packages/igniter-cluster/lib/igniter/cluster/admission_policy.rb +158 -0
  229. data/packages/igniter-cluster/lib/igniter/cluster/admission_result.rb +47 -0
  230. data/packages/igniter-cluster/lib/igniter/cluster/capability_catalog.rb +66 -0
  231. data/packages/igniter-cluster/lib/igniter/cluster/capability_definition.rb +42 -0
  232. data/packages/igniter-cluster/lib/igniter/cluster/capability_query.rb +162 -0
  233. data/packages/igniter-cluster/lib/igniter/cluster/capability_router.rb +11 -0
  234. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_executor.rb +184 -0
  235. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_report.rb +49 -0
  236. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event.rb +34 -0
  237. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event_log.rb +27 -0
  238. data/packages/igniter-cluster/lib/igniter/cluster/cluster_incident.rb +42 -0
  239. data/packages/igniter-cluster/lib/igniter/cluster/decision_explanation.rb +31 -0
  240. data/packages/igniter-cluster/lib/igniter/cluster/direct_placement.rb +11 -0
  241. data/packages/igniter-cluster/lib/igniter/cluster/discovery_feed.rb +22 -0
  242. data/packages/igniter-cluster/lib/igniter/cluster/environment.rb +380 -0
  243. data/packages/igniter-cluster/lib/igniter/cluster/errors.rb +9 -0
  244. data/packages/igniter-cluster/lib/igniter/cluster/failover_plan.rb +45 -0
  245. data/packages/igniter-cluster/lib/igniter/cluster/failover_step.rb +32 -0
  246. data/packages/igniter-cluster/lib/igniter/cluster/health_policy.rb +124 -0
  247. data/packages/igniter-cluster/lib/igniter/cluster/incident_action.rb +49 -0
  248. data/packages/igniter-cluster/lib/igniter/cluster/incident_entry.rb +98 -0
  249. data/packages/igniter-cluster/lib/igniter/cluster/incident_executor.rb +145 -0
  250. data/packages/igniter-cluster/lib/igniter/cluster/incident_workflow.rb +64 -0
  251. data/packages/igniter-cluster/lib/igniter/cluster/kernel.rb +75 -0
  252. data/packages/igniter-cluster/lib/igniter/cluster/kernel_seams.rb +249 -0
  253. data/packages/igniter-cluster/lib/igniter/cluster/lease_grant.rb +40 -0
  254. data/packages/igniter-cluster/lib/igniter/cluster/lease_plan.rb +40 -0
  255. data/packages/igniter-cluster/lib/igniter/cluster/lease_policy.rb +96 -0
  256. data/packages/igniter-cluster/lib/igniter/cluster/membership_delta.rb +36 -0
  257. data/packages/igniter-cluster/lib/igniter/cluster/membership_feed.rb +24 -0
  258. data/packages/igniter-cluster/lib/igniter/cluster/membership_projection.rb +45 -0
  259. data/packages/igniter-cluster/lib/igniter/cluster/membership_snapshot.rb +64 -0
  260. data/packages/igniter-cluster/lib/igniter/cluster/memory_incident_registry.rb +169 -0
  261. data/packages/igniter-cluster/lib/igniter/cluster/memory_peer_registry.rb +24 -0
  262. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission.rb +24 -0
  263. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission_result.rb +40 -0
  264. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_attempt.rb +51 -0
  265. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_request.rb +71 -0
  266. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_response.rb +28 -0
  267. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_trace.rb +32 -0
  268. data/packages/igniter-cluster/lib/igniter/cluster/mesh_executor.rb +497 -0
  269. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership.rb +89 -0
  270. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_event.rb +32 -0
  271. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_source.rb +49 -0
  272. data/packages/igniter-cluster/lib/igniter/cluster/mesh_retry_policy.rb +42 -0
  273. data/packages/igniter-cluster/lib/igniter/cluster/mesh_trust_policy.rb +131 -0
  274. data/packages/igniter-cluster/lib/igniter/cluster/operator_timeline.rb +33 -0
  275. data/packages/igniter-cluster/lib/igniter/cluster/ownership_claim.rb +30 -0
  276. data/packages/igniter-cluster/lib/igniter/cluster/ownership_plan.rb +40 -0
  277. data/packages/igniter-cluster/lib/igniter/cluster/ownership_policy.rb +100 -0
  278. data/packages/igniter-cluster/lib/igniter/cluster/peer.rb +86 -0
  279. data/packages/igniter-cluster/lib/igniter/cluster/peer_discovery.rb +62 -0
  280. data/packages/igniter-cluster/lib/igniter/cluster/peer_health.rb +55 -0
  281. data/packages/igniter-cluster/lib/igniter/cluster/peer_profile.rb +102 -0
  282. data/packages/igniter-cluster/lib/igniter/cluster/peer_topology.rb +62 -0
  283. data/packages/igniter-cluster/lib/igniter/cluster/peer_view.rb +42 -0
  284. data/packages/igniter-cluster/lib/igniter/cluster/permissive_admission.rb +11 -0
  285. data/packages/igniter-cluster/lib/igniter/cluster/placement_decision.rb +38 -0
  286. data/packages/igniter-cluster/lib/igniter/cluster/placement_policy.rb +131 -0
  287. data/packages/igniter-cluster/lib/igniter/cluster/plan_action_result.rb +72 -0
  288. data/packages/igniter-cluster/lib/igniter/cluster/plan_execution_report.rb +57 -0
  289. data/packages/igniter-cluster/lib/igniter/cluster/plan_executor.rb +314 -0
  290. data/packages/igniter-cluster/lib/igniter/cluster/policy_admission.rb +18 -0
  291. data/packages/igniter-cluster/lib/igniter/cluster/policy_placement.rb +69 -0
  292. data/packages/igniter-cluster/lib/igniter/cluster/policy_router.rb +70 -0
  293. data/packages/igniter-cluster/lib/igniter/cluster/profile.rb +97 -0
  294. data/packages/igniter-cluster/lib/igniter/cluster/projection_executor.rb +42 -0
  295. data/packages/igniter-cluster/lib/igniter/cluster/projection_policy.rb +107 -0
  296. data/packages/igniter-cluster/lib/igniter/cluster/projection_report.rb +35 -0
  297. data/packages/igniter-cluster/lib/igniter/cluster/projection_stage.rb +32 -0
  298. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_move.rb +30 -0
  299. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_plan.rb +40 -0
  300. data/packages/igniter-cluster/lib/igniter/cluster/recovery_timeline.rb +33 -0
  301. data/packages/igniter-cluster/lib/igniter/cluster/registry_membership_source.rb +97 -0
  302. data/packages/igniter-cluster/lib/igniter/cluster/remediation_plan.rb +45 -0
  303. data/packages/igniter-cluster/lib/igniter/cluster/remediation_policy.rb +119 -0
  304. data/packages/igniter-cluster/lib/igniter/cluster/remediation_step.rb +44 -0
  305. data/packages/igniter-cluster/lib/igniter/cluster/route.rb +34 -0
  306. data/packages/igniter-cluster/lib/igniter/cluster/route_policy.rb +104 -0
  307. data/packages/igniter-cluster/lib/igniter/cluster/route_request.rb +61 -0
  308. data/packages/igniter-cluster/lib/igniter/cluster/topology_policy.rb +154 -0
  309. data/packages/igniter-cluster/lib/igniter/cluster/transport_adapter.rb +53 -0
  310. data/packages/igniter-cluster/lib/igniter/cluster.rb +94 -57
  311. data/packages/igniter-contracts/README.md +239 -0
  312. data/packages/igniter-contracts/lib/igniter/contracts/api.rb +92 -0
  313. data/packages/igniter-contracts/lib/igniter/contracts/assembly/baseline_pack.rb +141 -0
  314. data/packages/igniter-contracts/lib/igniter/contracts/assembly/const_pack.rb +29 -0
  315. data/packages/igniter-contracts/lib/igniter/contracts/assembly/dsl_keyword.rb +21 -0
  316. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_result_policies.rb +47 -0
  317. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_spec.rb +73 -0
  318. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_specs.rb +74 -0
  319. data/packages/igniter-contracts/lib/igniter/contracts/assembly/kernel.rb +220 -0
  320. data/packages/igniter-contracts/lib/igniter/contracts/assembly/node_type.rb +26 -0
  321. data/packages/igniter-contracts/lib/igniter/contracts/assembly/ordered_registry.rb +55 -0
  322. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack.rb +13 -0
  323. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack_manifest.rb +131 -0
  324. data/packages/igniter-contracts/lib/igniter/contracts/assembly/path_access.rb +76 -0
  325. data/packages/igniter-contracts/lib/igniter/contracts/assembly/profile.rb +133 -0
  326. data/packages/igniter-contracts/lib/igniter/contracts/assembly/project_pack.rb +42 -0
  327. data/packages/igniter-contracts/lib/igniter/contracts/assembly/registry.rb +57 -0
  328. data/packages/igniter-contracts/lib/igniter/contracts/assembly/step_result_pack.rb +42 -0
  329. data/packages/igniter-contracts/lib/igniter/contracts/assembly.rb +18 -0
  330. data/packages/igniter-contracts/lib/igniter/contracts/contract.rb +135 -0
  331. data/packages/igniter-contracts/lib/igniter/contracts/contractable.rb +288 -0
  332. data/packages/igniter-contracts/lib/igniter/contracts/environment.rb +51 -0
  333. data/packages/igniter-contracts/lib/igniter/contracts/errors.rb +47 -0
  334. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_normalizers.rb +23 -0
  335. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_runtime.rb +55 -0
  336. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_validators.rb +113 -0
  337. data/packages/igniter-contracts/lib/igniter/contracts/execution/builder.rb +43 -0
  338. data/packages/igniter-contracts/lib/igniter/contracts/execution/compilation_report.rb +46 -0
  339. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiled_graph.rb +21 -0
  340. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiler.rb +66 -0
  341. data/packages/igniter-contracts/lib/igniter/contracts/execution/const_runtime.rb +15 -0
  342. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics.rb +24 -0
  343. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_report.rb +40 -0
  344. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_section.rb +37 -0
  345. data/packages/igniter-contracts/lib/igniter/contracts/execution/effect_invocation.rb +26 -0
  346. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_request.rb +28 -0
  347. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_result.rb +32 -0
  348. data/packages/igniter-contracts/lib/igniter/contracts/execution/inline_executor.rb +19 -0
  349. data/packages/igniter-contracts/lib/igniter/contracts/execution/mutable_named_values.rb +52 -0
  350. data/packages/igniter-contracts/lib/igniter/contracts/execution/named_values.rb +48 -0
  351. data/packages/igniter-contracts/lib/igniter/contracts/execution/operation.rb +42 -0
  352. data/packages/igniter-contracts/lib/igniter/contracts/execution/runtime.rb +43 -0
  353. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result.rb +51 -0
  354. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_diagnostics.rb +35 -0
  355. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_runtime.rb +51 -0
  356. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_validators.rb +44 -0
  357. data/packages/igniter-contracts/lib/igniter/contracts/execution/structured_dump.rb +49 -0
  358. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_finding.rb +28 -0
  359. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_report.rb +46 -0
  360. data/packages/igniter-contracts/lib/igniter/contracts/execution.rb +28 -0
  361. data/packages/igniter-contracts/lib/igniter/contracts.rb +54 -0
  362. data/packages/igniter-contracts/lib/igniter/lang/backend.rb +19 -0
  363. data/packages/igniter-contracts/lib/igniter/lang/backends/ruby.rb +42 -0
  364. data/packages/igniter-contracts/lib/igniter/lang/diagnostic_payload.rb +174 -0
  365. data/packages/igniter-contracts/lib/igniter/lang/metadata_carrier_manifest.rb +112 -0
  366. data/packages/igniter-contracts/lib/igniter/lang/metadata_manifest.rb +128 -0
  367. data/packages/igniter-contracts/lib/igniter/lang/receipt_payload.rb +152 -0
  368. data/packages/igniter-contracts/lib/igniter/lang/schema_compatibility_diagnostic.rb +300 -0
  369. data/packages/igniter-contracts/lib/igniter/lang/types.rb +84 -0
  370. data/packages/igniter-contracts/lib/igniter/lang/verification_report.rb +226 -0
  371. data/packages/igniter-contracts/lib/igniter/lang.rb +27 -0
  372. data/packages/igniter-contracts/lib/igniter-contracts.rb +3 -0
  373. data/packages/igniter-embed/README.md +360 -0
  374. data/packages/igniter-embed/lib/igniter/embed/config.rb +155 -0
  375. data/packages/igniter-embed/lib/igniter/embed/container.rb +165 -0
  376. data/packages/igniter-embed/lib/igniter/embed/contract_handle.rb +23 -0
  377. data/packages/igniter-embed/lib/igniter/embed/contract_naming.rb +38 -0
  378. data/packages/igniter-embed/lib/igniter/embed/contractable/acceptance.rb +52 -0
  379. data/packages/igniter-embed/lib/igniter/embed/contractable/adapters.rb +33 -0
  380. data/packages/igniter-embed/lib/igniter/embed/contractable/config.rb +234 -0
  381. data/packages/igniter-embed/lib/igniter/embed/contractable/runner.rb +393 -0
  382. data/packages/igniter-embed/lib/igniter/embed/contractable/sugar_builder.rb +145 -0
  383. data/packages/igniter-embed/lib/igniter/embed/contractable.rb +29 -0
  384. data/packages/igniter-embed/lib/igniter/embed/contracts_builder.rb +54 -0
  385. data/packages/igniter-embed/lib/igniter/embed/errors.rb +14 -0
  386. data/packages/igniter-embed/lib/igniter/embed/execution_envelope.rb +50 -0
  387. data/packages/igniter-embed/lib/igniter/embed/host_builder.rb +39 -0
  388. data/packages/igniter-embed/lib/igniter/embed/rails.rb +21 -0
  389. data/packages/igniter-embed/lib/igniter/embed/registry.rb +78 -0
  390. data/packages/igniter-embed/lib/igniter/embed/sugar_expansion.rb +152 -0
  391. data/packages/igniter-embed/lib/igniter/embed.rb +38 -0
  392. data/packages/igniter-embed/lib/igniter-embed.rb +3 -0
  393. data/packages/igniter-extensions/README.md +364 -4
  394. data/packages/igniter-extensions/lib/igniter/extensions/contracts/aggregate_pack.rb +103 -0
  395. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/builder.rb +132 -0
  396. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/event.rb +34 -0
  397. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/snapshot.rb +44 -0
  398. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit_pack.rb +60 -0
  399. data/packages/igniter-extensions/lib/igniter/extensions/contracts/branch_pack.rb +199 -0
  400. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/declaration.rb +31 -0
  401. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/error.rb +35 -0
  402. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/policy.rb +20 -0
  403. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/report.rb +47 -0
  404. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/violation.rb +30 -0
  405. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities_pack.rb +146 -0
  406. data/packages/igniter-extensions/lib/igniter/extensions/contracts/collection_pack.rb +212 -0
  407. data/packages/igniter-extensions/lib/igniter/extensions/contracts/commerce_pack.rb +91 -0
  408. data/packages/igniter-extensions/lib/igniter/extensions/contracts/compose_pack.rb +213 -0
  409. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/cache.rb +59 -0
  410. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/content_key.rb +63 -0
  411. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/declaration.rb +47 -0
  412. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing_pack.rb +90 -0
  413. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/profile.rb +196 -0
  414. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/report.rb +85 -0
  415. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scaffold.rb +461 -0
  416. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scope.rb +79 -0
  417. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/wizard.rb +269 -0
  418. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow.rb +189 -0
  419. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow_step.rb +51 -0
  420. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_result.rb +48 -0
  421. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_step.rb +63 -0
  422. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/writer.rb +131 -0
  423. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator_pack.rb +128 -0
  424. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_operators.rb +119 -0
  425. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_state.rb +60 -0
  426. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/builder.rb +66 -0
  427. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/collection_result.rb +70 -0
  428. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/diff.rb +37 -0
  429. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/item_result.rb +44 -0
  430. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/result.rb +58 -0
  431. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/session.rb +173 -0
  432. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/window_filter.rb +49 -0
  433. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow_pack.rb +66 -0
  434. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_audit.rb +181 -0
  435. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_snapshot.rb +46 -0
  436. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/profile_snapshot.rb +50 -0
  437. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/report.rb +50 -0
  438. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug_pack.rb +115 -0
  439. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/divergence.rb +37 -0
  440. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/formatter.rb +85 -0
  441. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/report.rb +83 -0
  442. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/runner.rb +136 -0
  443. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential_pack.rb +61 -0
  444. data/packages/igniter-extensions/lib/igniter/extensions/contracts/execution_report_pack.rb +38 -0
  445. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/formatter.rb +60 -0
  446. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/node_state.rb +30 -0
  447. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/result.rb +65 -0
  448. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/session.rb +146 -0
  449. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental_pack.rb +40 -0
  450. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/builder.rb +27 -0
  451. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/cases_report.rb +47 -0
  452. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/error.rb +34 -0
  453. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/invariant.rb +30 -0
  454. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/report.rb +45 -0
  455. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/suite.rb +36 -0
  456. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/violation.rb +39 -0
  457. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants_pack.rb +88 -0
  458. data/packages/igniter-extensions/lib/igniter/extensions/contracts/journal_pack.rb +55 -0
  459. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/formula_pack.rb +185 -0
  460. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/piecewise_pack.rb +166 -0
  461. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/scale_pack.rb +147 -0
  462. data/packages/igniter-extensions/lib/igniter/extensions/contracts/lookup_pack.rb +50 -0
  463. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/creator_session.rb +105 -0
  464. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_argument.rb +35 -0
  465. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_definition.rb +33 -0
  466. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_result.rb +28 -0
  467. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp_pack.rb +335 -0
  468. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/builder.rb +80 -0
  469. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/lineage.rb +59 -0
  470. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/node_trace.rb +53 -0
  471. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/text_formatter.rb +62 -0
  472. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance_pack.rb +52 -0
  473. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/builder.rb +43 -0
  474. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/dispatch_result.rb +59 -0
  475. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/engine.rb +79 -0
  476. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/event.rb +36 -0
  477. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/matcher.rb +20 -0
  478. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/plan.rb +58 -0
  479. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/subscription.rb +29 -0
  480. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive_pack.rb +169 -0
  481. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation.rb +25 -0
  482. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_record.rb +28 -0
  483. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_set.rb +47 -0
  484. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/formatter.rb +39 -0
  485. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/result.rb +56 -0
  486. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/runner.rb +124 -0
  487. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga_pack.rb +56 -0
  488. data/packages/igniter-extensions/lib/igniter/extensions/contracts.rb +445 -0
  489. data/packages/igniter-extensions/lib/igniter/extensions.rb +0 -2
  490. data/packages/igniter-hub/README.md +25 -0
  491. data/packages/igniter-hub/lib/igniter/hub/catalog_entry.rb +35 -0
  492. data/packages/igniter-hub/lib/igniter/hub/local_catalog.rb +51 -0
  493. data/packages/igniter-hub/lib/igniter/hub.rb +16 -0
  494. data/packages/igniter-hub/lib/igniter-hub.rb +3 -0
  495. data/packages/igniter-mcp-adapter/README.md +65 -0
  496. data/packages/igniter-mcp-adapter/exe/igniter-mcp-adapter +6 -0
  497. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/host.rb +226 -0
  498. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/server.rb +148 -0
  499. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter.rb +40 -0
  500. data/packages/igniter-mcp-adapter/lib/igniter-mcp-adapter.rb +5 -0
  501. data/packages/igniter-web/README.md +539 -0
  502. data/packages/igniter-web/lib/igniter/web/api.rb +49 -0
  503. data/packages/igniter-web/lib/igniter/web/application.rb +99 -0
  504. data/packages/igniter-web/lib/igniter/web/application_web_mount.rb +162 -0
  505. data/packages/igniter-web/lib/igniter/web/arbre.rb +41 -0
  506. data/packages/igniter-web/lib/igniter/web/component.rb +103 -0
  507. data/packages/igniter-web/lib/igniter/web/components/view_action_node.rb +38 -0
  508. data/packages/igniter-web/lib/igniter/web/components/view_ask_node.rb +52 -0
  509. data/packages/igniter-web/lib/igniter/web/components/view_chat_node.rb +34 -0
  510. data/packages/igniter-web/lib/igniter/web/components/view_compare_node.rb +41 -0
  511. data/packages/igniter-web/lib/igniter/web/components/view_node.rb +30 -0
  512. data/packages/igniter-web/lib/igniter/web/components/view_screen.rb +34 -0
  513. data/packages/igniter-web/lib/igniter/web/components/view_stream_node.rb +32 -0
  514. data/packages/igniter-web/lib/igniter/web/components/view_zone.rb +26 -0
  515. data/packages/igniter-web/lib/igniter/web/components.rb +10 -0
  516. data/packages/igniter-web/lib/igniter/web/composer.rb +84 -0
  517. data/packages/igniter-web/lib/igniter/web/composition_finding.rb +16 -0
  518. data/packages/igniter-web/lib/igniter/web/composition_policy.rb +88 -0
  519. data/packages/igniter-web/lib/igniter/web/composition_preset.rb +131 -0
  520. data/packages/igniter-web/lib/igniter/web/composition_result.rb +27 -0
  521. data/packages/igniter-web/lib/igniter/web/flow_interaction_adapter.rb +104 -0
  522. data/packages/igniter-web/lib/igniter/web/flow_surface_projection.rb +121 -0
  523. data/packages/igniter-web/lib/igniter/web/interaction_target.rb +50 -0
  524. data/packages/igniter-web/lib/igniter/web/mount_context.rb +80 -0
  525. data/packages/igniter-web/lib/igniter/web/page.rb +110 -0
  526. data/packages/igniter-web/lib/igniter/web/record.rb +54 -0
  527. data/packages/igniter-web/lib/igniter/web/screen_spec.rb +109 -0
  528. data/packages/igniter-web/lib/igniter/web/surface_manifest.rb +370 -0
  529. data/packages/igniter-web/lib/igniter/web/surface_structure.rb +57 -0
  530. data/packages/igniter-web/lib/igniter/web/view_graph.rb +25 -0
  531. data/packages/igniter-web/lib/igniter/web/view_graph_renderer.rb +63 -0
  532. data/packages/igniter-web/lib/igniter/web/view_node.rb +37 -0
  533. data/packages/igniter-web/lib/igniter/web.rb +107 -0
  534. data/packages/igniter-web/lib/igniter-web.rb +3 -0
  535. metadata +531 -641
  536. data/bin/igniter-stack +0 -94
  537. data/examples/agent_orchestration.rb +0 -76
  538. data/examples/agents.rb +0 -151
  539. data/examples/async_store.rb +0 -47
  540. data/examples/basic_pricing.rb +0 -27
  541. data/examples/collection.rb +0 -43
  542. data/examples/collection_partial_failure.rb +0 -50
  543. data/examples/composition.rb +0 -39
  544. data/examples/consensus.rb +0 -241
  545. data/examples/dataflow.rb +0 -309
  546. data/examples/diagnostics.rb +0 -28
  547. data/examples/differential.rb +0 -161
  548. data/examples/distributed_server.rb +0 -94
  549. data/examples/distributed_workflow.rb +0 -52
  550. data/examples/effects.rb +0 -185
  551. data/examples/elocal_webhook.rb +0 -1
  552. data/examples/incremental.rb +0 -143
  553. data/examples/introspection.rb +0 -49
  554. data/examples/invariants.rb +0 -180
  555. data/examples/llm_tools.rb +0 -237
  556. data/examples/marketing_ergonomics.rb +0 -57
  557. data/examples/mesh.rb +0 -241
  558. data/examples/mesh_discovery.rb +0 -287
  559. data/examples/mesh_gossip.rb +0 -164
  560. data/examples/order_pipeline.rb +0 -163
  561. data/examples/provenance.rb +0 -122
  562. data/examples/reactive_auditing.rb +0 -50
  563. data/examples/ringcentral_routing.rb +0 -269
  564. data/examples/saga.rb +0 -110
  565. data/lib/igniter/stack.rb +0 -5
  566. data/packages/igniter-agents/lib/igniter/agent/mailbox.rb +0 -96
  567. data/packages/igniter-agents/lib/igniter/agent/message.rb +0 -21
  568. data/packages/igniter-agents/lib/igniter/agent/ref.rb +0 -87
  569. data/packages/igniter-agents/lib/igniter/agent/runner.rb +0 -141
  570. data/packages/igniter-agents/lib/igniter/agent/state_holder.rb +0 -23
  571. data/packages/igniter-agents/lib/igniter/agent.rb +0 -161
  572. data/packages/igniter-agents/lib/igniter/agents/observability/metrics_agent.rb +0 -130
  573. data/packages/igniter-agents/lib/igniter/agents/pipeline/batch_processor_agent.rb +0 -131
  574. data/packages/igniter-agents/lib/igniter/agents/proactive/alert_agent.rb +0 -111
  575. data/packages/igniter-agents/lib/igniter/agents/proactive/health_check_agent.rb +0 -122
  576. data/packages/igniter-agents/lib/igniter/agents/proactive_agent.rb +0 -208
  577. data/packages/igniter-agents/lib/igniter/agents/reliability/retry_agent.rb +0 -99
  578. data/packages/igniter-agents/lib/igniter/agents/scheduling/cron_agent.rb +0 -110
  579. data/packages/igniter-agents/lib/igniter/ai/agents/chain_agent.rb +0 -129
  580. data/packages/igniter-agents/lib/igniter/ai/agents/critic_agent.rb +0 -165
  581. data/packages/igniter-agents/lib/igniter/ai/agents/evaluator_agent.rb +0 -195
  582. data/packages/igniter-agents/lib/igniter/ai/agents/evolution_agent.rb +0 -288
  583. data/packages/igniter-agents/lib/igniter/ai/agents/observer_agent.rb +0 -186
  584. data/packages/igniter-agents/lib/igniter/ai/agents/planner_agent.rb +0 -212
  585. data/packages/igniter-agents/lib/igniter/ai/agents/router_agent.rb +0 -133
  586. data/packages/igniter-agents/lib/igniter/ai/agents/self_reflection_agent.rb +0 -177
  587. data/packages/igniter-agents/lib/igniter/ai/agents.rb +0 -25
  588. data/packages/igniter-agents/lib/igniter/registry.rb +0 -69
  589. data/packages/igniter-agents/lib/igniter/runtime/registry_agent_adapter.rb +0 -102
  590. data/packages/igniter-agents/lib/igniter/supervisor.rb +0 -170
  591. data/packages/igniter-ai/lib/igniter/ai/config.rb +0 -113
  592. data/packages/igniter-ai/lib/igniter/ai/context.rb +0 -74
  593. data/packages/igniter-ai/lib/igniter/ai/executor.rb +0 -352
  594. data/packages/igniter-ai/lib/igniter/ai/providers/anthropic.rb +0 -181
  595. data/packages/igniter-ai/lib/igniter/ai/providers/base.rb +0 -33
  596. data/packages/igniter-ai/lib/igniter/ai/providers/ollama.rb +0 -137
  597. data/packages/igniter-ai/lib/igniter/ai/providers/openai.rb +0 -182
  598. data/packages/igniter-ai/lib/igniter/ai/skill/feedback.rb +0 -116
  599. data/packages/igniter-ai/lib/igniter/ai/skill/output_schema.rb +0 -110
  600. data/packages/igniter-ai/lib/igniter/ai/skill/runtime_contract.rb +0 -87
  601. data/packages/igniter-ai/lib/igniter/ai/skill.rb +0 -107
  602. data/packages/igniter-ai/lib/igniter/ai/tool_registry.rb +0 -79
  603. data/packages/igniter-ai/lib/igniter/ai/transcription/providers/assemblyai.rb +0 -200
  604. data/packages/igniter-ai/lib/igniter/ai/transcription/providers/base.rb +0 -122
  605. data/packages/igniter-ai/lib/igniter/ai/transcription/providers/deepgram.rb +0 -162
  606. data/packages/igniter-ai/lib/igniter/ai/transcription/providers/openai.rb +0 -102
  607. data/packages/igniter-ai/lib/igniter/ai/transcription/transcriber.rb +0 -145
  608. data/packages/igniter-ai/lib/igniter/ai/transcription/transcript_result.rb +0 -29
  609. data/packages/igniter-app/README.md +0 -19
  610. data/packages/igniter-app/lib/igniter/app/app_config.rb +0 -43
  611. data/packages/igniter-app/lib/igniter/app/app_host.rb +0 -56
  612. data/packages/igniter-app/lib/igniter/app/app_host_config.rb +0 -27
  613. data/packages/igniter-app/lib/igniter/app/app_host_pack.rb +0 -13
  614. data/packages/igniter-app/lib/igniter/app/autoloader.rb +0 -18
  615. data/packages/igniter-app/lib/igniter/app/cluster_app_host.rb +0 -95
  616. data/packages/igniter-app/lib/igniter/app/cluster_app_host_config.rb +0 -78
  617. data/packages/igniter-app/lib/igniter/app/credentials/config_loader.rb +0 -152
  618. data/packages/igniter-app/lib/igniter/app/credentials/credential.rb +0 -48
  619. data/packages/igniter-app/lib/igniter/app/credentials/credential_policy.rb +0 -38
  620. data/packages/igniter-app/lib/igniter/app/credentials/events/credential_event.rb +0 -179
  621. data/packages/igniter-app/lib/igniter/app/credentials/events.rb +0 -12
  622. data/packages/igniter-app/lib/igniter/app/credentials/lease_request.rb +0 -153
  623. data/packages/igniter-app/lib/igniter/app/credentials/policies/ephemeral_lease_policy.rb +0 -35
  624. data/packages/igniter-app/lib/igniter/app/credentials/policies/local_only_policy.rb +0 -33
  625. data/packages/igniter-app/lib/igniter/app/credentials/policies.rb +0 -13
  626. data/packages/igniter-app/lib/igniter/app/credentials/store.rb +0 -21
  627. data/packages/igniter-app/lib/igniter/app/credentials/stores/file_store.rb +0 -114
  628. data/packages/igniter-app/lib/igniter/app/credentials/trail.rb +0 -254
  629. data/packages/igniter-app/lib/igniter/app/credentials.rb +0 -20
  630. data/packages/igniter-app/lib/igniter/app/dev_output_sync.rb +0 -4
  631. data/packages/igniter-app/lib/igniter/app/diagnostics/app_host_contributor.rb +0 -71
  632. data/packages/igniter-app/lib/igniter/app/diagnostics/cluster_app_host_contributor.rb +0 -97
  633. data/packages/igniter-app/lib/igniter/app/diagnostics/credential_contributor.rb +0 -66
  634. data/packages/igniter-app/lib/igniter/app/diagnostics/evolution_contributor.rb +0 -74
  635. data/packages/igniter-app/lib/igniter/app/diagnostics/ignite_contributor.rb +0 -121
  636. data/packages/igniter-app/lib/igniter/app/diagnostics/loader_contributor.rb +0 -68
  637. data/packages/igniter-app/lib/igniter/app/diagnostics/orchestration_contributor.rb +0 -200
  638. data/packages/igniter-app/lib/igniter/app/diagnostics/runtime_contributor.rb +0 -68
  639. data/packages/igniter-app/lib/igniter/app/diagnostics/scheduler_contributor.rb +0 -72
  640. data/packages/igniter-app/lib/igniter/app/diagnostics/sdk_contributor.rb +0 -284
  641. data/packages/igniter-app/lib/igniter/app/diagnostics.rb +0 -62
  642. data/packages/igniter-app/lib/igniter/app/evolution/approval_decision.rb +0 -115
  643. data/packages/igniter-app/lib/igniter/app/evolution/approval_request.rb +0 -36
  644. data/packages/igniter-app/lib/igniter/app/evolution/plan.rb +0 -72
  645. data/packages/igniter-app/lib/igniter/app/evolution/planner.rb +0 -85
  646. data/packages/igniter-app/lib/igniter/app/evolution/result.rb +0 -45
  647. data/packages/igniter-app/lib/igniter/app/evolution/runner.rb +0 -102
  648. data/packages/igniter-app/lib/igniter/app/evolution/store.rb +0 -21
  649. data/packages/igniter-app/lib/igniter/app/evolution/stores/file_store.rb +0 -241
  650. data/packages/igniter-app/lib/igniter/app/evolution/trail.rb +0 -108
  651. data/packages/igniter-app/lib/igniter/app/evolution.rb +0 -11
  652. data/packages/igniter-app/lib/igniter/app/filesystem_loader_adapter.rb +0 -21
  653. data/packages/igniter-app/lib/igniter/app/generator.rb +0 -636
  654. data/packages/igniter-app/lib/igniter/app/generators/cluster.rb +0 -1367
  655. data/packages/igniter-app/lib/igniter/app/generators/dashboard.rb +0 -152
  656. data/packages/igniter-app/lib/igniter/app/generators/playground.rb +0 -1227
  657. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/README.md.erb +0 -37
  658. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/app.rb.erb +0 -19
  659. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/contexts/home_context.rb.erb +0 -54
  660. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/frontend/application.js.erb +0 -3
  661. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/spec/dashboard_app_spec.rb.erb +0 -79
  662. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/support/stack_overview.rb.erb +0 -23
  663. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/handlers/home_handler.rb.erb +0 -27
  664. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/home_page.arb.erb +0 -44
  665. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/home_page.rb.erb +0 -56
  666. data/packages/igniter-app/lib/igniter/app/generators/templates/dashboard/web/views/layout.arb.erb +0 -17
  667. data/packages/igniter-app/lib/igniter/app/host_adapter.rb +0 -26
  668. data/packages/igniter-app/lib/igniter/app/host_config.rb +0 -40
  669. data/packages/igniter-app/lib/igniter/app/host_registry.rb +0 -43
  670. data/packages/igniter-app/lib/igniter/app/loader_adapter.rb +0 -15
  671. data/packages/igniter-app/lib/igniter/app/loader_pack.rb +0 -8
  672. data/packages/igniter-app/lib/igniter/app/loader_registry.rb +0 -39
  673. data/packages/igniter-app/lib/igniter/app/observability/operator_action_handler.rb +0 -147
  674. data/packages/igniter-app/lib/igniter/app/observability/operator_console_handler.rb +0 -747
  675. data/packages/igniter-app/lib/igniter/app/observability/operator_overview_handler.rb +0 -350
  676. data/packages/igniter-app/lib/igniter/app/observability.rb +0 -5
  677. data/packages/igniter-app/lib/igniter/app/observability_pack.rb +0 -71
  678. data/packages/igniter-app/lib/igniter/app/operator/dispatcher.rb +0 -40
  679. data/packages/igniter-app/lib/igniter/app/operator/handler_registry.rb +0 -40
  680. data/packages/igniter-app/lib/igniter/app/operator/handler_result.rb +0 -67
  681. data/packages/igniter-app/lib/igniter/app/operator/handlers/base.rb +0 -79
  682. data/packages/igniter-app/lib/igniter/app/operator/handlers/ignite_handler.rb +0 -108
  683. data/packages/igniter-app/lib/igniter/app/operator/handlers/orchestration_handler.rb +0 -33
  684. data/packages/igniter-app/lib/igniter/app/operator/handlers.rb +0 -5
  685. data/packages/igniter-app/lib/igniter/app/operator/lifecycle_contract.rb +0 -55
  686. data/packages/igniter-app/lib/igniter/app/operator/policy.rb +0 -157
  687. data/packages/igniter-app/lib/igniter/app/operator.rb +0 -17
  688. data/packages/igniter-app/lib/igniter/app/orchestration/action_result_builder.rb +0 -65
  689. data/packages/igniter-app/lib/igniter/app/orchestration/followup_request.rb +0 -36
  690. data/packages/igniter-app/lib/igniter/app/orchestration/handler_registry.rb +0 -58
  691. data/packages/igniter-app/lib/igniter/app/orchestration/handlers.rb +0 -106
  692. data/packages/igniter-app/lib/igniter/app/orchestration/inbox.rb +0 -283
  693. data/packages/igniter-app/lib/igniter/app/orchestration/inbox_query.rb +0 -293
  694. data/packages/igniter-app/lib/igniter/app/orchestration/lane_registry.rb +0 -100
  695. data/packages/igniter-app/lib/igniter/app/orchestration/operator_query.rb +0 -449
  696. data/packages/igniter-app/lib/igniter/app/orchestration/plan.rb +0 -68
  697. data/packages/igniter-app/lib/igniter/app/orchestration/planner.rb +0 -89
  698. data/packages/igniter-app/lib/igniter/app/orchestration/policies.rb +0 -125
  699. data/packages/igniter-app/lib/igniter/app/orchestration/policy_registry.rb +0 -63
  700. data/packages/igniter-app/lib/igniter/app/orchestration/result.rb +0 -43
  701. data/packages/igniter-app/lib/igniter/app/orchestration/routing_registry.rb +0 -43
  702. data/packages/igniter-app/lib/igniter/app/orchestration/runner.rb +0 -50
  703. data/packages/igniter-app/lib/igniter/app/orchestration/runtime_event_query.rb +0 -205
  704. data/packages/igniter-app/lib/igniter/app/orchestration/runtime_overview_builder.rb +0 -286
  705. data/packages/igniter-app/lib/igniter/app/orchestration/runtime_query_overview_builder.rb +0 -20
  706. data/packages/igniter-app/lib/igniter/app/orchestration/runtime_result_builder.rb +0 -23
  707. data/packages/igniter-app/lib/igniter/app/orchestration.rb +0 -113
  708. data/packages/igniter-app/lib/igniter/app/runtime.rb +0 -4
  709. data/packages/igniter-app/lib/igniter/app/runtime_context.rb +0 -101
  710. data/packages/igniter-app/lib/igniter/app/runtime_pack.rb +0 -16
  711. data/packages/igniter-app/lib/igniter/app/scaffold_pack.rb +0 -6
  712. data/packages/igniter-app/lib/igniter/app/scheduler.rb +0 -109
  713. data/packages/igniter-app/lib/igniter/app/scheduler_adapter.rb +0 -17
  714. data/packages/igniter-app/lib/igniter/app/scheduler_pack.rb +0 -8
  715. data/packages/igniter-app/lib/igniter/app/scheduler_registry.rb +0 -39
  716. data/packages/igniter-app/lib/igniter/app/stack.rb +0 -1726
  717. data/packages/igniter-app/lib/igniter/app/stack_pack.rb +0 -3
  718. data/packages/igniter-app/lib/igniter/app/threaded_scheduler_adapter.rb +0 -35
  719. data/packages/igniter-app/lib/igniter/app/yml_loader.rb +0 -43
  720. data/packages/igniter-app/lib/igniter/app.rb +0 -2367
  721. data/packages/igniter-app/lib/igniter/ignite/bootstrap_agent.rb +0 -334
  722. data/packages/igniter-app/lib/igniter/ignite/bootstrap_target.rb +0 -79
  723. data/packages/igniter-app/lib/igniter/ignite/deployment_intent.rb +0 -82
  724. data/packages/igniter-app/lib/igniter/ignite/ignition_agent.rb +0 -1011
  725. data/packages/igniter-app/lib/igniter/ignite/ignition_plan.rb +0 -83
  726. data/packages/igniter-app/lib/igniter/ignite/ignition_report.rb +0 -144
  727. data/packages/igniter-app/lib/igniter/ignite/store.rb +0 -19
  728. data/packages/igniter-app/lib/igniter/ignite/stores/file_store.rb +0 -112
  729. data/packages/igniter-app/lib/igniter/ignite/trail.rb +0 -215
  730. data/packages/igniter-app/lib/igniter/ignite.rb +0 -11
  731. data/packages/igniter-app/lib/igniter-app.rb +0 -5
  732. data/packages/igniter-cluster/lib/igniter/cluster/agent_route_resolver.rb +0 -58
  733. data/packages/igniter-cluster/lib/igniter/cluster/consensus/cluster.rb +0 -187
  734. data/packages/igniter-cluster/lib/igniter/cluster/consensus/errors.rb +0 -16
  735. data/packages/igniter-cluster/lib/igniter/cluster/consensus/executors.rb +0 -45
  736. data/packages/igniter-cluster/lib/igniter/cluster/consensus/node.rb +0 -322
  737. data/packages/igniter-cluster/lib/igniter/cluster/consensus/read_query.rb +0 -32
  738. data/packages/igniter-cluster/lib/igniter/cluster/consensus/state_machine.rb +0 -60
  739. data/packages/igniter-cluster/lib/igniter/cluster/consensus.rb +0 -18
  740. data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/governance_contributor.rb +0 -90
  741. data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/identity_contributor.rb +0 -98
  742. data/packages/igniter-cluster/lib/igniter/cluster/diagnostics/routing_contributor.rb +0 -674
  743. data/packages/igniter-cluster/lib/igniter/cluster/diagnostics.rb +0 -24
  744. data/packages/igniter-cluster/lib/igniter/cluster/events/envelope.rb +0 -136
  745. data/packages/igniter-cluster/lib/igniter/cluster/events/hook_support.rb +0 -33
  746. data/packages/igniter-cluster/lib/igniter/cluster/events/log.rb +0 -102
  747. data/packages/igniter-cluster/lib/igniter/cluster/events/projection_feed.rb +0 -98
  748. data/packages/igniter-cluster/lib/igniter/cluster/events/read_model_projector.rb +0 -32
  749. data/packages/igniter-cluster/lib/igniter/cluster/events.rb +0 -131
  750. data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_decision.rb +0 -41
  751. data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_policy.rb +0 -66
  752. data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_queue.rb +0 -88
  753. data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_request.rb +0 -62
  754. data/packages/igniter-cluster/lib/igniter/cluster/governance/admission_workflow.rb +0 -214
  755. data/packages/igniter-cluster/lib/igniter/cluster/governance/checkpoint.rb +0 -141
  756. data/packages/igniter-cluster/lib/igniter/cluster/governance/compaction_record.rb +0 -33
  757. data/packages/igniter-cluster/lib/igniter/cluster/governance/stores/checkpoint_store.rb +0 -89
  758. data/packages/igniter-cluster/lib/igniter/cluster/governance/stores/file_store.rb +0 -249
  759. data/packages/igniter-cluster/lib/igniter/cluster/governance/trail.rb +0 -164
  760. data/packages/igniter-cluster/lib/igniter/cluster/governance.rb +0 -12
  761. data/packages/igniter-cluster/lib/igniter/cluster/identity/capability_attestation.rb +0 -114
  762. data/packages/igniter-cluster/lib/igniter/cluster/identity/manifest.rb +0 -139
  763. data/packages/igniter-cluster/lib/igniter/cluster/identity/node_identity.rb +0 -106
  764. data/packages/igniter-cluster/lib/igniter/cluster/identity.rb +0 -5
  765. data/packages/igniter-cluster/lib/igniter/cluster/mesh/announcer.rb +0 -88
  766. data/packages/igniter-cluster/lib/igniter/cluster/mesh/checkpoint_gossip.rb +0 -60
  767. data/packages/igniter-cluster/lib/igniter/cluster/mesh/config.rb +0 -146
  768. data/packages/igniter-cluster/lib/igniter/cluster/mesh/discovery.rb +0 -44
  769. data/packages/igniter-cluster/lib/igniter/cluster/mesh/errors.rb +0 -36
  770. data/packages/igniter-cluster/lib/igniter/cluster/mesh/gossip.rb +0 -62
  771. data/packages/igniter-cluster/lib/igniter/cluster/mesh/mesh_ql.rb +0 -470
  772. data/packages/igniter-cluster/lib/igniter/cluster/mesh/node_observation.rb +0 -281
  773. data/packages/igniter-cluster/lib/igniter/cluster/mesh/observation_query.rb +0 -284
  774. data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer.rb +0 -51
  775. data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_capacity_report.rb +0 -42
  776. data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_identity_envelope.rb +0 -158
  777. data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_metadata.rb +0 -122
  778. data/packages/igniter-cluster/lib/igniter/cluster/mesh/peer_registry.rb +0 -81
  779. data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_decision.rb +0 -64
  780. data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_planner.rb +0 -154
  781. data/packages/igniter-cluster/lib/igniter/cluster/mesh/placement_policy.rb +0 -103
  782. data/packages/igniter-cluster/lib/igniter/cluster/mesh/poller.rb +0 -92
  783. data/packages/igniter-cluster/lib/igniter/cluster/mesh/rebalance_plan.rb +0 -66
  784. data/packages/igniter-cluster/lib/igniter/cluster/mesh/rebalance_planner.rb +0 -153
  785. data/packages/igniter-cluster/lib/igniter/cluster/mesh/repair_loop.rb +0 -169
  786. data/packages/igniter-cluster/lib/igniter/cluster/mesh/router.rb +0 -306
  787. data/packages/igniter-cluster/lib/igniter/cluster/mesh/workload_signal.rb +0 -46
  788. data/packages/igniter-cluster/lib/igniter/cluster/mesh/workload_tracker.rb +0 -215
  789. data/packages/igniter-cluster/lib/igniter/cluster/mesh.rb +0 -452
  790. data/packages/igniter-cluster/lib/igniter/cluster/ownership/claim.rb +0 -69
  791. data/packages/igniter-cluster/lib/igniter/cluster/ownership/errors.rb +0 -19
  792. data/packages/igniter-cluster/lib/igniter/cluster/ownership/owner_client.rb +0 -76
  793. data/packages/igniter-cluster/lib/igniter/cluster/ownership/registry.rb +0 -98
  794. data/packages/igniter-cluster/lib/igniter/cluster/ownership/resolver.rb +0 -62
  795. data/packages/igniter-cluster/lib/igniter/cluster/ownership.rb +0 -81
  796. data/packages/igniter-cluster/lib/igniter/cluster/projection_store.rb +0 -62
  797. data/packages/igniter-cluster/lib/igniter/cluster/rag/chunk.rb +0 -49
  798. data/packages/igniter-cluster/lib/igniter/cluster/rag/fanout_retriever.rb +0 -93
  799. data/packages/igniter-cluster/lib/igniter/cluster/rag/knowledge_shard.rb +0 -140
  800. data/packages/igniter-cluster/lib/igniter/cluster/rag/net_http_adapter.rb +0 -85
  801. data/packages/igniter-cluster/lib/igniter/cluster/rag/ranker.rb +0 -46
  802. data/packages/igniter-cluster/lib/igniter/cluster/rag/retrieval_query.rb +0 -30
  803. data/packages/igniter-cluster/lib/igniter/cluster/rag/retrieval_result.rb +0 -77
  804. data/packages/igniter-cluster/lib/igniter/cluster/rag.rb +0 -38
  805. data/packages/igniter-cluster/lib/igniter/cluster/remote_adapter.rb +0 -101
  806. data/packages/igniter-cluster/lib/igniter/cluster/replication/bootstrapper.rb +0 -63
  807. data/packages/igniter-cluster/lib/igniter/cluster/replication/bootstrappers/gem.rb +0 -39
  808. data/packages/igniter-cluster/lib/igniter/cluster/replication/bootstrappers/git.rb +0 -46
  809. data/packages/igniter-cluster/lib/igniter/cluster/replication/bootstrappers/tarball.rb +0 -62
  810. data/packages/igniter-cluster/lib/igniter/cluster/replication/capability_query.rb +0 -675
  811. data/packages/igniter-cluster/lib/igniter/cluster/replication/expansion_plan.rb +0 -40
  812. data/packages/igniter-cluster/lib/igniter/cluster/replication/expansion_planner.rb +0 -154
  813. data/packages/igniter-cluster/lib/igniter/cluster/replication/manifest.rb +0 -47
  814. data/packages/igniter-cluster/lib/igniter/cluster/replication/network_topology.rb +0 -150
  815. data/packages/igniter-cluster/lib/igniter/cluster/replication/node_profile.rb +0 -134
  816. data/packages/igniter-cluster/lib/igniter/cluster/replication/reflective_replication_agent.rb +0 -259
  817. data/packages/igniter-cluster/lib/igniter/cluster/replication/replication_agent.rb +0 -89
  818. data/packages/igniter-cluster/lib/igniter/cluster/replication/ssh_session.rb +0 -79
  819. data/packages/igniter-cluster/lib/igniter/cluster/replication.rb +0 -38
  820. data/packages/igniter-cluster/lib/igniter/cluster/routed_agent_adapter.rb +0 -79
  821. data/packages/igniter-cluster/lib/igniter/cluster/routing_plan_executor.rb +0 -427
  822. data/packages/igniter-cluster/lib/igniter/cluster/routing_plan_result.rb +0 -38
  823. data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_plan.rb +0 -34
  824. data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_planner.rb +0 -76
  825. data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_result.rb +0 -34
  826. data/packages/igniter-cluster/lib/igniter/cluster/trust/admission_runner.rb +0 -125
  827. data/packages/igniter-cluster/lib/igniter/cluster/trust/trust_assessment.rb +0 -37
  828. data/packages/igniter-cluster/lib/igniter/cluster/trust/trust_store.rb +0 -58
  829. data/packages/igniter-cluster/lib/igniter/cluster/trust/verifier.rb +0 -80
  830. data/packages/igniter-cluster/lib/igniter/cluster/trust.rb +0 -9
  831. data/packages/igniter-core/README.md +0 -21
  832. data/packages/igniter-core/lib/igniter/core/capabilities.rb +0 -70
  833. data/packages/igniter-core/lib/igniter/core/compiler/compiled_graph.rb +0 -218
  834. data/packages/igniter-core/lib/igniter/core/compiler/graph_compiler.rb +0 -70
  835. data/packages/igniter-core/lib/igniter/core/compiler/type_resolver.rb +0 -54
  836. data/packages/igniter-core/lib/igniter/core/compiler/validation_context.rb +0 -61
  837. data/packages/igniter-core/lib/igniter/core/compiler/validation_pipeline.rb +0 -33
  838. data/packages/igniter-core/lib/igniter/core/compiler/validator.rb +0 -19
  839. data/packages/igniter-core/lib/igniter/core/compiler/validators/agent_validator.rb +0 -142
  840. data/packages/igniter-core/lib/igniter/core/compiler/validators/await_validator.rb +0 -53
  841. data/packages/igniter-core/lib/igniter/core/compiler/validators/callable_validator.rb +0 -125
  842. data/packages/igniter-core/lib/igniter/core/compiler/validators/dependencies_validator.rb +0 -280
  843. data/packages/igniter-core/lib/igniter/core/compiler/validators/outputs_validator.rb +0 -66
  844. data/packages/igniter-core/lib/igniter/core/compiler/validators/remote_validator.rb +0 -60
  845. data/packages/igniter-core/lib/igniter/core/compiler/validators/type_compatibility_validator.rb +0 -84
  846. data/packages/igniter-core/lib/igniter/core/compiler/validators/uniqueness_validator.rb +0 -60
  847. data/packages/igniter-core/lib/igniter/core/compiler.rb +0 -21
  848. data/packages/igniter-core/lib/igniter/core/content_addressing.rb +0 -133
  849. data/packages/igniter-core/lib/igniter/core/contract.rb +0 -398
  850. data/packages/igniter-core/lib/igniter/core/dataflow/aggregate_operators.rb +0 -147
  851. data/packages/igniter-core/lib/igniter/core/dataflow/aggregate_state.rb +0 -77
  852. data/packages/igniter-core/lib/igniter/core/dataflow/diff.rb +0 -37
  853. data/packages/igniter-core/lib/igniter/core/dataflow/diff_state.rb +0 -81
  854. data/packages/igniter-core/lib/igniter/core/dataflow/incremental_collection_result.rb +0 -39
  855. data/packages/igniter-core/lib/igniter/core/dataflow/window_filter.rb +0 -48
  856. data/packages/igniter-core/lib/igniter/core/dataflow.rb +0 -65
  857. data/packages/igniter-core/lib/igniter/core/diagnostics/agent_contributor.rb +0 -241
  858. data/packages/igniter-core/lib/igniter/core/diagnostics/auditing/report/console_formatter.rb +0 -80
  859. data/packages/igniter-core/lib/igniter/core/diagnostics/auditing/report/markdown_formatter.rb +0 -22
  860. data/packages/igniter-core/lib/igniter/core/diagnostics/capability_contributor.rb +0 -162
  861. data/packages/igniter-core/lib/igniter/core/diagnostics/introspection/formatters/mermaid_formatter.rb +0 -58
  862. data/packages/igniter-core/lib/igniter/core/diagnostics/introspection/formatters/text_tree_formatter.rb +0 -44
  863. data/packages/igniter-core/lib/igniter/core/diagnostics/orchestration_contributor.rb +0 -75
  864. data/packages/igniter-core/lib/igniter/core/diagnostics/report.rb +0 -424
  865. data/packages/igniter-core/lib/igniter/core/diagnostics.rb +0 -58
  866. data/packages/igniter-core/lib/igniter/core/differential/divergence.rb +0 -29
  867. data/packages/igniter-core/lib/igniter/core/differential/formatter.rb +0 -96
  868. data/packages/igniter-core/lib/igniter/core/differential/report.rb +0 -86
  869. data/packages/igniter-core/lib/igniter/core/differential/runner.rb +0 -130
  870. data/packages/igniter-core/lib/igniter/core/differential.rb +0 -51
  871. data/packages/igniter-core/lib/igniter/core/dsl/contract_builder.rb +0 -652
  872. data/packages/igniter-core/lib/igniter/core/dsl/schema_builder.rb +0 -73
  873. data/packages/igniter-core/lib/igniter/core/dsl.rb +0 -9
  874. data/packages/igniter-core/lib/igniter/core/dto/record.rb +0 -189
  875. data/packages/igniter-core/lib/igniter/core/dto.rb +0 -8
  876. data/packages/igniter-core/lib/igniter/core/effect.rb +0 -95
  877. data/packages/igniter-core/lib/igniter/core/effect_registry.rb +0 -78
  878. data/packages/igniter-core/lib/igniter/core/errors.rb +0 -102
  879. data/packages/igniter-core/lib/igniter/core/events/bus.rb +0 -44
  880. data/packages/igniter-core/lib/igniter/core/events/event.rb +0 -82
  881. data/packages/igniter-core/lib/igniter/core/events.rb +0 -9
  882. data/packages/igniter-core/lib/igniter/core/execution_report/builder.rb +0 -54
  883. data/packages/igniter-core/lib/igniter/core/execution_report/formatter.rb +0 -50
  884. data/packages/igniter-core/lib/igniter/core/execution_report/node_entry.rb +0 -24
  885. data/packages/igniter-core/lib/igniter/core/execution_report/report.rb +0 -65
  886. data/packages/igniter-core/lib/igniter/core/execution_report.rb +0 -32
  887. data/packages/igniter-core/lib/igniter/core/executor.rb +0 -134
  888. data/packages/igniter-core/lib/igniter/core/executor_registry.rb +0 -44
  889. data/packages/igniter-core/lib/igniter/core/extensions/auditing/timeline.rb +0 -103
  890. data/packages/igniter-core/lib/igniter/core/extensions/auditing.rb +0 -10
  891. data/packages/igniter-core/lib/igniter/core/extensions/introspection/graph_formatter.rb +0 -134
  892. data/packages/igniter-core/lib/igniter/core/extensions/introspection/plan_formatter.rb +0 -85
  893. data/packages/igniter-core/lib/igniter/core/extensions/introspection/runtime_formatter.rb +0 -143
  894. data/packages/igniter-core/lib/igniter/core/extensions/introspection.rb +0 -12
  895. data/packages/igniter-core/lib/igniter/core/extensions/invariants.rb +0 -70
  896. data/packages/igniter-core/lib/igniter/core/extensions/reactive/engine.rb +0 -83
  897. data/packages/igniter-core/lib/igniter/core/extensions/reactive/matcher.rb +0 -21
  898. data/packages/igniter-core/lib/igniter/core/extensions/reactive/reaction.rb +0 -18
  899. data/packages/igniter-core/lib/igniter/core/extensions/reactive.rb +0 -12
  900. data/packages/igniter-core/lib/igniter/core/extensions.rb +0 -10
  901. data/packages/igniter-core/lib/igniter/core/fingerprint.rb +0 -43
  902. data/packages/igniter-core/lib/igniter/core/incremental/formatter.rb +0 -81
  903. data/packages/igniter-core/lib/igniter/core/incremental/result.rb +0 -69
  904. data/packages/igniter-core/lib/igniter/core/incremental/tracker.rb +0 -108
  905. data/packages/igniter-core/lib/igniter/core/incremental.rb +0 -50
  906. data/packages/igniter-core/lib/igniter/core/invariant.rb +0 -50
  907. data/packages/igniter-core/lib/igniter/core/memory/agent_memory.rb +0 -104
  908. data/packages/igniter-core/lib/igniter/core/memory/episode.rb +0 -29
  909. data/packages/igniter-core/lib/igniter/core/memory/fact.rb +0 -27
  910. data/packages/igniter-core/lib/igniter/core/memory/memorable.rb +0 -90
  911. data/packages/igniter-core/lib/igniter/core/memory/reflection_cycle.rb +0 -96
  912. data/packages/igniter-core/lib/igniter/core/memory/reflection_record.rb +0 -28
  913. data/packages/igniter-core/lib/igniter/core/memory/store.rb +0 -115
  914. data/packages/igniter-core/lib/igniter/core/memory/stores/in_memory.rb +0 -136
  915. data/packages/igniter-core/lib/igniter/core/memory/stores/sqlite.rb +0 -286
  916. data/packages/igniter-core/lib/igniter/core/memory.rb +0 -80
  917. data/packages/igniter-core/lib/igniter/core/metrics/collector.rb +0 -131
  918. data/packages/igniter-core/lib/igniter/core/metrics/prometheus_exporter.rb +0 -104
  919. data/packages/igniter-core/lib/igniter/core/metrics/snapshot.rb +0 -8
  920. data/packages/igniter-core/lib/igniter/core/metrics.rb +0 -37
  921. data/packages/igniter-core/lib/igniter/core/model/agent_interaction_contract.rb +0 -172
  922. data/packages/igniter-core/lib/igniter/core/model/agent_node.rb +0 -86
  923. data/packages/igniter-core/lib/igniter/core/model/aggregate_node.rb +0 -34
  924. data/packages/igniter-core/lib/igniter/core/model/await_node.rb +0 -21
  925. data/packages/igniter-core/lib/igniter/core/model/branch_node.rb +0 -82
  926. data/packages/igniter-core/lib/igniter/core/model/collection_node.rb +0 -32
  927. data/packages/igniter-core/lib/igniter/core/model/composition_node.rb +0 -22
  928. data/packages/igniter-core/lib/igniter/core/model/compute_node.rb +0 -90
  929. data/packages/igniter-core/lib/igniter/core/model/effect_node.rb +0 -37
  930. data/packages/igniter-core/lib/igniter/core/model/graph.rb +0 -15
  931. data/packages/igniter-core/lib/igniter/core/model/input_node.rb +0 -27
  932. data/packages/igniter-core/lib/igniter/core/model/node.rb +0 -22
  933. data/packages/igniter-core/lib/igniter/core/model/output_node.rb +0 -41
  934. data/packages/igniter-core/lib/igniter/core/model/remote_node.rb +0 -91
  935. data/packages/igniter-core/lib/igniter/core/model.rb +0 -20
  936. data/packages/igniter-core/lib/igniter/core/node_cache.rb +0 -231
  937. data/packages/igniter-core/lib/igniter/core/property_testing/formatter.rb +0 -66
  938. data/packages/igniter-core/lib/igniter/core/property_testing/generators.rb +0 -115
  939. data/packages/igniter-core/lib/igniter/core/property_testing/result.rb +0 -45
  940. data/packages/igniter-core/lib/igniter/core/property_testing/run.rb +0 -43
  941. data/packages/igniter-core/lib/igniter/core/property_testing/runner.rb +0 -47
  942. data/packages/igniter-core/lib/igniter/core/property_testing.rb +0 -64
  943. data/packages/igniter-core/lib/igniter/core/provenance/builder.rb +0 -126
  944. data/packages/igniter-core/lib/igniter/core/provenance/lineage.rb +0 -82
  945. data/packages/igniter-core/lib/igniter/core/provenance/node_trace.rb +0 -65
  946. data/packages/igniter-core/lib/igniter/core/provenance/text_formatter.rb +0 -70
  947. data/packages/igniter-core/lib/igniter/core/provenance.rb +0 -29
  948. data/packages/igniter-core/lib/igniter/core/runtime/agent_adapter.rb +0 -41
  949. data/packages/igniter-core/lib/igniter/core/runtime/agent_result_contract.rb +0 -91
  950. data/packages/igniter-core/lib/igniter/core/runtime/agent_route.rb +0 -60
  951. data/packages/igniter-core/lib/igniter/core/runtime/agent_route_resolver.rb +0 -26
  952. data/packages/igniter-core/lib/igniter/core/runtime/agent_session.rb +0 -922
  953. data/packages/igniter-core/lib/igniter/core/runtime/agent_session_query.rb +0 -379
  954. data/packages/igniter-core/lib/igniter/core/runtime/agent_transport.rb +0 -30
  955. data/packages/igniter-core/lib/igniter/core/runtime/cache.rb +0 -129
  956. data/packages/igniter-core/lib/igniter/core/runtime/collection_result.rb +0 -111
  957. data/packages/igniter-core/lib/igniter/core/runtime/deferred_result.rb +0 -66
  958. data/packages/igniter-core/lib/igniter/core/runtime/execution.rb +0 -913
  959. data/packages/igniter-core/lib/igniter/core/runtime/input_validator.rb +0 -129
  960. data/packages/igniter-core/lib/igniter/core/runtime/invalidator.rb +0 -52
  961. data/packages/igniter-core/lib/igniter/core/runtime/job_worker.rb +0 -39
  962. data/packages/igniter-core/lib/igniter/core/runtime/node_state.rb +0 -58
  963. data/packages/igniter-core/lib/igniter/core/runtime/orchestration_overview.rb +0 -213
  964. data/packages/igniter-core/lib/igniter/core/runtime/orchestration_runtime_state.rb +0 -176
  965. data/packages/igniter-core/lib/igniter/core/runtime/orchestration_transition_query.rb +0 -208
  966. data/packages/igniter-core/lib/igniter/core/runtime/planner.rb +0 -301
  967. data/packages/igniter-core/lib/igniter/core/runtime/proxy_agent_adapter.rb +0 -124
  968. data/packages/igniter-core/lib/igniter/core/runtime/remote_adapter.rb +0 -26
  969. data/packages/igniter-core/lib/igniter/core/runtime/resolver.rb +0 -951
  970. data/packages/igniter-core/lib/igniter/core/runtime/result.rb +0 -119
  971. data/packages/igniter-core/lib/igniter/core/runtime/runner_factory.rb +0 -20
  972. data/packages/igniter-core/lib/igniter/core/runtime/runners/inline_runner.rb +0 -21
  973. data/packages/igniter-core/lib/igniter/core/runtime/runners/store_runner.rb +0 -29
  974. data/packages/igniter-core/lib/igniter/core/runtime/runners/thread_pool_runner.rb +0 -37
  975. data/packages/igniter-core/lib/igniter/core/runtime/stores/active_record_store.rb +0 -53
  976. data/packages/igniter-core/lib/igniter/core/runtime/stores/file_store.rb +0 -91
  977. data/packages/igniter-core/lib/igniter/core/runtime/stores/memory_store.rb +0 -93
  978. data/packages/igniter-core/lib/igniter/core/runtime/stores/redis_store.rb +0 -93
  979. data/packages/igniter-core/lib/igniter/core/runtime/stores/sqlite_store.rb +0 -155
  980. data/packages/igniter-core/lib/igniter/core/runtime/stream_result.rb +0 -171
  981. data/packages/igniter-core/lib/igniter/core/runtime.rb +0 -41
  982. data/packages/igniter-core/lib/igniter/core/saga/compensation.rb +0 -31
  983. data/packages/igniter-core/lib/igniter/core/saga/compensation_record.rb +0 -20
  984. data/packages/igniter-core/lib/igniter/core/saga/executor.rb +0 -85
  985. data/packages/igniter-core/lib/igniter/core/saga/formatter.rb +0 -49
  986. data/packages/igniter-core/lib/igniter/core/saga/result.rb +0 -47
  987. data/packages/igniter-core/lib/igniter/core/saga.rb +0 -56
  988. data/packages/igniter-core/lib/igniter/core/stream_loop.rb +0 -80
  989. data/packages/igniter-core/lib/igniter/core/temporal.rb +0 -84
  990. data/packages/igniter-core/lib/igniter/core/tool/discoverable.rb +0 -151
  991. data/packages/igniter-core/lib/igniter/core/tool.rb +0 -56
  992. data/packages/igniter-core/lib/igniter/core/type_system.rb +0 -44
  993. data/packages/igniter-core/lib/igniter/core/version.rb +0 -5
  994. data/packages/igniter-core/lib/igniter/core.rb +0 -23
  995. data/packages/igniter-core/lib/igniter-core.rb +0 -3
  996. data/packages/igniter-extensions/lib/igniter/extensions/auditing.rb +0 -3
  997. data/packages/igniter-extensions/lib/igniter/extensions/capabilities.rb +0 -39
  998. data/packages/igniter-extensions/lib/igniter/extensions/content_addressing.rb +0 -5
  999. data/packages/igniter-extensions/lib/igniter/extensions/dataflow.rb +0 -117
  1000. data/packages/igniter-extensions/lib/igniter/extensions/differential.rb +0 -114
  1001. data/packages/igniter-extensions/lib/igniter/extensions/execution_report.rb +0 -27
  1002. data/packages/igniter-extensions/lib/igniter/extensions/incremental.rb +0 -50
  1003. data/packages/igniter-extensions/lib/igniter/extensions/introspection.rb +0 -3
  1004. data/packages/igniter-extensions/lib/igniter/extensions/invariants.rb +0 -3
  1005. data/packages/igniter-extensions/lib/igniter/extensions/provenance.rb +0 -45
  1006. data/packages/igniter-extensions/lib/igniter/extensions/reactive.rb +0 -3
  1007. data/packages/igniter-extensions/lib/igniter/extensions/saga.rb +0 -74
  1008. data/packages/igniter-frontend/README.md +0 -224
  1009. data/packages/igniter-frontend/lib/igniter/frontend/app.rb +0 -90
  1010. data/packages/igniter-frontend/lib/igniter/frontend/app_access.rb +0 -36
  1011. data/packages/igniter-frontend/lib/igniter/frontend/arbre/component.rb +0 -120
  1012. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/action_group.rb +0 -53
  1013. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/badge.rb +0 -91
  1014. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/boolean.rb +0 -53
  1015. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/breadcrumbs.rb +0 -71
  1016. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/card.rb +0 -114
  1017. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/conversation_panel.rb +0 -61
  1018. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/datetime.rb +0 -42
  1019. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/display_value_support.rb +0 -38
  1020. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/empty_state.rb +0 -39
  1021. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/event_list.rb +0 -44
  1022. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/filters.rb +0 -183
  1023. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/indicator.rb +0 -59
  1024. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/json_panel.rb +0 -36
  1025. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/key_value_list.rb +0 -40
  1026. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/loading_state.rb +0 -43
  1027. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/metric_grid.rb +0 -37
  1028. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/number.rb +0 -53
  1029. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/page_header.rb +0 -53
  1030. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/pagination.rb +0 -143
  1031. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/panel.rb +0 -67
  1032. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/percentage.rb +0 -79
  1033. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/resource_list.rb +0 -38
  1034. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/scenario_card.rb +0 -48
  1035. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/shell_columns.rb +0 -67
  1036. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/sidebar_shell.rb +0 -106
  1037. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/table_with.rb +0 -203
  1038. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/tabs.rb +0 -147
  1039. data/packages/igniter-frontend/lib/igniter/frontend/arbre/components/viz.rb +0 -185
  1040. data/packages/igniter-frontend/lib/igniter/frontend/arbre/page.rb +0 -74
  1041. data/packages/igniter-frontend/lib/igniter/frontend/arbre/raw_text_node.rb +0 -40
  1042. data/packages/igniter-frontend/lib/igniter/frontend/arbre/template_page.rb +0 -243
  1043. data/packages/igniter-frontend/lib/igniter/frontend/arbre.rb +0 -48
  1044. data/packages/igniter-frontend/lib/igniter/frontend/arbre_page.rb +0 -7
  1045. data/packages/igniter-frontend/lib/igniter/frontend/assets.rb +0 -101
  1046. data/packages/igniter-frontend/lib/igniter/frontend/builder.rb +0 -124
  1047. data/packages/igniter-frontend/lib/igniter/frontend/component.rb +0 -24
  1048. data/packages/igniter-frontend/lib/igniter/frontend/components.rb +0 -7
  1049. data/packages/igniter-frontend/lib/igniter/frontend/context.rb +0 -53
  1050. data/packages/igniter-frontend/lib/igniter/frontend/form_builder.rb +0 -63
  1051. data/packages/igniter-frontend/lib/igniter/frontend/handler.rb +0 -92
  1052. data/packages/igniter-frontend/lib/igniter/frontend/javascript.rb +0 -353
  1053. data/packages/igniter-frontend/lib/igniter/frontend/page.rb +0 -24
  1054. data/packages/igniter-frontend/lib/igniter/frontend/request.rb +0 -61
  1055. data/packages/igniter-frontend/lib/igniter/frontend/response.rb +0 -67
  1056. data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime/adapters.rb +0 -226
  1057. data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime/presets.rb +0 -147
  1058. data/packages/igniter-frontend/lib/igniter/frontend/tailwind/realtime.rb +0 -259
  1059. data/packages/igniter-frontend/lib/igniter/frontend/tailwind/surfaces.rb +0 -1074
  1060. data/packages/igniter-frontend/lib/igniter/frontend/tailwind/ui.rb +0 -1438
  1061. data/packages/igniter-frontend/lib/igniter/frontend/tailwind.rb +0 -180
  1062. data/packages/igniter-frontend/lib/igniter/frontend/version.rb +0 -9
  1063. data/packages/igniter-frontend/lib/igniter/frontend.rb +0 -35
  1064. data/packages/igniter-frontend/lib/igniter-frontend.rb +0 -3
  1065. data/packages/igniter-rails/README.md +0 -96
  1066. data/packages/igniter-rails/lib/igniter/plugins/rails/cable_adapter.rb +0 -49
  1067. data/packages/igniter-rails/lib/igniter/plugins/rails/contract_job.rb +0 -76
  1068. data/packages/igniter-rails/lib/igniter/plugins/rails/generators/contract/contract_generator.rb +0 -22
  1069. data/packages/igniter-rails/lib/igniter/plugins/rails/generators/contract/templates/contract.rb.tt +0 -22
  1070. data/packages/igniter-rails/lib/igniter/plugins/rails/generators/install/install_generator.rb +0 -33
  1071. data/packages/igniter-rails/lib/igniter/plugins/rails/generators/install/templates/igniter.rb.tt +0 -16
  1072. data/packages/igniter-rails/lib/igniter/plugins/rails/railtie.rb +0 -25
  1073. data/packages/igniter-rails/lib/igniter/plugins/rails/webhook_concern.rb +0 -49
  1074. data/packages/igniter-rails/lib/igniter/plugins/rails.rb +0 -12
  1075. data/packages/igniter-rails/lib/igniter-rails.rb +0 -3
  1076. data/packages/igniter-schema-rendering/README.md +0 -27
  1077. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/page.rb +0 -35
  1078. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/patcher.rb +0 -47
  1079. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/renderer.rb +0 -268
  1080. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/schema.rb +0 -172
  1081. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/store.rb +0 -53
  1082. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_normalizer.rb +0 -117
  1083. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_processor.rb +0 -91
  1084. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/submission_validator.rb +0 -62
  1085. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering/version.rb +0 -9
  1086. data/packages/igniter-schema-rendering/lib/igniter/schema_rendering.rb +0 -20
  1087. data/packages/igniter-schema-rendering/lib/igniter-schema-rendering.rb +0 -3
  1088. data/packages/igniter-sdk/README.md +0 -25
  1089. data/packages/igniter-sdk/lib/igniter/sdk/channels/base.rb +0 -84
  1090. data/packages/igniter-sdk/lib/igniter/sdk/channels/delivery_result.rb +0 -61
  1091. data/packages/igniter-sdk/lib/igniter/sdk/channels/message.rb +0 -101
  1092. data/packages/igniter-sdk/lib/igniter/sdk/channels/telegram.rb +0 -161
  1093. data/packages/igniter-sdk/lib/igniter/sdk/channels/webhook.rb +0 -213
  1094. data/packages/igniter-sdk/lib/igniter/sdk/channels.rb +0 -17
  1095. data/packages/igniter-sdk/lib/igniter/sdk/data/store.rb +0 -31
  1096. data/packages/igniter-sdk/lib/igniter/sdk/data/stores/file.rb +0 -113
  1097. data/packages/igniter-sdk/lib/igniter/sdk/data/stores/in_memory.rb +0 -63
  1098. data/packages/igniter-sdk/lib/igniter/sdk/data/stores/sqlite.rb +0 -144
  1099. data/packages/igniter-sdk/lib/igniter/sdk/data.rb +0 -34
  1100. data/packages/igniter-sdk/lib/igniter/sdk/tools/agent_bootstrap_tool.rb +0 -151
  1101. data/packages/igniter-sdk/lib/igniter/sdk/tools/local_workflow_selector_tool.rb +0 -269
  1102. data/packages/igniter-sdk/lib/igniter/sdk/tools/system_discovery_tool.rb +0 -198
  1103. data/packages/igniter-sdk/lib/igniter/sdk/tools.rb +0 -9
  1104. data/packages/igniter-sdk/lib/igniter/sdk.rb +0 -86
  1105. data/packages/igniter-sdk/lib/igniter-sdk.rb +0 -3
  1106. data/packages/igniter-server/README.md +0 -9
  1107. data/packages/igniter-server/lib/igniter/server/agent_session_store.rb +0 -98
  1108. data/packages/igniter-server/lib/igniter/server/agent_transport.rb +0 -95
  1109. data/packages/igniter-server/lib/igniter/server/app_host.rb +0 -3
  1110. data/packages/igniter-server/lib/igniter/server/client.rb +0 -256
  1111. data/packages/igniter-server/lib/igniter/server/config.rb +0 -70
  1112. data/packages/igniter-server/lib/igniter/server/handlers/agent_message_handler.rb +0 -107
  1113. data/packages/igniter-server/lib/igniter/server/handlers/agent_session_handler.rb +0 -125
  1114. data/packages/igniter-server/lib/igniter/server/handlers/base.rb +0 -105
  1115. data/packages/igniter-server/lib/igniter/server/handlers/contracts_handler.rb +0 -15
  1116. data/packages/igniter-server/lib/igniter/server/handlers/event_handler.rb +0 -32
  1117. data/packages/igniter-server/lib/igniter/server/handlers/execute_handler.rb +0 -43
  1118. data/packages/igniter-server/lib/igniter/server/handlers/health_handler.rb +0 -32
  1119. data/packages/igniter-server/lib/igniter/server/handlers/liveness_handler.rb +0 -20
  1120. data/packages/igniter-server/lib/igniter/server/handlers/manifest_handler.rb +0 -77
  1121. data/packages/igniter-server/lib/igniter/server/handlers/metrics_handler.rb +0 -51
  1122. data/packages/igniter-server/lib/igniter/server/handlers/peers_handler.rb +0 -136
  1123. data/packages/igniter-server/lib/igniter/server/handlers/readiness_handler.rb +0 -47
  1124. data/packages/igniter-server/lib/igniter/server/handlers/status_handler.rb +0 -27
  1125. data/packages/igniter-server/lib/igniter/server/http_server.rb +0 -222
  1126. data/packages/igniter-server/lib/igniter/server/rack_app.rb +0 -60
  1127. data/packages/igniter-server/lib/igniter/server/registry.rb +0 -56
  1128. data/packages/igniter-server/lib/igniter/server/remote_adapter.rb +0 -27
  1129. data/packages/igniter-server/lib/igniter/server/router.rb +0 -291
  1130. data/packages/igniter-server/lib/igniter/server/server_logger.rb +0 -54
  1131. data/packages/igniter-server/lib/igniter/server.rb +0 -130
  1132. data/packages/igniter-server/lib/igniter-server.rb +0 -3
@@ -1,1367 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "cgi"
4
- require "json"
5
- require "igniter/cluster"
6
-
7
- module Igniter
8
- class App
9
- module Generators
10
- class Cluster
11
- NODE_PROFILES = [
12
- {
13
- profile: "seed",
14
- role: "seed",
15
- port: 4667,
16
- declared_capabilities: %i[mesh_seed routing status_api],
17
- mocked_capabilities: [:notifications],
18
- tags: %i[local seed]
19
- },
20
- {
21
- profile: "edge",
22
- role: "edge",
23
- port: 4668,
24
- declared_capabilities: %i[audio_ingest status_api],
25
- mocked_capabilities: %i[piper_tts whisper_asr],
26
- tags: %i[audio edge local],
27
- seeds: ["http://127.0.0.1:4667"]
28
- },
29
- {
30
- profile: "analyst",
31
- role: "analyst",
32
- port: 4669,
33
- declared_capabilities: %i[analysis status_api],
34
- mocked_capabilities: %i[local_llm rag],
35
- tags: %i[analyst local reasoning],
36
- seeds: ["http://127.0.0.1:4667"]
37
- }
38
- ].freeze
39
-
40
- def initialize(name, minimal: false)
41
- @name = name.to_s
42
- @minimal = minimal
43
- @base = Igniter::App::Generator.new(name, minimal: minimal)
44
- @identities = build_identities
45
- end
46
-
47
- def generate
48
- @base.generate
49
- expand_stack_shape
50
- expand_main_surface
51
- add_dashboard_app
52
- write "README.md", cluster_readme
53
- end
54
-
55
- private
56
-
57
- attr_reader :base
58
- attr_reader :identities
59
-
60
- def build_identities
61
- NODE_PROFILES.each_with_object({}) do |profile, memo|
62
- node_name = generated_node_name(profile.fetch(:profile))
63
- memo[node_name] = Igniter::Cluster::Identity::NodeIdentity.generate(node_id: node_name)
64
- end
65
- end
66
-
67
- def expand_stack_shape
68
- create_dir "apps/dashboard/spec"
69
- create_dir "apps/main/web/handlers"
70
- create_dir "apps/main/support"
71
- create_dir "apps/dashboard/web/handlers"
72
- create_dir "apps/dashboard/web/views"
73
- create_dir "lib/#{namespace_path}/shared"
74
- write "stack.rb", stack_rb
75
- write "stack.yml", stack_yml
76
- write "spec/stack_spec.rb", stack_spec
77
- write "lib/#{namespace_path}/shared/node_identity_catalog.rb", node_identity_catalog_rb
78
- write "lib/#{namespace_path}/shared/capability_profile.rb", capability_profile_rb
79
- write "lib/#{namespace_path}/shared/stack_overview.rb", stack_overview_rb
80
- write "lib/#{namespace_path}/shared/routing_demo.rb", routing_demo_rb
81
- end
82
-
83
- def expand_main_surface
84
- write "apps/main/app.rb", main_app_rb
85
- write "apps/main/spec/main_app_spec.rb", main_app_spec
86
- write "apps/main/web/handlers/status_handler.rb", main_status_handler_rb
87
- write "apps/main/support/cluster_ops_api.rb", main_cluster_ops_api_rb
88
- end
89
-
90
- def add_dashboard_app
91
- write "apps/dashboard/app.rb", dashboard_app_rb
92
- write "apps/dashboard/app.yml", dashboard_app_yml
93
- write "apps/dashboard/spec/spec_helper.rb", dashboard_spec_helper
94
- write "apps/dashboard/spec/dashboard_app_spec.rb", dashboard_app_spec
95
- write "apps/dashboard/web/handlers/home_handler.rb", dashboard_home_handler_rb
96
- write "apps/dashboard/web/handlers/overview_handler.rb", dashboard_overview_handler_rb
97
- write "apps/dashboard/web/handlers/self_heal_demo_handler.rb", dashboard_self_heal_demo_handler_rb
98
- write "apps/dashboard/web/views/home_page.rb", dashboard_home_page_rb
99
- end
100
-
101
- def path(rel)
102
- File.join(@name, rel)
103
- end
104
-
105
- def write(rel, content)
106
- File.write(path(rel), content)
107
- end
108
-
109
- def create_dir(rel)
110
- FileUtils.mkdir_p(path(rel))
111
- end
112
-
113
- def project_name
114
- File.basename(@name)
115
- end
116
-
117
- def module_name
118
- project_name.split(/[^a-zA-Z0-9]+/).reject(&:empty?).map(&:capitalize).join
119
- end
120
-
121
- def namespace_path
122
- project_name.strip.downcase.gsub(/[^a-z0-9]+/, "_").gsub(/\A_+|_+\z/, "")
123
- end
124
-
125
- def env_prefix
126
- namespace_path.upcase
127
- end
128
-
129
- def stack_class_name
130
- "#{module_name}::Stack"
131
- end
132
-
133
- def generated_node_name(profile)
134
- "#{namespace_path}-#{profile}"
135
- end
136
-
137
- def stack_rb
138
- <<~RUBY
139
- # frozen_string_literal: true
140
-
141
- require "igniter/stack"
142
- require_relative "apps/main/app"
143
- require_relative "apps/dashboard/app"
144
-
145
- module #{module_name}
146
- class Stack < Igniter::Stack
147
- root_dir __dir__
148
- shared_lib_path "lib"
149
-
150
- app :main, path: "apps/main", klass: #{module_name}::MainApp, default: true
151
- app :dashboard, path: "apps/dashboard", klass: #{module_name}::DashboardApp, access_to: [:cluster_ops_api]
152
-
153
- mount :dashboard, at: "/dashboard"
154
- end
155
- end
156
-
157
- if $PROGRAM_NAME == __FILE__
158
- #{stack_class_name}.start_cli(ARGV)
159
- end
160
- RUBY
161
- end
162
-
163
- def stack_yml
164
- extra_env = {
165
- "seed" => {
166
- "#{env_prefix}_AUTO_ANNOUNCE" => "\"true\"",
167
- "#{env_prefix}_START_DISCOVERY" => "\"false\"",
168
- "#{env_prefix}_AUTO_SELF_HEAL" => "\"true\""
169
- },
170
- "edge" => {
171
- "#{env_prefix}_SEEDS" => "http://127.0.0.1:4667",
172
- "#{env_prefix}_AUTO_ANNOUNCE" => "\"true\"",
173
- "#{env_prefix}_START_DISCOVERY" => "\"true\"",
174
- "#{env_prefix}_AUTO_SELF_HEAL" => "\"true\""
175
- },
176
- "analyst" => {
177
- "#{env_prefix}_SEEDS" => "http://127.0.0.1:4667",
178
- "#{env_prefix}_AUTO_ANNOUNCE" => "\"true\"",
179
- "#{env_prefix}_START_DISCOVERY" => "\"true\"",
180
- "#{env_prefix}_AUTO_SELF_HEAL" => "\"true\""
181
- }
182
- }
183
-
184
- rendered = NODE_PROFILES.map do |profile|
185
- profile_name = profile.fetch(:profile)
186
- extras = extra_env.fetch(profile_name).map { |key, value| " #{key}: #{value}" }.join("\n")
187
-
188
- <<~YAML.chomp
189
- #{profile_name}:
190
- port: #{profile.fetch(:port)}
191
- public: true
192
- environment:
193
- #{env_prefix}_NODE_NAME: #{generated_node_name(profile_name)}
194
- #{env_prefix}_NODE_URL: http://127.0.0.1:#{profile.fetch(:port)}
195
- #{env_prefix}_LOCAL_CAPABILITIES: #{profile.fetch(:declared_capabilities).join(",")}
196
- #{env_prefix}_MOCK_CAPABILITIES: #{profile.fetch(:mocked_capabilities).join(",")}
197
- #{env_prefix}_NODE_TAGS: #{profile.fetch(:tags).join(",")}
198
- #{extras}
199
- YAML
200
- end.join("\n\n")
201
-
202
- <<~YAML
203
- stack:
204
- name: #{project_name}
205
- root_app: main
206
- default_node: seed
207
- shared_lib_paths:
208
- - lib
209
-
210
- server:
211
- host: 0.0.0.0
212
-
213
- nodes:
214
- #{rendered}
215
-
216
- persistence:
217
- data:
218
- adapter: sqlite
219
- path: var/#{project_name}_data.sqlite3
220
- YAML
221
- end
222
-
223
- def stack_spec
224
- <<~RUBY
225
- # frozen_string_literal: true
226
-
227
- require_relative "spec_helper"
228
-
229
- RSpec.describe #{stack_class_name} do
230
- it "registers a mounted dashboard and local cluster node profiles" do
231
- expect(described_class.root_app).to eq(:main)
232
- expect(described_class.default_node).to eq(:seed)
233
- expect(described_class.app(:main)).to be(#{module_name}::MainApp)
234
- expect(described_class.app(:dashboard)).to be(#{module_name}::DashboardApp)
235
- expect(described_class.mounts).to eq(dashboard: "/dashboard")
236
- expect(described_class.node_names).to eq(%i[seed edge analyst])
237
- end
238
- end
239
- RUBY
240
- end
241
-
242
- def node_identity_catalog_rb
243
- entries = identities.map do |node_name, identity|
244
- <<~RUBY.chomp
245
- #{node_name.inspect} => {
246
- public_key: <<~PEM,
247
- #{indent(identity.public_key_pem, 10)}\
248
- PEM
249
- private_key: <<~PEM
250
- #{indent(identity.private_key_pem, 10)}\
251
- PEM
252
- }
253
- RUBY
254
- end.join(",\n")
255
-
256
- <<~RUBY
257
- # frozen_string_literal: true
258
-
259
- module #{module_name}
260
- module Shared
261
- module NodeIdentityCatalog
262
- module_function
263
-
264
- IDENTITIES = {
265
- #{entries}
266
- }.freeze
267
-
268
- def identity_for(node_name)
269
- source = IDENTITIES.fetch(node_name.to_s)
270
- Igniter::Cluster::Identity::NodeIdentity.new(
271
- node_id: node_name.to_s,
272
- public_key_pem: source.fetch(:public_key),
273
- private_key_pem: source.fetch(:private_key)
274
- )
275
- end
276
-
277
- def trust_store
278
- entries = IDENTITIES.map do |node_name, keys|
279
- {
280
- node_id: node_name,
281
- public_key: keys.fetch(:public_key),
282
- label: "#{namespace_path}-local"
283
- }
284
- end
285
- Igniter::Cluster::Trust::TrustStore.new(entries)
286
- end
287
- end
288
- end
289
- end
290
- RUBY
291
- end
292
-
293
- def capability_profile_rb
294
- defaults = NODE_PROFILES.map do |profile|
295
- <<~RUBY.chomp
296
- #{profile.fetch(:profile).inspect} => {
297
- role: #{profile.fetch(:role).inspect},
298
- port: #{profile.fetch(:port)},
299
- declared_capabilities: #{profile.fetch(:declared_capabilities).inspect},
300
- mocked_capabilities: #{profile.fetch(:mocked_capabilities).inspect},
301
- tags: #{profile.fetch(:tags).inspect},
302
- seeds: #{Array(profile[:seeds]).inspect}
303
- }
304
- RUBY
305
- end.join(",\n")
306
-
307
- <<~RUBY
308
- # frozen_string_literal: true
309
-
310
- require_relative "node_identity_catalog"
311
-
312
- module #{module_name}
313
- module Shared
314
- module CapabilityProfile
315
- module_function
316
-
317
- DEFAULT_NODE = "seed"
318
- DEFAULT_PORT = 4667
319
- DEFAULTS = {
320
- #{defaults}
321
- }.freeze
322
-
323
- def current(env = ENV)
324
- node_profile = string(env["IGNITER_NODE"], default: DEFAULT_NODE)
325
- defaults = DEFAULTS.fetch(node_profile, {})
326
- node_name = string(env["#{env_prefix}_NODE_NAME"], default: "#{namespace_path}-\#{node_profile}")
327
- node_role = string(env["#{env_prefix}_NODE_ROLE"], default: defaults.fetch(:role, node_profile))
328
- port = integer(env["PORT"], default: defaults.fetch(:port, DEFAULT_PORT))
329
- local_url = string(env["#{env_prefix}_NODE_URL"], default: "http://127.0.0.1:\#{port}")
330
-
331
- declared = csv(env["#{env_prefix}_LOCAL_CAPABILITIES"], default: defaults.fetch(:declared_capabilities, []))
332
- mocked = csv(env["#{env_prefix}_MOCK_CAPABILITIES"], default: defaults.fetch(:mocked_capabilities, []))
333
- tags = csv(env["#{env_prefix}_NODE_TAGS"], default: defaults.fetch(:tags, []))
334
- seeds = csv_strings(env["#{env_prefix}_SEEDS"], default: defaults.fetch(:seeds, []))
335
-
336
- {
337
- node_profile: node_profile,
338
- node_name: node_name,
339
- node_role: node_role,
340
- port: port,
341
- local_url: local_url,
342
- declared_capabilities: declared,
343
- mocked_capabilities: mocked,
344
- effective_capabilities: (declared + mocked).uniq.sort,
345
- tags: tags,
346
- seeds: seeds,
347
- start_discovery: truthy?(env["#{env_prefix}_START_DISCOVERY"]),
348
- auto_self_heal: !falsy?(env["#{env_prefix}_AUTO_SELF_HEAL"]),
349
- self_heal_interval: integer(env["#{env_prefix}_SELF_HEAL_INTERVAL"], default: 15),
350
- auto_announce: !falsy?(env["#{env_prefix}_AUTO_ANNOUNCE"]),
351
- identity: NodeIdentityCatalog.identity_for(node_name),
352
- trust_store: NodeIdentityCatalog.trust_store,
353
- metadata: {
354
- cluster_demo: {
355
- node_profile: node_profile,
356
- role: node_role,
357
- declared_capabilities: declared,
358
- mocked_capabilities: mocked
359
- }
360
- }
361
- }
362
- end
363
-
364
- def discovery_snapshot(env = ENV)
365
- profile = current(env)
366
-
367
- {
368
- node: {
369
- name: profile[:node_name],
370
- profile: profile[:node_profile],
371
- role: profile[:node_role],
372
- port: profile[:port],
373
- url: profile[:local_url]
374
- },
375
- identity: {
376
- node_id: profile[:identity].node_id,
377
- fingerprint: profile[:identity].fingerprint,
378
- algorithm: profile[:identity].algorithm
379
- },
380
- trust: {
381
- known_peers: profile[:trust_store].size,
382
- entries: profile[:trust_store].to_h[:entries]
383
- },
384
- governance: {
385
- trail: Igniter::Cluster::Mesh.config.governance_trail.snapshot(limit: 5),
386
- checkpoint: governance_checkpoint_snapshot
387
- },
388
- capabilities: {
389
- declared: profile[:declared_capabilities],
390
- mocked: profile[:mocked_capabilities],
391
- effective: profile[:effective_capabilities]
392
- },
393
- tags: profile[:tags],
394
- seeds: profile[:seeds],
395
- discovery: {
396
- start: profile[:start_discovery],
397
- auto_announce: profile[:auto_announce],
398
- auto_self_heal: profile[:auto_self_heal],
399
- self_heal_interval: profile[:self_heal_interval]
400
- }
401
- }
402
- end
403
-
404
- def discovered_peers
405
- return [] unless defined?(Igniter::Cluster::Mesh)
406
-
407
- Igniter::Cluster::Mesh.config.peer_registry.all.map do |peer|
408
- {
409
- name: peer.name,
410
- url: peer.url,
411
- capabilities: peer.capabilities,
412
- tags: peer.tags,
413
- metadata: peer.metadata,
414
- identity: peer.metadata[:mesh_identity],
415
- trust: peer.metadata[:mesh_trust]
416
- }
417
- end.sort_by { |peer| peer.fetch(:name) }
418
- rescue StandardError
419
- []
420
- end
421
-
422
- def configure_cluster!(config, env = ENV)
423
- profile = current(env)
424
-
425
- config.peer_name = profile[:node_name]
426
- config.local_capabilities = profile[:effective_capabilities]
427
- config.local_tags = profile[:tags]
428
- config.local_metadata = profile[:metadata]
429
- config.seeds = profile[:seeds]
430
- config.local_url = profile[:local_url]
431
- config.start_discovery = profile[:start_discovery]
432
- config.auto_announce = profile[:auto_announce]
433
- config.auto_self_heal = profile[:auto_self_heal]
434
- config.self_heal_interval = profile[:self_heal_interval]
435
- config.identity = profile[:identity]
436
- config.trust_store = profile[:trust_store]
437
- end
438
-
439
- def governance_checkpoint_snapshot
440
- checkpoint = Igniter::Cluster::Mesh.config.governance_checkpoint(limit: 5)
441
- assessment = Igniter::Cluster::Trust::Verifier.assess_governance_checkpoint(
442
- checkpoint,
443
- trust_store: Igniter::Cluster::Mesh.config.trust_store
444
- )
445
-
446
- {
447
- node_id: checkpoint.node_id,
448
- fingerprint: checkpoint.fingerprint,
449
- crest_digest: checkpoint.crest_digest,
450
- checkpointed_at: checkpoint.checkpointed_at,
451
- trust: assessment.to_h
452
- }
453
- rescue StandardError
454
- nil
455
- end
456
-
457
- def csv(value, default: [])
458
- text = value.to_s.strip
459
- items = if text.empty?
460
- Array(default)
461
- else
462
- text.split(",")
463
- end
464
-
465
- items.map { |entry| entry.to_s.strip }.reject(&:empty?).map(&:to_sym).uniq.sort
466
- end
467
-
468
- def csv_strings(value, default: [])
469
- text = value.to_s.strip
470
- items = if text.empty?
471
- Array(default)
472
- else
473
- text.split(",")
474
- end
475
-
476
- items.map { |entry| entry.to_s.strip }.reject(&:empty?).uniq.sort
477
- end
478
-
479
- def truthy?(value)
480
- %w[1 true yes on].include?(value.to_s.strip.downcase)
481
- end
482
-
483
- def falsy?(value)
484
- %w[0 false no off].include?(value.to_s.strip.downcase)
485
- end
486
-
487
- def string(value, default:)
488
- text = value.to_s.strip
489
- text.empty? ? default.to_s : text
490
- end
491
-
492
- def integer(value, default:)
493
- text = value.to_s.strip
494
- text.empty? ? default.to_i : Integer(text)
495
- end
496
- end
497
- end
498
- end
499
- RUBY
500
- end
501
-
502
- def stack_overview_rb
503
- <<~RUBY
504
- # frozen_string_literal: true
505
-
506
- require "time"
507
- require_relative "capability_profile"
508
-
509
- module #{module_name}
510
- module Shared
511
- module StackOverview
512
- module_function
513
-
514
- def build
515
- deployment = #{stack_class_name}.deployment_snapshot
516
- nodes = deployment.fetch("nodes", {}).transform_values do |config|
517
- {
518
- role: config["role"],
519
- public: config["public"],
520
- port: config["port"],
521
- host: config["host"],
522
- command: config["command"],
523
- mounts: config.fetch("mounts", {}),
524
- environment: config.fetch("environment", {})
525
- }
526
- end
527
- routing = routing_snapshot
528
-
529
- {
530
- generated_at: Time.now.utc.iso8601,
531
- stack: {
532
- name: #{stack_class_name}.stack_settings.dig("stack", "name"),
533
- root_app: deployment.dig("stack", "root_app"),
534
- default_node: deployment.dig("stack", "default_node"),
535
- mounts: deployment.dig("stack", "mounts"),
536
- apps: #{stack_class_name}.app_names.map(&:to_s)
537
- },
538
- counts: {
539
- apps: #{stack_class_name}.app_names.size,
540
- nodes: nodes.size,
541
- discovered_peers: CapabilityProfile.discovered_peers.size,
542
- trusted_peers: CapabilityProfile.discovered_peers.count { |peer| peer.dig(:trust, :status) == :trusted },
543
- routing_plans: routing[:plan_count]
544
- },
545
- current_node: CapabilityProfile.discovery_snapshot,
546
- routing: routing,
547
- discovered_peers: CapabilityProfile.discovered_peers,
548
- nodes: nodes,
549
- apps: deployment.fetch("apps").transform_values do |config|
550
- {
551
- path: config["path"],
552
- class_name: config["class_name"],
553
- default: config["default"]
554
- }
555
- end
556
- }
557
- end
558
-
559
- def routing_snapshot
560
- report = Igniter::Cluster::Mesh.config.current_routing_report
561
- routing = Hash(report&.dig(:routing) || {})
562
- trail = Igniter::Cluster::Mesh.config.governance_trail.snapshot(limit: 8)
563
- latest_tick = Array(trail[:events]).reverse.find { |event| event[:type] == :routing_self_heal_tick }
564
-
565
- {
566
- active: !routing.empty?,
567
- total: routing.fetch(:total, 0),
568
- pending: routing.fetch(:pending, 0),
569
- failed: routing.fetch(:failed, 0),
570
- plan_count: Array(routing[:plans]).size,
571
- incidents: Hash(routing.dig(:facets, :by_incident) || {}),
572
- plan_actions: Hash(routing.dig(:facets, :by_plan_action) || {}),
573
- entries: Array(routing[:entries]).first(5).map do |entry|
574
- {
575
- node_name: entry[:node_name],
576
- status: entry[:status],
577
- routing_trace_summary: entry[:routing_trace_summary]
578
- }
579
- end,
580
- latest_self_heal_tick: latest_tick && {
581
- type: latest_tick[:type],
582
- timestamp: latest_tick[:timestamp],
583
- payload: latest_tick[:payload]
584
- }
585
- }
586
- rescue StandardError
587
- {
588
- active: false,
589
- total: 0,
590
- pending: 0,
591
- failed: 0,
592
- plan_count: 0,
593
- incidents: {},
594
- plan_actions: {},
595
- entries: [],
596
- latest_self_heal_tick: nil
597
- }
598
- end
599
- end
600
- end
601
- end
602
- RUBY
603
- end
604
-
605
- def routing_demo_rb
606
- <<~RUBY
607
- # frozen_string_literal: true
608
-
609
- module #{module_name}
610
- module Shared
611
- module RoutingDemo
612
- module_function
613
-
614
- def run!(scenario: "governance_gate")
615
- report = build_report(scenario.to_s)
616
- Igniter::Cluster::Mesh.config.record_routing_report!(report)
617
- result = Igniter::Cluster::Mesh.repair_loop.heal_once
618
-
619
- {
620
- scenario: scenario.to_s,
621
- report: report,
622
- result: result.to_h,
623
- trail: Igniter::Cluster::Mesh.config.governance_trail.snapshot(limit: 8)
624
- }
625
- end
626
-
627
- def build_report(scenario)
628
- case scenario
629
- when "peer_unreachable"
630
- {
631
- routing: {
632
- total: 1,
633
- pending: 1,
634
- failed: 0,
635
- plans: [
636
- {
637
- action: :refresh_peer_health,
638
- scope: :mesh_health,
639
- automated: true,
640
- requires_approval: false,
641
- params: {
642
- peer_name: "#{namespace_path}-edge",
643
- selected_url: "http://127.0.0.1:4668"
644
- },
645
- sources: [
646
- {
647
- node_name: :voice_sync,
648
- status: :pending,
649
- incident: :peer_unreachable,
650
- hint_code: :restore_peer_connectivity
651
- }
652
- ]
653
- }
654
- ],
655
- facets: {
656
- by_incident: { peer_unreachable: 1 },
657
- by_plan_action: { refresh_peer_health: 1 }
658
- },
659
- entries: [
660
- {
661
- node_name: :voice_sync,
662
- status: :pending,
663
- routing_trace_summary: "mode=capability eligible=0 selected=none reasons=unreachable"
664
- }
665
- ]
666
- }
667
- }
668
- else
669
- {
670
- routing: {
671
- total: 1,
672
- pending: 1,
673
- failed: 0,
674
- plans: [
675
- {
676
- action: :refresh_governance_checkpoint,
677
- scope: :mesh_governance,
678
- automated: true,
679
- requires_approval: false,
680
- params: {
681
- governance_keys: %i[trust latest_type blocked_events],
682
- peer_candidates: ["#{namespace_path}-analyst"]
683
- },
684
- sources: [
685
- {
686
- node_name: :analysis_result,
687
- status: :pending,
688
- incident: :governance_gate,
689
- hint_code: :wait_for_governance_crest
690
- }
691
- ]
692
- },
693
- {
694
- action: :relax_governance_requirements,
695
- scope: :routing_governance,
696
- automated: false,
697
- requires_approval: true,
698
- params: {
699
- governance_keys: %i[trust latest_type blocked_events],
700
- peer_candidates: ["#{namespace_path}-analyst"]
701
- },
702
- sources: [
703
- {
704
- node_name: :analysis_result,
705
- status: :pending,
706
- incident: :governance_gate,
707
- hint_code: :relax_governance_requirements
708
- }
709
- ]
710
- }
711
- ],
712
- facets: {
713
- by_incident: { governance_gate: 1 },
714
- by_plan_action: {
715
- refresh_governance_checkpoint: 1,
716
- relax_governance_requirements: 1
717
- }
718
- },
719
- entries: [
720
- {
721
- node_name: :analysis_result,
722
- status: :pending,
723
- routing_trace_summary: "mode=capability eligible=0 selected=none reasons=query_mismatch"
724
- }
725
- ]
726
- }
727
- }
728
- end
729
- end
730
- end
731
- end
732
- end
733
- RUBY
734
- end
735
-
736
- def main_app_rb
737
- <<~RUBY
738
- # frozen_string_literal: true
739
-
740
- require "igniter/app"
741
- require "igniter/cluster"
742
- require "igniter/core"
743
- require "igniter/agent"
744
- require_relative "web/handlers/status_handler"
745
- require_relative "support/cluster_ops_api"
746
- require_relative "../../lib/#{namespace_path}/shared/capability_profile"
747
-
748
- module #{module_name}
749
- class MainApp < Igniter::App
750
- root_dir __dir__
751
- config_file "app.yml"
752
- host :cluster_app
753
-
754
- tools_path "tools"
755
- skills_path "skills"
756
- executors_path "executors"
757
- contracts_path "contracts"
758
- agents_path "agents"
759
-
760
- route "GET", "/v1/home/status", with: #{module_name}::Main::StatusHandler
761
-
762
- on_boot do
763
- register "GreetContract", #{module_name}::GreetContract
764
- end
765
-
766
- provide :cluster_ops_api, #{module_name}::Main::Support::ClusterOpsAPI
767
-
768
- configure do |c|
769
- c.app_host.host = "0.0.0.0"
770
- c.app_host.port = Integer(ENV.fetch("PORT", "4667"))
771
- c.app_host.log_format = ENV.fetch("LOG_FORMAT", "text").to_sym
772
- #{module_name}::Shared::CapabilityProfile.configure_cluster!(c.cluster_app_host)
773
- end
774
- end
775
- end
776
- RUBY
777
- end
778
-
779
- def main_cluster_ops_api_rb
780
- <<~RUBY
781
- # frozen_string_literal: true
782
-
783
- require_relative "../../../lib/#{namespace_path}/shared/stack_overview"
784
- require_relative "../../../lib/#{namespace_path}/shared/routing_demo"
785
-
786
- module #{module_name}
787
- module Main
788
- module Support
789
- module ClusterOpsAPI
790
- module_function
791
-
792
- def overview
793
- #{module_name}::Shared::StackOverview.build
794
- end
795
-
796
- def run_self_heal_demo!(scenario:)
797
- #{module_name}::Shared::RoutingDemo.run!(scenario: scenario)
798
- end
799
- end
800
- end
801
- end
802
- end
803
- RUBY
804
- end
805
-
806
- def main_status_handler_rb
807
- <<~RUBY
808
- # frozen_string_literal: true
809
-
810
- require "json"
811
- require_relative "../../../../lib/#{namespace_path}/shared/stack_overview"
812
-
813
- module #{module_name}
814
- module Main
815
- module StatusHandler
816
- module_function
817
-
818
- def call(params:, body:, headers:, env:, raw_body:, config:) # rubocop:disable Lint/UnusedMethodArgument
819
- snapshot = #{module_name}::Shared::StackOverview.build
820
-
821
- {
822
- status: 200,
823
- body: JSON.generate(
824
- generated_at: snapshot.fetch(:generated_at),
825
- stack: snapshot.fetch(:stack),
826
- apps: snapshot.fetch(:apps),
827
- current_node: snapshot.fetch(:current_node),
828
- routing: snapshot.fetch(:routing),
829
- discovered_peers: snapshot.fetch(:discovered_peers),
830
- nodes: snapshot.fetch(:nodes),
831
- counts: snapshot.fetch(:counts)
832
- ),
833
- headers: { "Content-Type" => "application/json" }
834
- }
835
- end
836
- end
837
- end
838
- end
839
- RUBY
840
- end
841
-
842
- def main_app_spec
843
- <<~RUBY
844
- # frozen_string_literal: true
845
-
846
- require_relative "spec_helper"
847
- require "json"
848
- require "stringio"
849
-
850
- RSpec.describe #{module_name}::MainApp do
851
- before do
852
- Igniter::Cluster::Mesh.reset!
853
- end
854
-
855
- it "builds a cluster-ready app with identity and trust" do
856
- config = described_class.send(:build!)
857
-
858
- expect(config.registry.registered?("GreetContract")).to be(true)
859
- expect(config.peer_name).to eq("#{namespace_path}-seed")
860
- expect(config.peer_capabilities).to include(:mesh_seed, :notifications, :routing, :status_api)
861
- expect(config.peer_identity).not_to be_nil
862
- expect(config.peer_identity.node_id).to eq("#{namespace_path}-seed")
863
- expect(config.peer_trust_store.size).to eq(3)
864
- end
865
-
866
- it "exposes a status endpoint for the cluster sandbox snapshot" do
867
- app = described_class.rack_app
868
-
869
- status, headers, body = app.call(
870
- "REQUEST_METHOD" => "GET",
871
- "PATH_INFO" => "/v1/home/status",
872
- "rack.input" => StringIO.new
873
- )
874
-
875
- payload = JSON.parse(body.each.to_a.join)
876
-
877
- expect(status).to eq(200)
878
- expect(headers["Content-Type"]).to include("application/json")
879
- expect(payload.dig("stack", "root_app")).to eq("main")
880
- expect(payload.dig("stack", "default_node")).to eq("seed")
881
- expect(payload.dig("current_node", "node", "name")).to eq("#{namespace_path}-seed")
882
- expect(payload.dig("current_node", "identity", "node_id")).to eq("#{namespace_path}-seed")
883
- expect(payload.dig("current_node", "trust", "known_peers")).to eq(3)
884
- expect(payload.dig("current_node", "governance", "checkpoint", "trust", "status")).to eq("trusted")
885
- expect(payload.dig("routing", "active")).to eq(false)
886
- expect(payload.dig("nodes", "analyst", "port")).to eq(4669)
887
- end
888
- end
889
-
890
- RSpec.describe #{module_name}::GreetContract do
891
- it "returns a greeting" do
892
- result = described_class.new(name: "Alice").result.greeting
893
-
894
- expect(result[:message]).to include("Alice")
895
- expect(result[:greeted_at]).to be_a(String)
896
- end
897
- end
898
- RUBY
899
- end
900
-
901
- def dashboard_app_rb
902
- <<~RUBY
903
- # frozen_string_literal: true
904
-
905
- require "igniter/app"
906
- require "igniter/core"
907
- require_relative "web/handlers/home_handler"
908
- require_relative "web/handlers/overview_handler"
909
- require_relative "web/handlers/self_heal_demo_handler"
910
-
911
- module #{module_name}
912
- class DashboardApp < Igniter::App
913
- root_dir __dir__
914
- config_file "app.yml"
915
- mount_operator_surface
916
-
917
- route "GET", "/", with: #{module_name}::Dashboard::HomeHandler
918
- route "GET", "/api/overview", with: #{module_name}::Dashboard::OverviewHandler
919
- route "POST", "/demo/self-heal", with: #{module_name}::Dashboard::SelfHealDemoHandler
920
- end
921
- end
922
- RUBY
923
- end
924
-
925
- def dashboard_app_yml
926
- <<~YAML
927
- persistence:
928
- execution:
929
- adapter: memory
930
- path: var/dashboard_executions.sqlite3
931
- YAML
932
- end
933
-
934
- def dashboard_spec_helper
935
- <<~RUBY
936
- # frozen_string_literal: true
937
-
938
- require_relative "../../../spec/spec_helper"
939
-
940
- #{module_name}::DashboardApp.send(:build!)
941
- RUBY
942
- end
943
-
944
- def dashboard_home_handler_rb
945
- <<~RUBY
946
- # frozen_string_literal: true
947
-
948
- require "igniter-frontend"
949
- require_relative "../views/home_page"
950
-
951
- module #{module_name}
952
- module Dashboard
953
- module HomeHandler
954
- module_function
955
-
956
- def call(params:, body:, headers:, env:, raw_body:, config:) # rubocop:disable Lint/UnusedMethodArgument
957
- snapshot = #{module_name}::DashboardApp.interface(:cluster_ops_api).overview
958
-
959
- Igniter::Frontend::Response.html(
960
- Views::HomePage.render(
961
- snapshot: snapshot,
962
- base_path: env["SCRIPT_NAME"].to_s
963
- )
964
- )
965
- end
966
- end
967
- end
968
- end
969
- RUBY
970
- end
971
-
972
- def dashboard_home_page_rb
973
- <<~RUBY
974
- # frozen_string_literal: true
975
-
976
- require "json"
977
- require "igniter-frontend"
978
-
979
- module #{module_name}
980
- module Dashboard
981
- module Views
982
- class HomePage < Igniter::Frontend::Page
983
- def self.render(snapshot:, base_path: "")
984
- new(snapshot: snapshot, base_path: base_path).render
985
- end
986
-
987
- def initialize(snapshot:, base_path:)
988
- @snapshot = snapshot
989
- @base_path = base_path.to_s.sub(%r{/+\z}, "")
990
- end
991
-
992
- def call(view)
993
- render_document(view, title: "#{module_name} Cluster Dashboard") do |body|
994
- body.tag(:main, class: "shell") do |main|
995
- render_hero(main)
996
- render_self_heal(main)
997
- render_panels(main)
998
- end
999
- end
1000
- end
1001
-
1002
- private
1003
-
1004
- attr_reader :snapshot
1005
- attr_reader :base_path
1006
-
1007
- def yield_head(head)
1008
- head.tag(:style) { |style| style.raw(stylesheet) }
1009
- end
1010
-
1011
- def render_hero(view)
1012
- current = snapshot.fetch(:current_node)
1013
- routing = snapshot.fetch(:routing)
1014
- peers = snapshot.fetch(:discovered_peers)
1015
-
1016
- view.tag(:section, class: "hero") do |hero|
1017
- hero.tag(:h1, "#{module_name} Cluster Dashboard")
1018
- hero.tag(:p, "Cluster-ready scaffold with mounted apps, local node profiles, mocked capabilities, and a self-heal demo.")
1019
- hero.tag(:p, class: "meta") do |meta|
1020
- meta.text("current_node=\#{current.dig(:node, :name)} · ")
1021
- meta.text("profile=\#{current.dig(:node, :profile)} · ")
1022
- meta.text("role=\#{current.dig(:node, :role)}")
1023
- end
1024
- hero.tag(:p, class: "meta") do |meta|
1025
- meta.text("capabilities=\#{current.dig(:capabilities, :effective).join(", ")} · ")
1026
- meta.text("peers=\#{peers.size} · ")
1027
- meta.text("routing_active=\#{routing[:active]}")
1028
- end
1029
- end
1030
- end
1031
-
1032
- def render_self_heal(view)
1033
- view.tag(:section, class: "panel") do |section|
1034
- section.tag(:h2, "Self-Heal Demo")
1035
- section.tag(:p, "Trigger a synthetic routing incident and watch automated remediation update the governance trail.")
1036
- section.tag(:div, class: "actions") do |actions|
1037
- actions.form(action: route("/demo/self-heal?scenario=governance_gate"), method: "post") do |form|
1038
- form.submit("Trigger Governance Gate")
1039
- end
1040
- actions.form(action: route("/demo/self-heal?scenario=peer_unreachable"), method: "post") do |form|
1041
- form.submit("Trigger Peer Repair")
1042
- end
1043
- actions.tag(:a, "Overview API", href: route("/api/overview"))
1044
- actions.tag(:a, "Operator Console", href: route("/operator"))
1045
- actions.tag(:a, "Operator API", href: route("/api/operator"))
1046
- end
1047
- end
1048
- end
1049
-
1050
- def render_panels(view)
1051
- current = snapshot.fetch(:current_node)
1052
- routing = snapshot.fetch(:routing)
1053
- peers = snapshot.fetch(:discovered_peers)
1054
-
1055
- view.tag(:section, class: "grid") do |grid|
1056
- render_panel(grid, "Current Node", current)
1057
- render_panel(grid, "Routing", routing)
1058
- render_panel(grid, "Peers", peers)
1059
- end
1060
- end
1061
-
1062
- def render_panel(view, title, payload)
1063
- view.tag(:article, class: "panel") do |panel|
1064
- panel.tag(:h2, title)
1065
- panel.tag(:pre, JSON.pretty_generate(payload))
1066
- end
1067
- end
1068
-
1069
- def route(path)
1070
- return path if base_path.empty?
1071
-
1072
- [base_path, path.sub(%r{\\A/}, "")].join("/")
1073
- end
1074
-
1075
- def stylesheet
1076
- <<~CSS
1077
- body {
1078
- margin: 0;
1079
- font-family: ui-sans-serif, system-ui, sans-serif;
1080
- background: #f4efe5;
1081
- color: #1f1c18;
1082
- }
1083
-
1084
- .shell {
1085
- max-width: 1040px;
1086
- margin: 0 auto;
1087
- padding: 32px 20px 48px;
1088
- }
1089
-
1090
- .hero,
1091
- .panel {
1092
- background: white;
1093
- border: 1px solid #dfd1bb;
1094
- border-radius: 18px;
1095
- padding: 20px;
1096
- margin-bottom: 18px;
1097
- }
1098
-
1099
- .grid {
1100
- display: grid;
1101
- gap: 16px;
1102
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
1103
- }
1104
-
1105
- .actions {
1106
- display: flex;
1107
- gap: 12px;
1108
- flex-wrap: wrap;
1109
- margin-top: 12px;
1110
- align-items: center;
1111
- }
1112
-
1113
- .actions form {
1114
- margin: 0;
1115
- }
1116
-
1117
- .actions button {
1118
- background: #145f56;
1119
- color: white;
1120
- border: 0;
1121
- border-radius: 999px;
1122
- padding: 10px 14px;
1123
- cursor: pointer;
1124
- font: inherit;
1125
- }
1126
-
1127
- .actions a {
1128
- color: #145f56;
1129
- text-decoration: none;
1130
- }
1131
-
1132
- pre {
1133
- white-space: pre-wrap;
1134
- font-family: ui-monospace, SFMono-Regular, monospace;
1135
- font-size: 13px;
1136
- margin: 0;
1137
- }
1138
-
1139
- .meta {
1140
- color: #5f574a;
1141
- }
1142
- CSS
1143
- end
1144
- end
1145
- end
1146
- end
1147
- end
1148
- RUBY
1149
- end
1150
-
1151
- def dashboard_overview_handler_rb
1152
- <<~RUBY
1153
- # frozen_string_literal: true
1154
-
1155
- require "json"
1156
-
1157
- module #{module_name}
1158
- module Dashboard
1159
- module OverviewHandler
1160
- module_function
1161
-
1162
- def call(params:, body:, headers:, env:, raw_body:, config:) # rubocop:disable Lint/UnusedMethodArgument
1163
- snapshot = #{module_name}::DashboardApp.interface(:cluster_ops_api).overview
1164
-
1165
- {
1166
- status: 200,
1167
- body: JSON.generate(snapshot),
1168
- headers: { "Content-Type" => "application/json" }
1169
- }
1170
- end
1171
- end
1172
- end
1173
- end
1174
- RUBY
1175
- end
1176
-
1177
- def dashboard_self_heal_demo_handler_rb
1178
- <<~RUBY
1179
- # frozen_string_literal: true
1180
-
1181
- module #{module_name}
1182
- module Dashboard
1183
- module SelfHealDemoHandler
1184
- module_function
1185
-
1186
- def call(params:, body:, headers:, env:, raw_body:, config:) # rubocop:disable Lint/UnusedMethodArgument
1187
- scenario = params.fetch("scenario", body.fetch("scenario", "governance_gate")).to_s
1188
- #{module_name}::DashboardApp.interface(:cluster_ops_api).run_self_heal_demo!(scenario: scenario)
1189
- base_path = env["SCRIPT_NAME"].to_s.sub(%r{/+\z}, "")
1190
- location = [base_path, ""].reject(&:empty?).join("/") + "/?demo=\#{scenario}"
1191
-
1192
- {
1193
- status: 303,
1194
- body: "",
1195
- headers: { "Location" => location }
1196
- }
1197
- end
1198
- end
1199
- end
1200
- end
1201
- RUBY
1202
- end
1203
-
1204
- def dashboard_app_spec
1205
- <<~RUBY
1206
- # frozen_string_literal: true
1207
-
1208
- require_relative "spec_helper"
1209
- require "json"
1210
- require "stringio"
1211
-
1212
- RSpec.describe #{module_name}::DashboardApp do
1213
- before do
1214
- Igniter::Cluster::Mesh.reset!
1215
- end
1216
-
1217
- it "renders the canonical operator endpoint" do
1218
- app = described_class.rack_app
1219
-
1220
- status, headers, body = app.call(
1221
- "REQUEST_METHOD" => "GET",
1222
- "PATH_INFO" => "/api/operator",
1223
- "rack.input" => StringIO.new
1224
- )
1225
-
1226
- payload = JSON.parse(body.each.to_a.join)
1227
-
1228
- expect(status).to eq(200)
1229
- expect(headers["Content-Type"]).to include("application/json")
1230
- expect(payload["app"]).to eq("#{module_name}::DashboardApp")
1231
- expect(payload["scope"]).to eq("mode" => "app")
1232
- expect(payload.dig("summary", "total")).to eq(0)
1233
- end
1234
-
1235
- it "renders the built-in operator console" do
1236
- app = described_class.rack_app
1237
-
1238
- status, headers, body = app.call(
1239
- "REQUEST_METHOD" => "GET",
1240
- "PATH_INFO" => "/operator",
1241
- "rack.input" => StringIO.new
1242
- )
1243
-
1244
- html = body.each.to_a.join
1245
-
1246
- expect(status).to eq(200)
1247
- expect(headers["Content-Type"]).to include("text/html")
1248
- expect(html).to include("Operator Console")
1249
- expect(html).to include("/api/operator")
1250
- end
1251
-
1252
- it "renders the overview endpoint" do
1253
- app = described_class.rack_app
1254
-
1255
- status, headers, body = app.call(
1256
- "REQUEST_METHOD" => "GET",
1257
- "PATH_INFO" => "/api/overview",
1258
- "rack.input" => StringIO.new
1259
- )
1260
-
1261
- payload = JSON.parse(body.each.to_a.join)
1262
-
1263
- expect(status).to eq(200)
1264
- expect(headers["Content-Type"]).to include("application/json")
1265
- expect(payload.dig("stack", "root_app")).to eq("main")
1266
- expect(payload.dig("stack", "default_node")).to eq("seed")
1267
- expect(payload.dig("nodes", "seed", "mounts", "dashboard")).to eq("/dashboard")
1268
- expect(payload.dig("counts", "routing_plans")).to eq(0)
1269
- end
1270
-
1271
- it "renders the cluster dashboard home page" do
1272
- app = described_class.rack_app
1273
-
1274
- status, headers, body = app.call(
1275
- "REQUEST_METHOD" => "GET",
1276
- "PATH_INFO" => "/",
1277
- "rack.input" => StringIO.new
1278
- )
1279
-
1280
- html = body.each.to_a.join
1281
-
1282
- expect(status).to eq(200)
1283
- expect(headers["Content-Type"]).to include("text/html")
1284
- expect(html).to include("#{module_name} Cluster Dashboard")
1285
- expect(html).to include("Self-Heal Demo")
1286
- expect(html).to include("Operator API")
1287
- expect(html).to include("/demo/self-heal?scenario=governance_gate")
1288
- end
1289
-
1290
- it "runs the self-heal demo and exposes routing activity" do
1291
- app = described_class.rack_app
1292
-
1293
- demo_status, demo_headers, = app.call(
1294
- "REQUEST_METHOD" => "POST",
1295
- "PATH_INFO" => "/demo/self-heal",
1296
- "QUERY_STRING" => "scenario=governance_gate",
1297
- "rack.input" => StringIO.new
1298
- )
1299
-
1300
- overview_status, _overview_headers, overview_body = app.call(
1301
- "REQUEST_METHOD" => "GET",
1302
- "PATH_INFO" => "/api/overview",
1303
- "rack.input" => StringIO.new
1304
- )
1305
-
1306
- payload = JSON.parse(overview_body.each.to_a.join)
1307
-
1308
- expect(demo_status).to eq(303)
1309
- expect(demo_headers["Location"]).to eq("/?demo=governance_gate")
1310
- expect(overview_status).to eq(200)
1311
- expect(payload.dig("routing", "active")).to eq(true)
1312
- expect(payload.dig("routing", "plan_count")).to eq(2)
1313
- expect(payload.dig("routing", "incidents", "governance_gate")).to eq(1)
1314
- end
1315
- end
1316
- RUBY
1317
- end
1318
-
1319
- def cluster_readme
1320
- <<~MARKDOWN
1321
- # #{module_name}
1322
-
1323
- This stack was generated with the `cluster` scaffold profile.
1324
-
1325
- It is the smallest stack-first scaffold that already feels cluster-native:
1326
-
1327
- - mounted `dashboard` app
1328
- - local node profiles in `stack.yml`
1329
- - mocked capabilities for local mesh demos
1330
- - signed node identities and trust store
1331
- - a small self-heal demo for routing/governance
1332
-
1333
- ## Reading Order
1334
-
1335
- 1. `stack.rb`
1336
- 2. `stack.yml`
1337
- 3. `lib/#{namespace_path}/shared/capability_profile.rb`
1338
- 4. `apps/main/app.rb`
1339
- 5. `apps/dashboard/app.rb`
1340
-
1341
- ## Boot
1342
-
1343
- ```bash
1344
- bundle install
1345
- bin/console --node seed
1346
- bin/dev
1347
- ```
1348
-
1349
- Open:
1350
-
1351
- - `http://127.0.0.1:4667/v1/home/status`
1352
- - `http://127.0.0.1:4667/dashboard`
1353
- - `http://127.0.0.1:4668/dashboard`
1354
- - `http://127.0.0.1:4669/dashboard`
1355
-
1356
- `bin/dev` also writes per-node logs to `var/log/dev/*.log`.
1357
- MARKDOWN
1358
- end
1359
-
1360
- def indent(text, spaces)
1361
- prefix = " " * spaces
1362
- text.lines.map { |line| "#{prefix}#{line}" }.join
1363
- end
1364
- end
1365
- end
1366
- end
1367
- end