igniter 0.5.0 → 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 (840) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +150 -658
  4. data/docs/README.md +59 -0
  5. data/docs/assets/README.md +8 -0
  6. data/docs/concepts/README.md +18 -0
  7. data/docs/concepts/igniter.md +119 -0
  8. data/docs/dev/README.md +48 -0
  9. data/docs/dev/agent-orchestra-dna.md +271 -0
  10. data/docs/dev/ai-agents-target-plan.md +178 -0
  11. data/docs/dev/application-target-plan.md +45 -0
  12. data/docs/dev/application-web-integration.md +59 -0
  13. data/docs/dev/application-web-poc-pattern-guide.md +167 -0
  14. data/docs/dev/architect-supervisor-bootstrap.md +322 -0
  15. data/docs/dev/architecture.md +20 -0
  16. data/docs/dev/cluster-target-plan.md +43 -0
  17. data/docs/dev/contract-persistence-target-plan.md +426 -0
  18. data/docs/dev/current-runtime-snapshot.md +73 -0
  19. data/docs/dev/data-ownership.md +29 -0
  20. data/docs/dev/document-rotation.md +51 -0
  21. data/docs/dev/embed-target-plan.md +51 -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 +152 -344
  61. data/examples/catalog.rb +1486 -0
  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 +163 -0
  108. data/lib/igniter/cluster.rb +3 -0
  109. data/lib/igniter/contract.rb +1 -326
  110. data/lib/igniter/monorepo_packages.rb +16 -0
  111. data/lib/igniter/version.rb +1 -1
  112. data/lib/igniter/web.rb +3 -0
  113. data/lib/igniter.rb +51 -43
  114. data/packages/igniter-agents/README.md +44 -0
  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 +33 -0
  122. data/packages/igniter-agents/lib/igniter-agents.rb +3 -0
  123. data/packages/igniter-ai/README.md +42 -0
  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 +28 -0
  133. data/packages/igniter-ai/lib/igniter-ai.rb +3 -0
  134. data/packages/igniter-application/README.md +194 -0
  135. data/packages/igniter-application/lib/igniter/application/agent_definition.rb +38 -0
  136. data/packages/igniter-application/lib/igniter/application/agent_registry.rb +33 -0
  137. data/packages/igniter-application/lib/igniter/application/agent_runtime.rb +29 -0
  138. data/packages/igniter-application/lib/igniter/application/agents_builder.rb +26 -0
  139. data/packages/igniter-application/lib/igniter/application/ai_builder.rb +26 -0
  140. data/packages/igniter-application/lib/igniter/application/ai_provider_definition.rb +59 -0
  141. data/packages/igniter-application/lib/igniter/application/ai_registry.rb +34 -0
  142. data/packages/igniter-application/lib/igniter/application/application_assembly_plan.rb +67 -0
  143. data/packages/igniter-application/lib/igniter/application/application_blueprint.rb +227 -0
  144. data/packages/igniter-application/lib/igniter/application/application_capsule_report.rb +61 -0
  145. data/packages/igniter-application/lib/igniter/application/application_composition_report.rb +161 -0
  146. data/packages/igniter-application/lib/igniter/application/application_handoff_manifest.rb +100 -0
  147. data/packages/igniter-application/lib/igniter/application/application_host_activation_commit_readiness.rb +182 -0
  148. data/packages/igniter-application/lib/igniter/application/application_host_activation_dry_run_result.rb +190 -0
  149. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_commit.rb +285 -0
  150. data/packages/igniter-application/lib/igniter/application/application_host_activation_ledger_verification.rb +301 -0
  151. data/packages/igniter-application/lib/igniter/application/application_host_activation_operation_digest.rb +68 -0
  152. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan.rb +200 -0
  153. data/packages/igniter-application/lib/igniter/application/application_host_activation_plan_verification.rb +140 -0
  154. data/packages/igniter-application/lib/igniter/application/application_host_activation_readiness.rb +226 -0
  155. data/packages/igniter-application/lib/igniter/application/application_host_activation_receipt.rb +151 -0
  156. data/packages/igniter-application/lib/igniter/application/application_layout.rb +91 -0
  157. data/packages/igniter-application/lib/igniter/application/application_load_path.rb +38 -0
  158. data/packages/igniter-application/lib/igniter/application/application_load_report.rb +74 -0
  159. data/packages/igniter-application/lib/igniter/application/application_manifest.rb +65 -0
  160. data/packages/igniter-application/lib/igniter/application/application_structure_entry.rb +58 -0
  161. data/packages/igniter-application/lib/igniter/application/application_structure_plan.rb +128 -0
  162. data/packages/igniter-application/lib/igniter/application/application_transfer_applied_verification.rb +301 -0
  163. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_plan.rb +167 -0
  164. data/packages/igniter-application/lib/igniter/application/application_transfer_apply_result.rb +321 -0
  165. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_artifact.rb +160 -0
  166. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_plan.rb +125 -0
  167. data/packages/igniter-application/lib/igniter/application/application_transfer_bundle_verification.rb +154 -0
  168. data/packages/igniter-application/lib/igniter/application/application_transfer_intake_plan.rb +195 -0
  169. data/packages/igniter-application/lib/igniter/application/application_transfer_inventory.rb +153 -0
  170. data/packages/igniter-application/lib/igniter/application/application_transfer_readiness.rb +260 -0
  171. data/packages/igniter-application/lib/igniter/application/application_transfer_receipt.rb +179 -0
  172. data/packages/igniter-application/lib/igniter/application/artifact_reference.rb +39 -0
  173. data/packages/igniter-application/lib/igniter/application/boot_phase.rb +27 -0
  174. data/packages/igniter-application/lib/igniter/application/boot_plan.rb +55 -0
  175. data/packages/igniter-application/lib/igniter/application/boot_report.rb +70 -0
  176. data/packages/igniter-application/lib/igniter/application/capsule_builder.rb +396 -0
  177. data/packages/igniter-application/lib/igniter/application/capsule_export.rb +26 -0
  178. data/packages/igniter-application/lib/igniter/application/capsule_import.rb +38 -0
  179. data/packages/igniter-application/lib/igniter/application/collection_invoker.rb +54 -0
  180. data/packages/igniter-application/lib/igniter/application/collection_transport_adapter.rb +37 -0
  181. data/packages/igniter-application/lib/igniter/application/compose_invoker.rb +51 -0
  182. data/packages/igniter-application/lib/igniter/application/compose_transport_adapter.rb +34 -0
  183. data/packages/igniter-application/lib/igniter/application/config.rb +86 -0
  184. data/packages/igniter-application/lib/igniter/application/config_builder.rb +69 -0
  185. data/packages/igniter-application/lib/igniter/application/contract_registry.rb +30 -0
  186. data/packages/igniter-application/lib/igniter/application/credential_definition.rb +65 -0
  187. data/packages/igniter-application/lib/igniter/application/credential_store.rb +68 -0
  188. data/packages/igniter-application/lib/igniter/application/embedded_host.rb +23 -0
  189. data/packages/igniter-application/lib/igniter/application/environment.rb +1071 -0
  190. data/packages/igniter-application/lib/igniter/application/feature_slice.rb +61 -0
  191. data/packages/igniter-application/lib/igniter/application/feature_slice_report.rb +43 -0
  192. data/packages/igniter-application/lib/igniter/application/file_backed_host_activation_ledger_adapter.rb +138 -0
  193. data/packages/igniter-application/lib/igniter/application/file_backed_installed_capsule_registry.rb +132 -0
  194. data/packages/igniter-application/lib/igniter/application/flow_declaration.rb +62 -0
  195. data/packages/igniter-application/lib/igniter/application/flow_event.rb +50 -0
  196. data/packages/igniter-application/lib/igniter/application/flow_session_snapshot.rb +98 -0
  197. data/packages/igniter-application/lib/igniter/application/installed_capsule_entry.rb +47 -0
  198. data/packages/igniter-application/lib/igniter/application/interface.rb +11 -0
  199. data/packages/igniter-application/lib/igniter/application/kernel.rb +385 -0
  200. data/packages/igniter-application/lib/igniter/application/lifecycle_plan_step.rb +38 -0
  201. data/packages/igniter-application/lib/igniter/application/manual_loader.rb +18 -0
  202. data/packages/igniter-application/lib/igniter/application/manual_scheduler.rb +15 -0
  203. data/packages/igniter-application/lib/igniter/application/memory_session_store.rb +33 -0
  204. data/packages/igniter-application/lib/igniter/application/missing_credential_error.rb +23 -0
  205. data/packages/igniter-application/lib/igniter/application/mount_intent.rb +48 -0
  206. data/packages/igniter-application/lib/igniter/application/mount_registration.rb +49 -0
  207. data/packages/igniter-application/lib/igniter/application/pending_action.rb +39 -0
  208. data/packages/igniter-application/lib/igniter/application/pending_input.rb +45 -0
  209. data/packages/igniter-application/lib/igniter/application/plan_executor.rb +93 -0
  210. data/packages/igniter-application/lib/igniter/application/profile.rb +178 -0
  211. data/packages/igniter-application/lib/igniter/application/provider.rb +19 -0
  212. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_report.rb +72 -0
  213. data/packages/igniter-application/lib/igniter/application/provider_lifecycle_result.rb +54 -0
  214. data/packages/igniter-application/lib/igniter/application/provider_registration.rb +19 -0
  215. data/packages/igniter-application/lib/igniter/application/rack_host.rb +311 -0
  216. data/packages/igniter-application/lib/igniter/application/seam_lifecycle_result.rb +62 -0
  217. data/packages/igniter-application/lib/igniter/application/service_definition.rb +25 -0
  218. data/packages/igniter-application/lib/igniter/application/service_registry.rb +58 -0
  219. data/packages/igniter-application/lib/igniter/application/session_entry.rb +46 -0
  220. data/packages/igniter-application/lib/igniter/application/shutdown_plan.rb +45 -0
  221. data/packages/igniter-application/lib/igniter/application/shutdown_report.rb +54 -0
  222. data/packages/igniter-application/lib/igniter/application/snapshot.rb +35 -0
  223. data/packages/igniter-application/lib/igniter/application/transport_request.rb +40 -0
  224. data/packages/igniter-application/lib/igniter/application/transport_response.rb +22 -0
  225. data/packages/igniter-application/lib/igniter/application.rb +354 -0
  226. data/packages/igniter-application/lib/igniter-application.rb +3 -0
  227. data/packages/igniter-cluster/README.md +116 -0
  228. data/packages/igniter-cluster/lib/igniter/cluster/active_incident_set.rb +40 -0
  229. data/packages/igniter-cluster/lib/igniter/cluster/admission_policy.rb +158 -0
  230. data/packages/igniter-cluster/lib/igniter/cluster/admission_result.rb +47 -0
  231. data/packages/igniter-cluster/lib/igniter/cluster/capability_catalog.rb +66 -0
  232. data/packages/igniter-cluster/lib/igniter/cluster/capability_definition.rb +42 -0
  233. data/packages/igniter-cluster/lib/igniter/cluster/capability_query.rb +162 -0
  234. data/packages/igniter-cluster/lib/igniter/cluster/capability_router.rb +11 -0
  235. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_executor.rb +184 -0
  236. data/packages/igniter-cluster/lib/igniter/cluster/cluster_diagnostics_report.rb +49 -0
  237. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event.rb +34 -0
  238. data/packages/igniter-cluster/lib/igniter/cluster/cluster_event_log.rb +27 -0
  239. data/packages/igniter-cluster/lib/igniter/cluster/cluster_incident.rb +42 -0
  240. data/packages/igniter-cluster/lib/igniter/cluster/decision_explanation.rb +31 -0
  241. data/packages/igniter-cluster/lib/igniter/cluster/direct_placement.rb +11 -0
  242. data/packages/igniter-cluster/lib/igniter/cluster/discovery_feed.rb +22 -0
  243. data/packages/igniter-cluster/lib/igniter/cluster/environment.rb +380 -0
  244. data/packages/igniter-cluster/lib/igniter/cluster/errors.rb +9 -0
  245. data/packages/igniter-cluster/lib/igniter/cluster/failover_plan.rb +45 -0
  246. data/packages/igniter-cluster/lib/igniter/cluster/failover_step.rb +32 -0
  247. data/packages/igniter-cluster/lib/igniter/cluster/health_policy.rb +124 -0
  248. data/packages/igniter-cluster/lib/igniter/cluster/incident_action.rb +49 -0
  249. data/packages/igniter-cluster/lib/igniter/cluster/incident_entry.rb +98 -0
  250. data/packages/igniter-cluster/lib/igniter/cluster/incident_executor.rb +145 -0
  251. data/packages/igniter-cluster/lib/igniter/cluster/incident_workflow.rb +64 -0
  252. data/packages/igniter-cluster/lib/igniter/cluster/kernel.rb +75 -0
  253. data/packages/igniter-cluster/lib/igniter/cluster/kernel_seams.rb +249 -0
  254. data/packages/igniter-cluster/lib/igniter/cluster/lease_grant.rb +40 -0
  255. data/packages/igniter-cluster/lib/igniter/cluster/lease_plan.rb +40 -0
  256. data/packages/igniter-cluster/lib/igniter/cluster/lease_policy.rb +96 -0
  257. data/packages/igniter-cluster/lib/igniter/cluster/membership_delta.rb +36 -0
  258. data/packages/igniter-cluster/lib/igniter/cluster/membership_feed.rb +24 -0
  259. data/packages/igniter-cluster/lib/igniter/cluster/membership_projection.rb +45 -0
  260. data/packages/igniter-cluster/lib/igniter/cluster/membership_snapshot.rb +64 -0
  261. data/packages/igniter-cluster/lib/igniter/cluster/memory_incident_registry.rb +169 -0
  262. data/packages/igniter-cluster/lib/igniter/cluster/memory_peer_registry.rb +24 -0
  263. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission.rb +24 -0
  264. data/packages/igniter-cluster/lib/igniter/cluster/mesh_admission_result.rb +40 -0
  265. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_attempt.rb +51 -0
  266. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_request.rb +71 -0
  267. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_response.rb +28 -0
  268. data/packages/igniter-cluster/lib/igniter/cluster/mesh_execution_trace.rb +32 -0
  269. data/packages/igniter-cluster/lib/igniter/cluster/mesh_executor.rb +497 -0
  270. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership.rb +89 -0
  271. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_event.rb +32 -0
  272. data/packages/igniter-cluster/lib/igniter/cluster/mesh_membership_source.rb +49 -0
  273. data/packages/igniter-cluster/lib/igniter/cluster/mesh_retry_policy.rb +42 -0
  274. data/packages/igniter-cluster/lib/igniter/cluster/mesh_trust_policy.rb +131 -0
  275. data/packages/igniter-cluster/lib/igniter/cluster/operator_timeline.rb +33 -0
  276. data/packages/igniter-cluster/lib/igniter/cluster/ownership_claim.rb +30 -0
  277. data/packages/igniter-cluster/lib/igniter/cluster/ownership_plan.rb +40 -0
  278. data/packages/igniter-cluster/lib/igniter/cluster/ownership_policy.rb +100 -0
  279. data/packages/igniter-cluster/lib/igniter/cluster/peer.rb +86 -0
  280. data/packages/igniter-cluster/lib/igniter/cluster/peer_discovery.rb +62 -0
  281. data/packages/igniter-cluster/lib/igniter/cluster/peer_health.rb +55 -0
  282. data/packages/igniter-cluster/lib/igniter/cluster/peer_profile.rb +102 -0
  283. data/packages/igniter-cluster/lib/igniter/cluster/peer_topology.rb +62 -0
  284. data/packages/igniter-cluster/lib/igniter/cluster/peer_view.rb +42 -0
  285. data/packages/igniter-cluster/lib/igniter/cluster/permissive_admission.rb +11 -0
  286. data/packages/igniter-cluster/lib/igniter/cluster/placement_decision.rb +38 -0
  287. data/packages/igniter-cluster/lib/igniter/cluster/placement_policy.rb +131 -0
  288. data/packages/igniter-cluster/lib/igniter/cluster/plan_action_result.rb +72 -0
  289. data/packages/igniter-cluster/lib/igniter/cluster/plan_execution_report.rb +57 -0
  290. data/packages/igniter-cluster/lib/igniter/cluster/plan_executor.rb +314 -0
  291. data/packages/igniter-cluster/lib/igniter/cluster/policy_admission.rb +18 -0
  292. data/packages/igniter-cluster/lib/igniter/cluster/policy_placement.rb +69 -0
  293. data/packages/igniter-cluster/lib/igniter/cluster/policy_router.rb +70 -0
  294. data/packages/igniter-cluster/lib/igniter/cluster/profile.rb +97 -0
  295. data/packages/igniter-cluster/lib/igniter/cluster/projection_executor.rb +42 -0
  296. data/packages/igniter-cluster/lib/igniter/cluster/projection_policy.rb +107 -0
  297. data/packages/igniter-cluster/lib/igniter/cluster/projection_report.rb +35 -0
  298. data/packages/igniter-cluster/lib/igniter/cluster/projection_stage.rb +32 -0
  299. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_move.rb +30 -0
  300. data/packages/igniter-cluster/lib/igniter/cluster/rebalance_plan.rb +40 -0
  301. data/packages/igniter-cluster/lib/igniter/cluster/recovery_timeline.rb +33 -0
  302. data/packages/igniter-cluster/lib/igniter/cluster/registry_membership_source.rb +97 -0
  303. data/packages/igniter-cluster/lib/igniter/cluster/remediation_plan.rb +45 -0
  304. data/packages/igniter-cluster/lib/igniter/cluster/remediation_policy.rb +119 -0
  305. data/packages/igniter-cluster/lib/igniter/cluster/remediation_step.rb +44 -0
  306. data/packages/igniter-cluster/lib/igniter/cluster/route.rb +34 -0
  307. data/packages/igniter-cluster/lib/igniter/cluster/route_policy.rb +104 -0
  308. data/packages/igniter-cluster/lib/igniter/cluster/route_request.rb +61 -0
  309. data/packages/igniter-cluster/lib/igniter/cluster/topology_policy.rb +154 -0
  310. data/packages/igniter-cluster/lib/igniter/cluster/transport_adapter.rb +53 -0
  311. data/packages/igniter-cluster/lib/igniter/cluster.rb +108 -0
  312. data/packages/igniter-cluster/lib/igniter-cluster.rb +3 -0
  313. data/packages/igniter-contracts/README.md +239 -0
  314. data/packages/igniter-contracts/lib/igniter/contracts/api.rb +92 -0
  315. data/packages/igniter-contracts/lib/igniter/contracts/assembly/baseline_pack.rb +141 -0
  316. data/packages/igniter-contracts/lib/igniter/contracts/assembly/const_pack.rb +29 -0
  317. data/packages/igniter-contracts/lib/igniter/contracts/assembly/dsl_keyword.rb +21 -0
  318. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_result_policies.rb +47 -0
  319. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_spec.rb +73 -0
  320. data/packages/igniter-contracts/lib/igniter/contracts/assembly/hook_specs.rb +74 -0
  321. data/packages/igniter-contracts/lib/igniter/contracts/assembly/kernel.rb +220 -0
  322. data/packages/igniter-contracts/lib/igniter/contracts/assembly/node_type.rb +26 -0
  323. data/packages/igniter-contracts/lib/igniter/contracts/assembly/ordered_registry.rb +55 -0
  324. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack.rb +13 -0
  325. data/packages/igniter-contracts/lib/igniter/contracts/assembly/pack_manifest.rb +131 -0
  326. data/packages/igniter-contracts/lib/igniter/contracts/assembly/path_access.rb +76 -0
  327. data/packages/igniter-contracts/lib/igniter/contracts/assembly/profile.rb +133 -0
  328. data/packages/igniter-contracts/lib/igniter/contracts/assembly/project_pack.rb +42 -0
  329. data/packages/igniter-contracts/lib/igniter/contracts/assembly/registry.rb +57 -0
  330. data/packages/igniter-contracts/lib/igniter/contracts/assembly/step_result_pack.rb +42 -0
  331. data/packages/igniter-contracts/lib/igniter/contracts/assembly.rb +18 -0
  332. data/packages/igniter-contracts/lib/igniter/contracts/contract.rb +135 -0
  333. data/packages/igniter-contracts/lib/igniter/contracts/contractable.rb +288 -0
  334. data/packages/igniter-contracts/lib/igniter/contracts/environment.rb +51 -0
  335. data/packages/igniter-contracts/lib/igniter/contracts/errors.rb +47 -0
  336. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_normalizers.rb +23 -0
  337. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_runtime.rb +55 -0
  338. data/packages/igniter-contracts/lib/igniter/contracts/execution/baseline_validators.rb +113 -0
  339. data/packages/igniter-contracts/lib/igniter/contracts/execution/builder.rb +43 -0
  340. data/packages/igniter-contracts/lib/igniter/contracts/execution/compilation_report.rb +46 -0
  341. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiled_graph.rb +21 -0
  342. data/packages/igniter-contracts/lib/igniter/contracts/execution/compiler.rb +66 -0
  343. data/packages/igniter-contracts/lib/igniter/contracts/execution/const_runtime.rb +15 -0
  344. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics.rb +24 -0
  345. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_report.rb +40 -0
  346. data/packages/igniter-contracts/lib/igniter/contracts/execution/diagnostics_section.rb +37 -0
  347. data/packages/igniter-contracts/lib/igniter/contracts/execution/effect_invocation.rb +26 -0
  348. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_request.rb +28 -0
  349. data/packages/igniter-contracts/lib/igniter/contracts/execution/execution_result.rb +32 -0
  350. data/packages/igniter-contracts/lib/igniter/contracts/execution/inline_executor.rb +19 -0
  351. data/packages/igniter-contracts/lib/igniter/contracts/execution/mutable_named_values.rb +52 -0
  352. data/packages/igniter-contracts/lib/igniter/contracts/execution/named_values.rb +48 -0
  353. data/packages/igniter-contracts/lib/igniter/contracts/execution/operation.rb +42 -0
  354. data/packages/igniter-contracts/lib/igniter/contracts/execution/runtime.rb +43 -0
  355. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result.rb +51 -0
  356. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_diagnostics.rb +35 -0
  357. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_runtime.rb +51 -0
  358. data/packages/igniter-contracts/lib/igniter/contracts/execution/step_result_validators.rb +44 -0
  359. data/packages/igniter-contracts/lib/igniter/contracts/execution/structured_dump.rb +49 -0
  360. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_finding.rb +28 -0
  361. data/packages/igniter-contracts/lib/igniter/contracts/execution/validation_report.rb +46 -0
  362. data/packages/igniter-contracts/lib/igniter/contracts/execution.rb +28 -0
  363. data/packages/igniter-contracts/lib/igniter/contracts.rb +54 -0
  364. data/packages/igniter-contracts/lib/igniter/lang/backend.rb +19 -0
  365. data/packages/igniter-contracts/lib/igniter/lang/backends/ruby.rb +42 -0
  366. data/packages/igniter-contracts/lib/igniter/lang/diagnostic_payload.rb +174 -0
  367. data/packages/igniter-contracts/lib/igniter/lang/metadata_carrier_manifest.rb +112 -0
  368. data/packages/igniter-contracts/lib/igniter/lang/metadata_manifest.rb +128 -0
  369. data/packages/igniter-contracts/lib/igniter/lang/receipt_payload.rb +152 -0
  370. data/packages/igniter-contracts/lib/igniter/lang/schema_compatibility_diagnostic.rb +300 -0
  371. data/packages/igniter-contracts/lib/igniter/lang/types.rb +84 -0
  372. data/packages/igniter-contracts/lib/igniter/lang/verification_report.rb +226 -0
  373. data/packages/igniter-contracts/lib/igniter/lang.rb +27 -0
  374. data/packages/igniter-contracts/lib/igniter-contracts.rb +3 -0
  375. data/packages/igniter-embed/README.md +360 -0
  376. data/packages/igniter-embed/lib/igniter/embed/config.rb +155 -0
  377. data/packages/igniter-embed/lib/igniter/embed/container.rb +165 -0
  378. data/packages/igniter-embed/lib/igniter/embed/contract_handle.rb +23 -0
  379. data/packages/igniter-embed/lib/igniter/embed/contract_naming.rb +38 -0
  380. data/packages/igniter-embed/lib/igniter/embed/contractable/acceptance.rb +52 -0
  381. data/packages/igniter-embed/lib/igniter/embed/contractable/adapters.rb +33 -0
  382. data/packages/igniter-embed/lib/igniter/embed/contractable/config.rb +234 -0
  383. data/packages/igniter-embed/lib/igniter/embed/contractable/runner.rb +393 -0
  384. data/packages/igniter-embed/lib/igniter/embed/contractable/sugar_builder.rb +145 -0
  385. data/packages/igniter-embed/lib/igniter/embed/contractable.rb +29 -0
  386. data/packages/igniter-embed/lib/igniter/embed/contracts_builder.rb +54 -0
  387. data/packages/igniter-embed/lib/igniter/embed/errors.rb +14 -0
  388. data/packages/igniter-embed/lib/igniter/embed/execution_envelope.rb +50 -0
  389. data/packages/igniter-embed/lib/igniter/embed/host_builder.rb +39 -0
  390. data/packages/igniter-embed/lib/igniter/embed/rails.rb +21 -0
  391. data/packages/igniter-embed/lib/igniter/embed/registry.rb +78 -0
  392. data/packages/igniter-embed/lib/igniter/embed/sugar_expansion.rb +152 -0
  393. data/packages/igniter-embed/lib/igniter/embed.rb +38 -0
  394. data/packages/igniter-embed/lib/igniter-embed.rb +3 -0
  395. data/packages/igniter-extensions/README.md +381 -0
  396. data/packages/igniter-extensions/lib/igniter/extensions/contracts/aggregate_pack.rb +103 -0
  397. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/builder.rb +132 -0
  398. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/event.rb +34 -0
  399. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit/snapshot.rb +44 -0
  400. data/packages/igniter-extensions/lib/igniter/extensions/contracts/audit_pack.rb +60 -0
  401. data/packages/igniter-extensions/lib/igniter/extensions/contracts/branch_pack.rb +199 -0
  402. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/declaration.rb +31 -0
  403. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/error.rb +35 -0
  404. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/policy.rb +20 -0
  405. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/report.rb +47 -0
  406. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities/violation.rb +30 -0
  407. data/packages/igniter-extensions/lib/igniter/extensions/contracts/capabilities_pack.rb +146 -0
  408. data/packages/igniter-extensions/lib/igniter/extensions/contracts/collection_pack.rb +212 -0
  409. data/packages/igniter-extensions/lib/igniter/extensions/contracts/commerce_pack.rb +91 -0
  410. data/packages/igniter-extensions/lib/igniter/extensions/contracts/compose_pack.rb +213 -0
  411. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/cache.rb +59 -0
  412. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/content_key.rb +63 -0
  413. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing/declaration.rb +47 -0
  414. data/packages/igniter-extensions/lib/igniter/extensions/contracts/content_addressing_pack.rb +90 -0
  415. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/profile.rb +196 -0
  416. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/report.rb +85 -0
  417. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scaffold.rb +461 -0
  418. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/scope.rb +79 -0
  419. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/wizard.rb +269 -0
  420. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow.rb +189 -0
  421. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/workflow_step.rb +51 -0
  422. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_result.rb +48 -0
  423. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/write_step.rb +63 -0
  424. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator/writer.rb +131 -0
  425. data/packages/igniter-extensions/lib/igniter/extensions/contracts/creator_pack.rb +128 -0
  426. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_operators.rb +119 -0
  427. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/aggregate_state.rb +60 -0
  428. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/builder.rb +66 -0
  429. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/collection_result.rb +70 -0
  430. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/diff.rb +37 -0
  431. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/item_result.rb +44 -0
  432. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/result.rb +58 -0
  433. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/session.rb +173 -0
  434. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow/window_filter.rb +49 -0
  435. data/packages/igniter-extensions/lib/igniter/extensions/contracts/dataflow_pack.rb +66 -0
  436. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_audit.rb +181 -0
  437. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/pack_snapshot.rb +46 -0
  438. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/profile_snapshot.rb +50 -0
  439. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug/report.rb +50 -0
  440. data/packages/igniter-extensions/lib/igniter/extensions/contracts/debug_pack.rb +115 -0
  441. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/divergence.rb +37 -0
  442. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/formatter.rb +85 -0
  443. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/report.rb +83 -0
  444. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential/runner.rb +136 -0
  445. data/packages/igniter-extensions/lib/igniter/extensions/contracts/differential_pack.rb +61 -0
  446. data/packages/igniter-extensions/lib/igniter/extensions/contracts/execution_report_pack.rb +38 -0
  447. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/formatter.rb +60 -0
  448. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/node_state.rb +30 -0
  449. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/result.rb +65 -0
  450. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental/session.rb +146 -0
  451. data/packages/igniter-extensions/lib/igniter/extensions/contracts/incremental_pack.rb +40 -0
  452. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/builder.rb +27 -0
  453. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/cases_report.rb +47 -0
  454. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/error.rb +34 -0
  455. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/invariant.rb +30 -0
  456. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/report.rb +45 -0
  457. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/suite.rb +36 -0
  458. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants/violation.rb +39 -0
  459. data/packages/igniter-extensions/lib/igniter/extensions/contracts/invariants_pack.rb +88 -0
  460. data/packages/igniter-extensions/lib/igniter/extensions/contracts/journal_pack.rb +55 -0
  461. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/formula_pack.rb +185 -0
  462. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/piecewise_pack.rb +166 -0
  463. data/packages/igniter-extensions/lib/igniter/extensions/contracts/language/scale_pack.rb +147 -0
  464. data/packages/igniter-extensions/lib/igniter/extensions/contracts/lookup_pack.rb +50 -0
  465. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/creator_session.rb +105 -0
  466. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_argument.rb +35 -0
  467. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_definition.rb +33 -0
  468. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp/tool_result.rb +28 -0
  469. data/packages/igniter-extensions/lib/igniter/extensions/contracts/mcp_pack.rb +335 -0
  470. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/builder.rb +80 -0
  471. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/lineage.rb +59 -0
  472. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/node_trace.rb +53 -0
  473. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance/text_formatter.rb +62 -0
  474. data/packages/igniter-extensions/lib/igniter/extensions/contracts/provenance_pack.rb +52 -0
  475. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/builder.rb +43 -0
  476. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/dispatch_result.rb +59 -0
  477. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/engine.rb +79 -0
  478. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/event.rb +36 -0
  479. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/matcher.rb +20 -0
  480. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/plan.rb +58 -0
  481. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive/subscription.rb +29 -0
  482. data/packages/igniter-extensions/lib/igniter/extensions/contracts/reactive_pack.rb +169 -0
  483. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation.rb +25 -0
  484. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_record.rb +28 -0
  485. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/compensation_set.rb +47 -0
  486. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/formatter.rb +39 -0
  487. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/result.rb +56 -0
  488. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga/runner.rb +124 -0
  489. data/packages/igniter-extensions/lib/igniter/extensions/contracts/saga_pack.rb +56 -0
  490. data/packages/igniter-extensions/lib/igniter/extensions/contracts.rb +445 -0
  491. data/packages/igniter-extensions/lib/igniter/extensions.rb +6 -0
  492. data/packages/igniter-extensions/lib/igniter-extensions.rb +3 -0
  493. data/packages/igniter-hub/README.md +25 -0
  494. data/packages/igniter-hub/lib/igniter/hub/catalog_entry.rb +35 -0
  495. data/packages/igniter-hub/lib/igniter/hub/local_catalog.rb +51 -0
  496. data/packages/igniter-hub/lib/igniter/hub.rb +16 -0
  497. data/packages/igniter-hub/lib/igniter-hub.rb +3 -0
  498. data/packages/igniter-mcp-adapter/README.md +65 -0
  499. data/packages/igniter-mcp-adapter/exe/igniter-mcp-adapter +6 -0
  500. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/host.rb +226 -0
  501. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter/server.rb +148 -0
  502. data/packages/igniter-mcp-adapter/lib/igniter/mcp/adapter.rb +40 -0
  503. data/packages/igniter-mcp-adapter/lib/igniter-mcp-adapter.rb +5 -0
  504. data/packages/igniter-web/README.md +539 -0
  505. data/packages/igniter-web/lib/igniter/web/api.rb +49 -0
  506. data/packages/igniter-web/lib/igniter/web/application.rb +99 -0
  507. data/packages/igniter-web/lib/igniter/web/application_web_mount.rb +162 -0
  508. data/packages/igniter-web/lib/igniter/web/arbre.rb +41 -0
  509. data/packages/igniter-web/lib/igniter/web/component.rb +103 -0
  510. data/packages/igniter-web/lib/igniter/web/components/view_action_node.rb +38 -0
  511. data/packages/igniter-web/lib/igniter/web/components/view_ask_node.rb +52 -0
  512. data/packages/igniter-web/lib/igniter/web/components/view_chat_node.rb +34 -0
  513. data/packages/igniter-web/lib/igniter/web/components/view_compare_node.rb +41 -0
  514. data/packages/igniter-web/lib/igniter/web/components/view_node.rb +30 -0
  515. data/packages/igniter-web/lib/igniter/web/components/view_screen.rb +34 -0
  516. data/packages/igniter-web/lib/igniter/web/components/view_stream_node.rb +32 -0
  517. data/packages/igniter-web/lib/igniter/web/components/view_zone.rb +26 -0
  518. data/packages/igniter-web/lib/igniter/web/components.rb +10 -0
  519. data/packages/igniter-web/lib/igniter/web/composer.rb +84 -0
  520. data/packages/igniter-web/lib/igniter/web/composition_finding.rb +16 -0
  521. data/packages/igniter-web/lib/igniter/web/composition_policy.rb +88 -0
  522. data/packages/igniter-web/lib/igniter/web/composition_preset.rb +131 -0
  523. data/packages/igniter-web/lib/igniter/web/composition_result.rb +27 -0
  524. data/packages/igniter-web/lib/igniter/web/flow_interaction_adapter.rb +104 -0
  525. data/packages/igniter-web/lib/igniter/web/flow_surface_projection.rb +121 -0
  526. data/packages/igniter-web/lib/igniter/web/interaction_target.rb +50 -0
  527. data/packages/igniter-web/lib/igniter/web/mount_context.rb +80 -0
  528. data/packages/igniter-web/lib/igniter/web/page.rb +110 -0
  529. data/packages/igniter-web/lib/igniter/web/record.rb +54 -0
  530. data/packages/igniter-web/lib/igniter/web/screen_spec.rb +109 -0
  531. data/packages/igniter-web/lib/igniter/web/surface_manifest.rb +370 -0
  532. data/packages/igniter-web/lib/igniter/web/surface_structure.rb +57 -0
  533. data/packages/igniter-web/lib/igniter/web/view_graph.rb +25 -0
  534. data/packages/igniter-web/lib/igniter/web/view_graph_renderer.rb +63 -0
  535. data/packages/igniter-web/lib/igniter/web/view_node.rb +37 -0
  536. data/packages/igniter-web/lib/igniter/web.rb +107 -0
  537. data/packages/igniter-web/lib/igniter-web.rb +3 -0
  538. metadata +547 -308
  539. data/docs/API_V2.md +0 -537
  540. data/docs/APPLICATION_V1.md +0 -253
  541. data/docs/ARCHITECTURE_V2.md +0 -317
  542. data/docs/BACKLOG.md +0 -166
  543. data/docs/BRANCHES_V1.md +0 -213
  544. data/docs/CAPABILITIES_V1.md +0 -207
  545. data/docs/COLLECTIONS_V1.md +0 -303
  546. data/docs/CONSENSUS_V1.md +0 -477
  547. data/docs/CONTENT_ADDRESSING_V1.md +0 -221
  548. data/docs/DATAFLOW_V1.md +0 -274
  549. data/docs/DISTRIBUTED_CONTRACTS_V1.md +0 -493
  550. data/docs/IGNITER_CONCEPTS.md +0 -81
  551. data/docs/LLM_V1.md +0 -335
  552. data/docs/MESH_V1.md +0 -732
  553. data/docs/NODE_CACHE_V1.md +0 -324
  554. data/docs/PATTERNS.md +0 -411
  555. data/docs/PROACTIVE_AGENTS_V1.md +0 -293
  556. data/docs/SERVER_V1.md +0 -512
  557. data/docs/SKILLS_V1.md +0 -213
  558. data/docs/STORE_ADAPTERS.md +0 -154
  559. data/docs/TEMPORAL_V1.md +0 -174
  560. data/docs/TOOLS_V1.md +0 -347
  561. data/docs/TRANSCRIPTION_V1.md +0 -403
  562. data/examples/agents.rb +0 -150
  563. data/examples/async_store.rb +0 -47
  564. data/examples/basic_pricing.rb +0 -27
  565. data/examples/collection.rb +0 -43
  566. data/examples/collection_partial_failure.rb +0 -50
  567. data/examples/composition.rb +0 -39
  568. data/examples/consensus.rb +0 -239
  569. data/examples/dataflow.rb +0 -308
  570. data/examples/diagnostics.rb +0 -28
  571. data/examples/differential.rb +0 -161
  572. data/examples/distributed_server.rb +0 -94
  573. data/examples/distributed_workflow.rb +0 -52
  574. data/examples/effects.rb +0 -184
  575. data/examples/elocal_webhook.rb +0 -1
  576. data/examples/incremental.rb +0 -142
  577. data/examples/invariants.rb +0 -179
  578. data/examples/llm_tools.rb +0 -237
  579. data/examples/marketing_ergonomics.rb +0 -57
  580. data/examples/mesh.rb +0 -239
  581. data/examples/mesh_discovery.rb +0 -267
  582. data/examples/mesh_gossip.rb +0 -162
  583. data/examples/order_pipeline.rb +0 -163
  584. data/examples/provenance.rb +0 -122
  585. data/examples/ringcentral_routing.rb +0 -269
  586. data/examples/saga.rb +0 -110
  587. data/lib/igniter/agent/mailbox.rb +0 -96
  588. data/lib/igniter/agent/message.rb +0 -21
  589. data/lib/igniter/agent/ref.rb +0 -86
  590. data/lib/igniter/agent/runner.rb +0 -129
  591. data/lib/igniter/agent/state_holder.rb +0 -23
  592. data/lib/igniter/agent.rb +0 -155
  593. data/lib/igniter/agents/ai/alert_agent.rb +0 -111
  594. data/lib/igniter/agents/ai/chain_agent.rb +0 -127
  595. data/lib/igniter/agents/ai/critic_agent.rb +0 -163
  596. data/lib/igniter/agents/ai/evaluator_agent.rb +0 -193
  597. data/lib/igniter/agents/ai/evolution_agent.rb +0 -286
  598. data/lib/igniter/agents/ai/health_check_agent.rb +0 -122
  599. data/lib/igniter/agents/ai/observer_agent.rb +0 -184
  600. data/lib/igniter/agents/ai/planner_agent.rb +0 -210
  601. data/lib/igniter/agents/ai/router_agent.rb +0 -131
  602. data/lib/igniter/agents/ai/self_reflection_agent.rb +0 -175
  603. data/lib/igniter/agents/observability/metrics_agent.rb +0 -130
  604. data/lib/igniter/agents/pipeline/batch_processor_agent.rb +0 -131
  605. data/lib/igniter/agents/proactive_agent.rb +0 -208
  606. data/lib/igniter/agents/reliability/retry_agent.rb +0 -99
  607. data/lib/igniter/agents/scheduling/cron_agent.rb +0 -110
  608. data/lib/igniter/agents.rb +0 -56
  609. data/lib/igniter/application/app_config.rb +0 -32
  610. data/lib/igniter/application/autoloader.rb +0 -18
  611. data/lib/igniter/application/generator.rb +0 -157
  612. data/lib/igniter/application/scheduler.rb +0 -109
  613. data/lib/igniter/application/yml_loader.rb +0 -39
  614. data/lib/igniter/application.rb +0 -174
  615. data/lib/igniter/capabilities.rb +0 -68
  616. data/lib/igniter/compiler/compiled_graph.rb +0 -180
  617. data/lib/igniter/compiler/graph_compiler.rb +0 -70
  618. data/lib/igniter/compiler/type_resolver.rb +0 -54
  619. data/lib/igniter/compiler/validation_context.rb +0 -61
  620. data/lib/igniter/compiler/validation_pipeline.rb +0 -32
  621. data/lib/igniter/compiler/validator.rb +0 -19
  622. data/lib/igniter/compiler/validators/await_validator.rb +0 -53
  623. data/lib/igniter/compiler/validators/callable_validator.rb +0 -125
  624. data/lib/igniter/compiler/validators/dependencies_validator.rb +0 -241
  625. data/lib/igniter/compiler/validators/outputs_validator.rb +0 -66
  626. data/lib/igniter/compiler/validators/remote_validator.rb +0 -60
  627. data/lib/igniter/compiler/validators/type_compatibility_validator.rb +0 -84
  628. data/lib/igniter/compiler/validators/uniqueness_validator.rb +0 -60
  629. data/lib/igniter/compiler.rb +0 -20
  630. data/lib/igniter/consensus/cluster.rb +0 -183
  631. data/lib/igniter/consensus/errors.rb +0 -14
  632. data/lib/igniter/consensus/executors.rb +0 -43
  633. data/lib/igniter/consensus/node.rb +0 -320
  634. data/lib/igniter/consensus/read_query.rb +0 -30
  635. data/lib/igniter/consensus/state_machine.rb +0 -58
  636. data/lib/igniter/consensus.rb +0 -58
  637. data/lib/igniter/content_addressing.rb +0 -133
  638. data/lib/igniter/dataflow/aggregate_operators.rb +0 -147
  639. data/lib/igniter/dataflow/aggregate_state.rb +0 -77
  640. data/lib/igniter/dataflow/diff.rb +0 -37
  641. data/lib/igniter/dataflow/diff_state.rb +0 -81
  642. data/lib/igniter/dataflow/incremental_collection_result.rb +0 -39
  643. data/lib/igniter/dataflow/window_filter.rb +0 -48
  644. data/lib/igniter/dataflow.rb +0 -65
  645. data/lib/igniter/diagnostics/auditing/report/console_formatter.rb +0 -80
  646. data/lib/igniter/diagnostics/auditing/report/markdown_formatter.rb +0 -22
  647. data/lib/igniter/diagnostics/introspection/formatters/mermaid_formatter.rb +0 -58
  648. data/lib/igniter/diagnostics/introspection/formatters/text_tree_formatter.rb +0 -44
  649. data/lib/igniter/diagnostics/report.rb +0 -349
  650. data/lib/igniter/diagnostics.rb +0 -8
  651. data/lib/igniter/differential/divergence.rb +0 -29
  652. data/lib/igniter/differential/formatter.rb +0 -96
  653. data/lib/igniter/differential/report.rb +0 -86
  654. data/lib/igniter/differential/runner.rb +0 -130
  655. data/lib/igniter/differential.rb +0 -51
  656. data/lib/igniter/dsl/contract_builder.rb +0 -495
  657. data/lib/igniter/dsl/schema_builder.rb +0 -73
  658. data/lib/igniter/dsl.rb +0 -9
  659. data/lib/igniter/effect.rb +0 -91
  660. data/lib/igniter/effect_registry.rb +0 -78
  661. data/lib/igniter/errors.rb +0 -79
  662. data/lib/igniter/events/bus.rb +0 -44
  663. data/lib/igniter/events/event.rb +0 -82
  664. data/lib/igniter/events.rb +0 -9
  665. data/lib/igniter/execution_report/builder.rb +0 -54
  666. data/lib/igniter/execution_report/formatter.rb +0 -50
  667. data/lib/igniter/execution_report/node_entry.rb +0 -24
  668. data/lib/igniter/execution_report/report.rb +0 -65
  669. data/lib/igniter/execution_report.rb +0 -32
  670. data/lib/igniter/executor.rb +0 -134
  671. data/lib/igniter/executor_registry.rb +0 -44
  672. data/lib/igniter/extensions/auditing/timeline.rb +0 -103
  673. data/lib/igniter/extensions/auditing.rb +0 -10
  674. data/lib/igniter/extensions/capabilities.rb +0 -39
  675. data/lib/igniter/extensions/content_addressing.rb +0 -5
  676. data/lib/igniter/extensions/dataflow.rb +0 -117
  677. data/lib/igniter/extensions/differential.rb +0 -114
  678. data/lib/igniter/extensions/execution_report.rb +0 -27
  679. data/lib/igniter/extensions/incremental.rb +0 -50
  680. data/lib/igniter/extensions/introspection/graph_formatter.rb +0 -103
  681. data/lib/igniter/extensions/introspection/plan_formatter.rb +0 -55
  682. data/lib/igniter/extensions/introspection/runtime_formatter.rb +0 -117
  683. data/lib/igniter/extensions/introspection.rb +0 -12
  684. data/lib/igniter/extensions/invariants.rb +0 -116
  685. data/lib/igniter/extensions/mesh.rb +0 -31
  686. data/lib/igniter/extensions/provenance.rb +0 -45
  687. data/lib/igniter/extensions/reactive/engine.rb +0 -83
  688. data/lib/igniter/extensions/reactive/matcher.rb +0 -21
  689. data/lib/igniter/extensions/reactive/reaction.rb +0 -18
  690. data/lib/igniter/extensions/reactive.rb +0 -12
  691. data/lib/igniter/extensions/saga.rb +0 -74
  692. data/lib/igniter/extensions.rb +0 -10
  693. data/lib/igniter/fingerprint.rb +0 -43
  694. data/lib/igniter/incremental/formatter.rb +0 -81
  695. data/lib/igniter/incremental/result.rb +0 -69
  696. data/lib/igniter/incremental/tracker.rb +0 -108
  697. data/lib/igniter/incremental.rb +0 -50
  698. data/lib/igniter/integrations/agents.rb +0 -18
  699. data/lib/igniter/integrations/llm/config.rb +0 -113
  700. data/lib/igniter/integrations/llm/context.rb +0 -74
  701. data/lib/igniter/integrations/llm/executor.rb +0 -352
  702. data/lib/igniter/integrations/llm/providers/anthropic.rb +0 -181
  703. data/lib/igniter/integrations/llm/providers/base.rb +0 -33
  704. data/lib/igniter/integrations/llm/providers/ollama.rb +0 -137
  705. data/lib/igniter/integrations/llm/providers/openai.rb +0 -182
  706. data/lib/igniter/integrations/llm/transcription/providers/assemblyai.rb +0 -200
  707. data/lib/igniter/integrations/llm/transcription/providers/base.rb +0 -122
  708. data/lib/igniter/integrations/llm/transcription/providers/deepgram.rb +0 -162
  709. data/lib/igniter/integrations/llm/transcription/providers/openai.rb +0 -102
  710. data/lib/igniter/integrations/llm/transcription/transcriber.rb +0 -145
  711. data/lib/igniter/integrations/llm/transcription/transcript_result.rb +0 -29
  712. data/lib/igniter/integrations/llm.rb +0 -95
  713. data/lib/igniter/integrations/rails/cable_adapter.rb +0 -49
  714. data/lib/igniter/integrations/rails/contract_job.rb +0 -76
  715. data/lib/igniter/integrations/rails/generators/contract/contract_generator.rb +0 -22
  716. data/lib/igniter/integrations/rails/generators/install/install_generator.rb +0 -33
  717. data/lib/igniter/integrations/rails/railtie.rb +0 -25
  718. data/lib/igniter/integrations/rails/webhook_concern.rb +0 -49
  719. data/lib/igniter/integrations/rails.rb +0 -12
  720. data/lib/igniter/invariant.rb +0 -50
  721. data/lib/igniter/memory/agent_memory.rb +0 -104
  722. data/lib/igniter/memory/episode.rb +0 -29
  723. data/lib/igniter/memory/fact.rb +0 -27
  724. data/lib/igniter/memory/memorable.rb +0 -90
  725. data/lib/igniter/memory/reflection_cycle.rb +0 -96
  726. data/lib/igniter/memory/reflection_record.rb +0 -28
  727. data/lib/igniter/memory/store.rb +0 -115
  728. data/lib/igniter/memory/stores/in_memory.rb +0 -136
  729. data/lib/igniter/memory/stores/sqlite.rb +0 -284
  730. data/lib/igniter/memory.rb +0 -80
  731. data/lib/igniter/mesh/announcer.rb +0 -55
  732. data/lib/igniter/mesh/config.rb +0 -45
  733. data/lib/igniter/mesh/discovery.rb +0 -39
  734. data/lib/igniter/mesh/errors.rb +0 -31
  735. data/lib/igniter/mesh/gossip.rb +0 -47
  736. data/lib/igniter/mesh/peer.rb +0 -21
  737. data/lib/igniter/mesh/peer_registry.rb +0 -51
  738. data/lib/igniter/mesh/poller.rb +0 -77
  739. data/lib/igniter/mesh/router.rb +0 -109
  740. data/lib/igniter/mesh.rb +0 -85
  741. data/lib/igniter/metrics/collector.rb +0 -131
  742. data/lib/igniter/metrics/prometheus_exporter.rb +0 -104
  743. data/lib/igniter/metrics/snapshot.rb +0 -8
  744. data/lib/igniter/metrics.rb +0 -37
  745. data/lib/igniter/model/aggregate_node.rb +0 -34
  746. data/lib/igniter/model/await_node.rb +0 -21
  747. data/lib/igniter/model/branch_node.rb +0 -46
  748. data/lib/igniter/model/collection_node.rb +0 -32
  749. data/lib/igniter/model/composition_node.rb +0 -22
  750. data/lib/igniter/model/compute_node.rb +0 -90
  751. data/lib/igniter/model/effect_node.rb +0 -37
  752. data/lib/igniter/model/graph.rb +0 -15
  753. data/lib/igniter/model/input_node.rb +0 -27
  754. data/lib/igniter/model/node.rb +0 -22
  755. data/lib/igniter/model/output_node.rb +0 -41
  756. data/lib/igniter/model/remote_node.rb +0 -42
  757. data/lib/igniter/model.rb +0 -18
  758. data/lib/igniter/node_cache.rb +0 -231
  759. data/lib/igniter/property_testing/formatter.rb +0 -66
  760. data/lib/igniter/property_testing/generators.rb +0 -115
  761. data/lib/igniter/property_testing/result.rb +0 -45
  762. data/lib/igniter/property_testing/run.rb +0 -43
  763. data/lib/igniter/property_testing/runner.rb +0 -47
  764. data/lib/igniter/property_testing.rb +0 -64
  765. data/lib/igniter/provenance/builder.rb +0 -97
  766. data/lib/igniter/provenance/lineage.rb +0 -82
  767. data/lib/igniter/provenance/node_trace.rb +0 -65
  768. data/lib/igniter/provenance/text_formatter.rb +0 -70
  769. data/lib/igniter/provenance.rb +0 -29
  770. data/lib/igniter/registry.rb +0 -67
  771. data/lib/igniter/replication/bootstrapper.rb +0 -61
  772. data/lib/igniter/replication/bootstrappers/gem.rb +0 -32
  773. data/lib/igniter/replication/bootstrappers/git.rb +0 -39
  774. data/lib/igniter/replication/bootstrappers/tarball.rb +0 -56
  775. data/lib/igniter/replication/expansion_plan.rb +0 -38
  776. data/lib/igniter/replication/expansion_planner.rb +0 -142
  777. data/lib/igniter/replication/manifest.rb +0 -45
  778. data/lib/igniter/replication/network_topology.rb +0 -123
  779. data/lib/igniter/replication/node_role.rb +0 -42
  780. data/lib/igniter/replication/reflective_replication_agent.rb +0 -238
  781. data/lib/igniter/replication/replication_agent.rb +0 -87
  782. data/lib/igniter/replication/role_registry.rb +0 -73
  783. data/lib/igniter/replication/ssh_session.rb +0 -77
  784. data/lib/igniter/replication.rb +0 -54
  785. data/lib/igniter/runtime/cache.rb +0 -126
  786. data/lib/igniter/runtime/collection_result.rb +0 -111
  787. data/lib/igniter/runtime/deferred_result.rb +0 -40
  788. data/lib/igniter/runtime/execution.rb +0 -416
  789. data/lib/igniter/runtime/input_validator.rb +0 -129
  790. data/lib/igniter/runtime/invalidator.rb +0 -52
  791. data/lib/igniter/runtime/job_worker.rb +0 -18
  792. data/lib/igniter/runtime/node_state.rb +0 -56
  793. data/lib/igniter/runtime/planner.rb +0 -126
  794. data/lib/igniter/runtime/resolver.rb +0 -758
  795. data/lib/igniter/runtime/result.rb +0 -117
  796. data/lib/igniter/runtime/runner_factory.rb +0 -20
  797. data/lib/igniter/runtime/runners/inline_runner.rb +0 -21
  798. data/lib/igniter/runtime/runners/store_runner.rb +0 -29
  799. data/lib/igniter/runtime/runners/thread_pool_runner.rb +0 -37
  800. data/lib/igniter/runtime/stores/active_record_store.rb +0 -53
  801. data/lib/igniter/runtime/stores/file_store.rb +0 -91
  802. data/lib/igniter/runtime/stores/memory_store.rb +0 -93
  803. data/lib/igniter/runtime/stores/redis_store.rb +0 -93
  804. data/lib/igniter/runtime.rb +0 -26
  805. data/lib/igniter/saga/compensation.rb +0 -31
  806. data/lib/igniter/saga/compensation_record.rb +0 -20
  807. data/lib/igniter/saga/executor.rb +0 -85
  808. data/lib/igniter/saga/formatter.rb +0 -49
  809. data/lib/igniter/saga/result.rb +0 -47
  810. data/lib/igniter/saga.rb +0 -56
  811. data/lib/igniter/server/client.rb +0 -166
  812. data/lib/igniter/server/config.rb +0 -34
  813. data/lib/igniter/server/handlers/base.rb +0 -105
  814. data/lib/igniter/server/handlers/contracts_handler.rb +0 -15
  815. data/lib/igniter/server/handlers/event_handler.rb +0 -32
  816. data/lib/igniter/server/handlers/execute_handler.rb +0 -43
  817. data/lib/igniter/server/handlers/health_handler.rb +0 -32
  818. data/lib/igniter/server/handlers/liveness_handler.rb +0 -20
  819. data/lib/igniter/server/handlers/manifest_handler.rb +0 -34
  820. data/lib/igniter/server/handlers/metrics_handler.rb +0 -51
  821. data/lib/igniter/server/handlers/peers_handler.rb +0 -115
  822. data/lib/igniter/server/handlers/readiness_handler.rb +0 -47
  823. data/lib/igniter/server/handlers/status_handler.rb +0 -27
  824. data/lib/igniter/server/http_server.rb +0 -146
  825. data/lib/igniter/server/rack_app.rb +0 -35
  826. data/lib/igniter/server/registry.rb +0 -56
  827. data/lib/igniter/server/router.rb +0 -108
  828. data/lib/igniter/server/server_logger.rb +0 -52
  829. data/lib/igniter/server.rb +0 -73
  830. data/lib/igniter/skill/feedback.rb +0 -116
  831. data/lib/igniter/skill/output_schema.rb +0 -110
  832. data/lib/igniter/skill.rb +0 -218
  833. data/lib/igniter/stream_loop.rb +0 -80
  834. data/lib/igniter/supervisor.rb +0 -167
  835. data/lib/igniter/temporal.rb +0 -84
  836. data/lib/igniter/tool/discoverable.rb +0 -151
  837. data/lib/igniter/tool.rb +0 -52
  838. data/lib/igniter/tool_registry.rb +0 -144
  839. data/lib/igniter/type_system.rb +0 -44
  840. /data/docs/{EXECUTION_MODEL_V2.md → dev/execution-model.md} +0 -0
data/README.md CHANGED
@@ -1,724 +1,216 @@
1
1
  # Igniter
2
2
 
3
- Igniter is a Ruby gem for expressing business logic as a validated dependency graph and executing that graph with:
4
-
5
- - lazy output resolution and selective cache invalidation
6
- - typed input validation with defaults and required fields
7
- - nested contract composition with isolated child executions
8
- - declarative routing (`branch`) and fan-out (`collection`)
9
- - distributed workflows: `await` events across process boundaries
10
- - multi-node deployments via `igniter-server` and the `remote:` DSL
11
- - LLM compute nodes with Ollama, Anthropic, and OpenAI providers
12
- - Rails integration: ActiveJob, ActionCable, webhook handlers, generators
13
- - runtime auditing, diagnostics reports, and reactive side effects
14
- - graph and runtime introspection (text, Mermaid)
15
- - ergonomic DSL helpers: `const`, `lookup`, `map`, `project`, `aggregate`, `guard`, `export`, `expose`, `effect`, `on_success`, `scope`, `namespace`
16
- - `Igniter::Application` — application scaffold with YAML config, autoloading, scheduler, and `igniter-server new` generator
17
- - capability-based security: declare executor resource requirements, enforce `Policy` at runtime
18
- - temporal contracts: reproducible historical execution via an explicit `as_of` time input
19
- - content-addressed computation: `pure` executors cached by input fingerprint across executions and processes
20
-
21
- ## Installation
3
+ Igniter is a pre-v1 Ruby framework for building contracts-native applications,
4
+ companions, and agent-aware systems.
22
5
 
23
- ```ruby
24
- gem "igniter"
25
- ```
26
-
27
- ## Quick Start
28
-
29
- ```ruby
30
- require "igniter"
31
-
32
- class PriceContract < Igniter::Contract
33
- define do
34
- input :order_total, type: :numeric
35
- input :country, type: :string
36
- input :vat_rate, type: :numeric, default: 0.2
37
-
38
- compute :effective_vat_rate, depends_on: %i[country vat_rate] do |country:, vat_rate:|
39
- country == "UA" ? vat_rate : 0.0
40
- end
41
-
42
- compute :gross_total, depends_on: %i[order_total effective_vat_rate] do |order_total:, effective_vat_rate:|
43
- order_total * (1 + effective_vat_rate)
44
- end
45
-
46
- output :gross_total
47
- end
48
- end
49
-
50
- contract = PriceContract.new(order_total: 100, country: "UA")
51
- contract.result.gross_total # => 120.0
52
-
53
- contract.update_inputs(order_total: 150)
54
- contract.result.gross_total # => 180.0
55
-
56
- contract.diagnostics_text # compact execution summary
57
- ```
58
-
59
- ## Features
60
-
61
- - **Contracts**: declare inputs, compute nodes, outputs, and compositions in a validated graph.
62
- - **Compiler**: validate dependency graphs, types, and cycles before runtime; errors are surfaced at load time.
63
- - **Runtime**: cache resolved nodes and invalidate only affected downstream nodes on input change.
64
- - **Typed inputs**: validate types, defaults, and required fields at execution boundaries.
65
- - **Composition**: execute nested contracts with isolated child executions.
66
- - **Branch**: declarative routing — select one child contract from ordered cases at runtime.
67
- - **Collection**: declarative fan-out — run one child contract per item in an array.
68
- - **Distributed workflows**: `await` external events; resume via `deliver_event`.
69
- - **igniter-server**: host contracts as a TCP/Rack HTTP service; call remote contracts with the `remote:` DSL.
70
- - **LLM integration**: compute nodes powered by Ollama, Anthropic, or OpenAI providers.
71
- - **Rails integration**: Railtie, ActiveJob base class, ActionCable adapter, webhook controller mixin.
72
- - **Auditing**: collect execution timelines and snapshots.
73
- - **Diagnostics**: compact text, Markdown, or structured reports for triage.
74
- - **Reactive**: subscribe declaratively to runtime events with `effect`, `on_success`, `on_failure`.
75
- - **Introspection**: render graphs as text or Mermaid; inspect runtime state.
76
- - **Capabilities**: executors declare what resources they need (`:network`, `:database`, …); `Policy` denies them at runtime.
77
- - **Temporal contracts**: inject `as_of` time input automatically; replay any historical computation with the original timestamp.
78
- - **Content addressing**: `pure` executors get a universal cache key — identical inputs return a cached result across executions, processes, and deployments.
79
- - **Incremental dataflow**: `mode: :incremental` on collection nodes — only added/changed items run, unchanged items reuse cached results, removed items are retracted. O(change) not O(total).
80
-
81
- ## Quick Start Recipes
82
-
83
- Runnable examples live in [`examples/`](examples) and are smoke-tested by `spec/igniter/example_scripts_spec.rb`.
84
- See [`examples/README.md`](examples/README.md) for a quick index and [`docs/PATTERNS.md`](docs/PATTERNS.md) for composable patterns.
85
-
86
- ### 1. Basic Pricing Contract
87
-
88
- ```ruby
89
- class PriceContract < Igniter::Contract
90
- define do
91
- input :order_total, type: :numeric
92
- input :country, type: :string
93
-
94
- compute :vat_rate, depends_on: [:country] do |country:|
95
- country == "UA" ? 0.2 : 0.0
96
- end
97
-
98
- compute :gross_total, depends_on: %i[order_total vat_rate] do |order_total:, vat_rate:|
99
- order_total * (1 + vat_rate)
100
- end
101
-
102
- output :gross_total
103
- end
104
- end
105
-
106
- PriceContract.new(order_total: 100, country: "UA").result.gross_total
107
- # => 120.0
108
- ```
109
-
110
- ### 2. Nested Composition
111
-
112
- ```ruby
113
- class CheckoutContract < Igniter::Contract
114
- define do
115
- input :order_total, type: :numeric
116
- input :country, type: :string
117
-
118
- compose :pricing, contract: PriceContract, inputs: {
119
- order_total: :order_total,
120
- country: :country
121
- }
122
-
123
- output :pricing
124
- end
125
- end
126
-
127
- CheckoutContract.new(order_total: 100, country: "UA").result.pricing.gross_total
128
- # => 120.0
129
- ```
130
-
131
- ### 3. Diagnostics and Introspection
132
-
133
- ```ruby
134
- contract = PriceContract.new(order_total: 100, country: "UA")
135
- contract.result.gross_total
136
-
137
- contract.result.states
138
- contract.result.explain(:gross_total)
139
- contract.diagnostics.to_h
140
- contract.diagnostics_text
141
- contract.diagnostics_markdown
142
- contract.audit_snapshot
143
-
144
- PriceContract.graph.to_text
145
- PriceContract.graph.to_mermaid
146
- ```
147
-
148
- ### 4. Machine-Readable Data
149
-
150
- ```ruby
151
- contract.result.to_h # => { gross_total: 120.0 }
152
- contract.result.as_json
153
- contract.execution.as_json
154
- contract.events.map(&:as_json)
155
- ```
156
-
157
- ### 5. Async Store and Resume
158
-
159
- ```ruby
160
- class AsyncQuoteExecutor < Igniter::Executor
161
- def call(order_total:)
162
- defer(token: "quote-#{order_total}", payload: { kind: "pricing_quote" })
163
- end
164
- end
165
-
166
- class AsyncPricingContract < Igniter::Contract
167
- run_with runner: :store
168
-
169
- define do
170
- input :order_total, type: :numeric
171
- compute :quote_total, depends_on: [:order_total], call: AsyncQuoteExecutor
172
- compute :gross_total, depends_on: [:quote_total] do |quote_total:|
173
- quote_total * 1.2
174
- end
175
- output :gross_total
176
- end
177
- end
178
-
179
- contract = AsyncPricingContract.new(order_total: 100)
180
- deferred = contract.result.gross_total
181
- execution_id = contract.execution.events.execution_id
182
-
183
- resumed = AsyncPricingContract.resume_from_store(
184
- execution_id, token: deferred.token, value: 150
185
- )
186
- resumed.result.gross_total # => 180.0
187
- ```
188
-
189
- ### 6. Ergonomic DSL
190
-
191
- ```ruby
192
- class MarketingQuoteContract < Igniter::Contract
193
- define do
194
- input :service, type: :string
195
- input :zip_code, type: :string
196
-
197
- const :vendor_id, "eLocal"
198
-
199
- scope :routing do
200
- map :trade_name, from: :service do |service:|
201
- %w[heating cooling ventilation].include?(service.downcase) ? "HVAC" : service
202
- end
203
- end
204
-
205
- scope :pricing do
206
- lookup :trade, with: :trade_name do |trade_name:|
207
- { name: trade_name, base_bid: 45.0 }
208
- end
209
- end
210
-
211
- namespace :validation do
212
- guard :zip_supported, with: :zip_code, in: %w[60601 10001], message: "Unsupported zip"
213
- end
214
-
215
- compute :quote, with: %i[vendor_id trade zip_code zip_supported] do |vendor_id:, trade:, zip_code:, zip_supported:|
216
- zip_supported
217
- { vendor_id: vendor_id, trade: trade[:name], zip_code: zip_code, bid: trade[:base_bid] }
218
- end
219
-
220
- expose :quote, as: :response
221
- end
222
-
223
- on_success :response do |value:, **|
224
- puts "Persist #{value.inspect}"
225
- end
226
- end
227
- ```
228
-
229
- Matcher-style guard shortcuts:
230
-
231
- ```ruby
232
- guard :usa_only, with: :country_code, eq: "USA", message: "Unsupported country"
233
- guard :supported_country, with: :country_code, in: %w[USA CAN], message: "Unsupported country"
234
- guard :valid_zip, with: :zip_code, matches: /\A\d{5}\z/, message: "Invalid zip"
235
- ```
236
-
237
- ### 7. Declarative Branching
238
-
239
- ```ruby
240
- class DeliveryContract < Igniter::Contract
241
- define do
242
- input :country
243
- input :order_total
244
-
245
- branch :delivery_strategy, with: :country, inputs: {
246
- country: :country,
247
- order_total: :order_total
248
- } do
249
- on "US", contract: USDeliveryContract
250
- on "UA", contract: LocalDeliveryContract
251
- default contract: DefaultDeliveryContract
252
- end
253
-
254
- export :price, :eta, from: :delivery_strategy
255
- end
256
- end
257
- ```
258
-
259
- ### 8. Declarative Collections
260
-
261
- ```ruby
262
- class TechnicianBatchContract < Igniter::Contract
263
- define do
264
- input :technician_inputs, type: :array
265
-
266
- collection :technicians,
267
- with: :technician_inputs,
268
- each: TechnicianContract,
269
- key: :technician_id,
270
- mode: :collect
271
-
272
- output :technicians
273
- end
274
- end
275
- ```
276
-
277
- In `mode: :collect`, an execution succeeds overall while items may individually fail:
278
-
279
- - `result.summary` — collection-level status (`:partial_failure` when any item failed)
280
- - `result.items_summary` — compact per-item status hash
281
- - `result.failed_items` — failed-item error details
282
- - `result.successes` — hash of succeeded items only
283
-
284
- See [`examples/collection_partial_failure.rb`](examples/collection_partial_failure.rb).
285
-
286
- ### 9. Distributed Contracts
287
-
288
- Use `await` to suspend execution until an external event arrives. `correlate_by` identifies
289
- which execution should receive the event, so events can be delivered from any process:
6
+ At the center is a small contract graph kernel: validated inputs, computations,
7
+ effects, outputs, diagnostics, and execution plans. Around that kernel Igniter is
8
+ growing into a platform for:
290
9
 
291
- ```ruby
292
- class LeadWorkflow < Igniter::Contract
293
- correlate_by :request_id
294
-
295
- define do
296
- input :request_id
297
-
298
- await :crm_data, event: :crm_received
299
- await :billing_data, event: :billing_received
300
-
301
- aggregate :report, with: %i[crm_data billing_data] do |crm_data:, billing_data:|
302
- { crm: crm_data, billing: billing_data }
303
- end
304
-
305
- output :report
306
- end
307
-
308
- on_success :report do |value:, **|
309
- puts "Report ready: #{value.inspect}"
310
- end
311
- end
312
-
313
- store = Igniter::Runtime::Stores::MemoryStore.new
314
-
315
- # Launch — suspends waiting for both events
316
- execution = LeadWorkflow.start({ request_id: "r1" }, store: store)
317
- execution.pending? # => true
10
+ - embedding contract behavior into existing applications
11
+ - observing and shadowing legacy services without changing production responses
12
+ - storing immutable facts, histories, receipts, and replayable decisions
13
+ - building companion apps beside existing systems of record
14
+ - exposing operator surfaces, streams, MCP tools, and eventually cluster peers
15
+ - giving AI agents evidence, receipts, and approval boundaries before authority
318
16
 
319
- # Deliver events from any process or webhook handler
320
- LeadWorkflow.deliver_event(:crm_received,
321
- correlation: { request_id: "r1" },
322
- payload: { company: "Acme Corp", tier: "enterprise" },
323
- store: store)
17
+ The short version:
324
18
 
325
- LeadWorkflow.deliver_event(:billing_received,
326
- correlation: { request_id: "r1" },
327
- payload: { mrr: 500 },
328
- store: store)
329
- # => prints "Report ready: { crm: ..., billing: ... }"
19
+ ```text
20
+ Contracts
21
+ -> Embed migration bridge
22
+ -> Store / Ledger facts and receipts
23
+ -> Ledger Client protocol boundary
24
+ -> Companion typed Record/History facade
25
+ -> Application + Web operator surfaces
26
+ -> Agents / AI / Cluster / Hub runtime lanes
330
27
  ```
331
28
 
332
- See [`examples/distributed_server.rb`](examples/distributed_server.rb) and [`docs/DISTRIBUTED_CONTRACTS_V1.md`](docs/DISTRIBUTED_CONTRACTS_V1.md).
29
+ ## Status
333
30
 
334
- ### 10. igniter-server
31
+ Igniter is pre-v1. There is no backward-compatibility promise and no stable
32
+ public API guarantee yet. That is intentional: weak shapes should still be
33
+ replaced quickly while the better architecture is visible.
335
34
 
336
- Host contracts as an HTTP service and call them from another graph with the `remote:` DSL:
35
+ The project is now large enough to be treated as a framework/platform, but its
36
+ surface is still being actively shaped by real application pressure. Current
37
+ proofs are strongest in:
337
38
 
338
- ```ruby
339
- # --- Service node on port 4568 ---
340
- require "igniter/server"
341
-
342
- class ScoringContract < Igniter::Contract
343
- define do
344
- input :value
345
- compute :score, depends_on: :value, call: ->(value:) { value * 1.5 }
346
- output :score
347
- end
348
- end
39
+ - contract graph authoring and execution
40
+ - host-local embedding and contractable shadowing
41
+ - Store/Ledger facts, WAL, replay, changefeeds, compaction activity, and
42
+ read-only protocol surfaces
43
+ - application/web package structure and operator-oriented surfaces
44
+ - early agents, AI, hub, and cluster package lanes
349
45
 
350
- Igniter::Server.configure { |c| c.port = 4568; c.register "ScoringContract", ScoringContract }
351
- Igniter::Server.start
46
+ Use package READMEs, runnable examples, and track docs to evaluate current
47
+ capability. Production-grade guarantees and compatibility policy belong after
48
+ v1.
352
49
 
353
- # --- Orchestrator on port 4567 ---
354
- require "igniter/server"
50
+ ## Platform Lanes
355
51
 
356
- class PipelineContract < Igniter::Contract
357
- define do
358
- input :data
359
- remote :scored,
360
- contract: "ScoringContract",
361
- node: "http://localhost:4568",
362
- inputs: { value: :data }
363
- output :scored
364
- end
365
- end
52
+ ### `igniter-contracts`
366
53
 
367
- Igniter::Server.configure { |c| c.port = 4567; c.register "PipelineContract", PipelineContract }
368
- Igniter::Server.start
369
- ```
54
+ The kernel: DSL authoring, graph compilation, runtime execution, diagnostics,
55
+ effects, and the core `Contractable` service protocol used inside contracts.
370
56
 
371
- **CLI:**
57
+ ### `igniter-embed`
372
58
 
373
- ```bash
374
- # Generate a new application scaffold
375
- igniter-server new my_app
59
+ The migration bridge for existing applications. It registers host-local
60
+ contracts and wraps opaque services with `contractable` observation/shadowing:
376
61
 
377
- # Start a server directly
378
- igniter-server start --port 4568 --require ./contracts.rb
62
+ ```text
63
+ legacy primary result
64
+ -> returned unchanged
65
+ -> optional candidate/shadow execution
66
+ -> normalized comparison
67
+ -> observation / divergence receipts
379
68
  ```
380
69
 
381
- **Rack / Puma (`config.ru`):**
382
-
383
- ```ruby
384
- require "igniter/server"
385
- require_relative "contracts"
386
- Igniter::Server.configure { |c| c.register "ScoringContract", ScoringContract }
387
- run Igniter::Server.rack_app
388
- ```
389
-
390
- **REST API:**
391
-
392
- | Method | Path | Description |
393
- |--------|------|-------------|
394
- | `POST` | `/v1/contracts/:name/execute` | Execute a contract synchronously |
395
- | `POST` | `/v1/contracts/:name/events` | Deliver an event to a distributed contract |
396
- | `GET` | `/v1/executions/:id` | Poll execution status |
397
- | `GET` | `/v1/health` | Health check with registered contracts list |
398
- | `GET` | `/v1/contracts` | List contracts with inputs and outputs |
70
+ This is the safest first path for Rails and other host apps.
399
71
 
400
- See [`docs/SERVER_V1.md`](docs/SERVER_V1.md) for the full API reference, deployment patterns, and security notes.
72
+ ### `igniter-ledger`
401
73
 
402
- ### 11. LLM Integration
74
+ The Ledger substrate: immutable facts, `Store[T]` and `History[T]` experiments,
75
+ causation, current/time-travel reads, access paths, WAL durability, changefeed,
76
+ Ledger Open Protocol, LedgerServer, compaction lifecycle, and intelligent-ledger
77
+ boundary proofs.
403
78
 
404
- Use language models as first-class compute nodes. Supported providers: Ollama (local, zero API cost),
405
- Anthropic (Claude), OpenAI (and compatible APIs: Groq, Mistral, Azure OpenAI):
79
+ It is still a POC package, but it is no longer just "persistence research"; it
80
+ is the event memory and receipt substrate for companion systems.
406
81
 
407
- ```ruby
408
- require "igniter/integrations/llm"
82
+ ### `igniter-ledger-client`
409
83
 
410
- Igniter::LLM.configure do |c|
411
- c.default_provider = :anthropic
412
- c.anthropic.api_key = ENV["ANTHROPIC_API_KEY"]
413
- end
84
+ The protocol-first client boundary for Ledger users. It owns request/response
85
+ envelopes, transports, errors, and future pooling/retry/backpressure policy
86
+ without embedding the storage engine.
414
87
 
415
- class ClassifyExecutor < Igniter::LLM::Executor
416
- provider :anthropic
417
- model "claude-haiku-4-5-20251001"
418
- system_prompt "Classify feedback into: bug_report, feature_request, question."
88
+ ### `igniter-companion`
419
89
 
420
- def call(feedback:)
421
- complete("Classify: #{feedback}")
422
- end
423
- end
90
+ Typed application-facing `Record` / `History` facade over `igniter-ledger`.
91
+ It turns raw facts into ergonomic app objects while applying pressure back onto
92
+ Store capabilities such as scopes, partitions, receipts, manifests, and typed
93
+ storage semantics.
424
94
 
425
- class DraftResponseExecutor < Igniter::LLM::Executor
426
- provider :anthropic
427
- model "claude-haiku-4-5-20251001"
428
- system_prompt "You are a customer success agent. Write one professional response sentence."
95
+ ### `igniter-application`
429
96
 
430
- def call(feedback:, category:)
431
- complete("Feedback: #{feedback}\nCategory: #{category}\nDraft a response.")
432
- end
433
- end
97
+ Contracts-native application runtime: app manifests, providers, services,
98
+ credentials, agents, sessions, snapshots, boot/shutdown plans, and embedded host
99
+ activation paths.
434
100
 
435
- class FeedbackTriageContract < Igniter::Contract
436
- define do
437
- input :feedback
101
+ ### `igniter-web`
438
102
 
439
- compute :category, depends_on: :feedback, with: ClassifyExecutor
440
- compute :response, depends_on: %i[feedback category], with: DraftResponseExecutor
103
+ Operator and interaction surfaces: receipt/report views, event streams,
104
+ dashboards, human approval gates, investigation workspaces, and app-local web
105
+ mounts. It is not trying to replace a Rails admin UI.
441
106
 
442
- output :category
443
- output :response
444
- end
445
- end
446
- ```
107
+ ### `igniter-agents` and `igniter-ai`
447
108
 
448
- Multi-step reasoning with conversation history:
109
+ Agent and AI runtime lanes: runs, turns, traces, serializable state, provider
110
+ registration, and the promotion ladder from observe-only to human-approved
111
+ authority.
449
112
 
450
- ```ruby
451
- class MultiStepExecutor < Igniter::LLM::Executor
452
- def call(text:, prior_analysis:)
453
- ctx = Context.empty(system: self.class.system_prompt)
454
- .append_user("Initial: #{text}")
455
- .append_assistant(prior_analysis)
456
- chat(context: ctx)
457
- end
458
- end
459
- ```
113
+ ### `igniter-cluster` and `igniter-hub`
460
114
 
461
- See [`examples/llm/research_agent.rb`](examples/llm/research_agent.rb), [`examples/llm/tool_use.rb`](examples/llm/tool_use.rb), and [`docs/LLM_V1.md`](docs/LLM_V1.md).
115
+ Distributed and sync lanes: capability-aware peers, ownership, leases, health,
116
+ failover, admission/trust, and hub-style synchronization. These should emerge
117
+ from real partitioned domains rather than "distributed everything".
462
118
 
463
- ### 12. Igniter::Application
119
+ ### `igniter-mcp-adapter`
464
120
 
465
- Package contracts, executors, scheduler, and server config into a single coherent entry point:
121
+ Transport-facing MCP surface for exposing tools, protocol reads, and operator
122
+ introspection.
466
123
 
467
- ```bash
468
- # Scaffold a new application
469
- igniter-server new my_app
470
- cd my_app && bundle install && bin/start
471
- ```
124
+ ## Small Contract Example
472
125
 
473
126
  ```ruby
474
- require "igniter/application"
475
-
476
- class MyApp < Igniter::Application
477
- config_file "application.yml" # optional YAML base config
478
-
479
- configure do |c|
480
- c.port = ENV.fetch("PORT", 4567).to_i
481
- c.store = Igniter::Runtime::Stores::MemoryStore.new
482
- end
483
-
484
- executors_path "executors/" # eager-require all executors
485
- contracts_path "contracts/" # eager-require all contracts
127
+ require "igniter"
486
128
 
487
- register "OrderContract", OrderContract
129
+ environment = Igniter.with
488
130
 
489
- schedule :cleanup, every: "1h" do
490
- puts "[cleanup] #{Time.now.strftime("%H:%M")}"
491
- end
131
+ result = environment.run(inputs: { order_total: 100, country: "UA" }) do
132
+ input :order_total
133
+ input :country
492
134
 
493
- schedule :report, every: "1d", at: "09:00" do
494
- DailyReportContract.new.resolve_all(date: Date.today)
135
+ compute :vat_rate, depends_on: [:country] do |country:|
136
+ country == "UA" ? 0.2 : 0.0
495
137
  end
496
- end
497
-
498
- MyApp.start # blocking built-in HTTP server
499
- # or
500
- MyApp.rack_app # Rack app for Puma / Unicorn
501
- ```
502
-
503
- **`application.yml`** — base config loaded before the `configure` block (block always wins):
504
-
505
- ```yaml
506
- server:
507
- port: 4567
508
- host: "0.0.0.0"
509
- log_format: json # text (default) or json
510
- drain_timeout: 30
511
- ```
512
-
513
- **Scheduler interval formats:** `30` (seconds), `"30s"`, `"5m"`, `"2h"`, `"1d"`, `{ hours: 1, minutes: 30 }`
514
-
515
- See [`docs/APPLICATION_V1.md`](docs/APPLICATION_V1.md) for the full reference and companion app example.
516
-
517
- ### 13. Capability-Based Security
518
-
519
- Declare what external resources an executor needs, then deny specific capabilities at the
520
- policy level — without touching the executors themselves:
521
-
522
- ```ruby
523
- require "igniter/capabilities"
524
-
525
- class DbLookup < Igniter::Executor
526
- capabilities :database
527
138
 
528
- def call(id:)
529
- DB.find(id)
139
+ compute :gross_total, depends_on: %i[order_total vat_rate] do |order_total:, vat_rate:|
140
+ order_total * (1 + vat_rate)
530
141
  end
531
- end
532
-
533
- class PureCalc < Igniter::Executor
534
- pure # shorthand for capabilities(:pure)
535
-
536
- def call(x:, y:) = x + y
537
- end
538
-
539
- # Inspect the graph's surface area before deploying
540
- MyContract.compiled_graph.required_capabilities
541
- # => { fetch: [:database], total: [:pure] }
542
-
543
- # Enforce policy at boot time
544
- Igniter::Capabilities.policy = Igniter::Capabilities::Policy.new(denied: [:database])
545
-
546
- MyContract.new(id: 1).resolve_all
547
- # => CapabilityViolationError: Node 'fetch' uses denied capabilities: database
548
- ```
549
-
550
- See [`docs/CAPABILITIES_V1.md`](docs/CAPABILITIES_V1.md).
551
-
552
- ### 14. Temporal Contracts
553
-
554
- Make time an explicit input so every execution is fully reproducible:
555
142
 
556
- ```ruby
557
- require "igniter/temporal"
558
-
559
- class TaxRateContract < Igniter::Contract
560
- include Igniter::Temporal
561
-
562
- define do
563
- input :country
564
- # `as_of` is injected automatically (default: Time.now)
565
-
566
- temporal_compute :rate, depends_on: :country do |country:, as_of:|
567
- HISTORICAL_RATES.dig(country, as_of.year) || 0.0
568
- end
569
-
570
- output :rate
571
- end
143
+ output :gross_total
572
144
  end
573
145
 
574
- # Current rate
575
- TaxRateContract.new(country: "UA").result.rate
576
- # => 0.22
577
-
578
- # Reproduce the exact 2024 result
579
- TaxRateContract.new(country: "UA", as_of: Time.new(2024, 1, 1)).result.rate
580
- # => 0.20
146
+ result.output(:gross_total)
147
+ # => 120.0
581
148
  ```
582
149
 
583
- See [`docs/TEMPORAL_V1.md`](docs/TEMPORAL_V1.md).
584
-
585
- ### 15. Content-Addressed Computation
586
-
587
- `pure` executors are cached by a fingerprint of their logic + inputs. Identical computation
588
- is never repeated — within an execution, across executions, or across processes:
589
-
590
- ```ruby
591
- require "igniter/extensions/content_addressing"
592
-
593
- class TaxCalculator < Igniter::Executor
594
- pure
595
- fingerprint "tax_calc_v1" # bump to invalidate the cache when logic changes
596
-
597
- def call(country:, amount:)
598
- TAX_RATES[country] * amount
599
- end
600
- end
601
-
602
- # First execution — computes and caches
603
- InvoiceContract.new(country: "UA", amount: 1000).result.tax # computed
150
+ ## Companion Direction
604
151
 
605
- # Second execution served from cache; TaxCalculator is never called
606
- InvoiceContract.new(country: "UA", amount: 1000).result.tax # cache hit
152
+ Igniter is being shaped by real application pressure such as Spark CRM:
607
153
 
608
- # Distributed cache (Redis) — shared across all nodes
609
- Igniter::ContentAddressing.cache = RedisContentCache.new(Redis.new)
154
+ ```text
155
+ Existing app remains the system of record
156
+ -> Igniter Embed observes/shadows risky services
157
+ -> Igniter Ledger records facts and receipts
158
+ -> Ledger boundaries close semantic decisions
159
+ -> Web/Agents explain, review, and recommend
610
160
  ```
611
161
 
612
- See [`docs/CONTENT_ADDRESSING_V1.md`](docs/CONTENT_ADDRESSING_V1.md).
162
+ This is the current strategic pattern: do not rewrite a production app into
163
+ Igniter. Build an Igniter companion beside it, move event-heavy and
164
+ explanation-heavy responsibilities behind explicit facts, receipts, boundaries,
165
+ and approval gates.
613
166
 
614
- ### 16. Incremental Dataflow O(change) Collection Processing
167
+ ## What Is Not Promised Yet
615
168
 
616
- `mode: :incremental` on a collection node makes the runtime diff the input array on
617
- every `resolve_all`. Only added/changed items have their child contract re-run;
618
- unchanged items reuse the cached result; removed items are retracted automatically.
169
+ - Stable v1 API compatibility.
170
+ - A production database adapter abstraction.
171
+ - Remote mutating Store operations for compaction/prune/purge.
172
+ - Cluster consensus or deployment guarantees.
173
+ - AI authority without receipts, policies, replay, and human approval paths.
619
174
 
620
- ```ruby
621
- require "igniter/extensions/dataflow"
175
+ ## Repository Map
622
176
 
623
- class SensorPipeline < Igniter::Contract
624
- define do
625
- input :readings, type: :array
177
+ - [docs/](./docs/README.md) documentation portal
178
+ - [docs/guide/](./docs/guide/README.md) — user-facing guide
179
+ - [docs/concepts/](./docs/concepts/README.md) mental models and vocabulary
180
+ - [docs/dev/](./docs/dev/README.md) — architecture and package boundaries
181
+ - [examples/](./examples/README.md) — runnable examples
182
+ - [packages/](./packages/README.md) — package list and local package docs
183
+ - [playgrounds/](./playgrounds/README.md) — private/local-first experiments and history
626
184
 
627
- collection :processed,
628
- with: :readings,
629
- each: SensorAnalysis,
630
- key: :sensor_id,
631
- mode: :incremental,
632
- window: { last: 1000 } # bounded memory
185
+ ## Package Docs
633
186
 
634
- output :processed
635
- end
636
- end
187
+ - [igniter-contracts](./packages/igniter-contracts/README.md)
188
+ - [igniter-extensions](./packages/igniter-extensions/README.md)
189
+ - [igniter-embed](./packages/igniter-embed/README.md)
190
+ - [igniter-ledger](./packages/igniter-ledger/README.md)
191
+ - [igniter-ledger-client](./packages/igniter-ledger-client/README.md)
192
+ - [igniter-companion](./packages/igniter-companion/README.md)
193
+ - [igniter-application](./packages/igniter-application/README.md)
194
+ - [igniter-web](./packages/igniter-web/README.md)
195
+ - [igniter-agents](./packages/igniter-agents/README.md)
196
+ - [igniter-ai](./packages/igniter-ai/README.md)
197
+ - [igniter-cluster](./packages/igniter-cluster/README.md)
198
+ - [igniter-hub](./packages/igniter-hub/README.md)
199
+ - [igniter-mcp-adapter](./packages/igniter-mcp-adapter/README.md)
637
200
 
638
- pipeline = SensorPipeline.new(readings: initial_batch)
639
- pipeline.resolve_all # all N items run once
201
+ ## Working Principle
640
202
 
641
- # Push only the delta — no full-array replacement needed
642
- pipeline.feed_diff(:readings,
643
- add: [{ sensor_id: "new-1", value: 10 }],
644
- update: [{ sensor_id: "tmp-2", value: 90 }],
645
- remove: ["hum-1"]
646
- )
647
- pipeline.resolve_all # only 2 child contracts run (new-1 + tmp-2)
648
-
649
- diff = pipeline.collection_diff(:processed)
650
- diff.processed_count # => 2
651
- diff.unchanged.size # => N - 2
652
- ```
203
+ Igniter evolves through a tight loop:
653
204
 
654
- See [`docs/DATAFLOW_V1.md`](docs/DATAFLOW_V1.md).
655
-
656
- ## Examples
657
-
658
- | Example | Run | Shows |
659
- |---------|-----|-------|
660
- | `basic_pricing.rb` | `ruby examples/basic_pricing.rb` | Basic contract, lazy resolution, input updates |
661
- | `composition.rb` | `ruby examples/composition.rb` | Nested contracts and composed results |
662
- | `diagnostics.rb` | `ruby examples/diagnostics.rb` | Diagnostics text and machine-readable output |
663
- | `async_store.rb` | `ruby examples/async_store.rb` | Pending execution, file-backed store, worker-style resume |
664
- | `marketing_ergonomics.rb` | `ruby examples/marketing_ergonomics.rb` | `const`, `lookup`, `map`, `guard`, `scope`, `namespace`, `expose`, `on_success`, `explain_plan` |
665
- | `collection.rb` | `ruby examples/collection.rb` | Fan-out, stable item keys, `CollectionResult` |
666
- | `collection_partial_failure.rb` | `ruby examples/collection_partial_failure.rb` | `:collect` mode, partial failure summary, collection diagnostics |
667
- | `ringcentral_routing.rb` | `ruby examples/ringcentral_routing.rb` | `branch`, nested `collection`, `project`, `aggregate`, diagnostics |
668
- | `order_pipeline.rb` | `ruby examples/order_pipeline.rb` | `guard` + `collection` + `branch` + `export` in one flow |
669
- | `distributed_server.rb` | `ruby examples/distributed_server.rb` | `await`, `correlate_by`, `start`, `deliver_event`, `on_success` |
670
- | `server/node1.rb` + `node2.rb` | run both, then curl | Two-node igniter-server with `remote:` DSL |
671
- | `llm/research_agent.rb` | `ruby examples/llm/research_agent.rb` | Multi-step LLM pipeline with Ollama |
672
- | `llm/tool_use.rb` | `ruby examples/llm/tool_use.rb` | LLM tool declarations, chained LLM nodes, `Context` |
673
- | `companion/demo.rb` | `ruby examples/companion/demo.rb` | End-to-end voice AI pipeline using `Igniter::Application` |
674
- | `dataflow.rb` | `ruby examples/dataflow.rb` | Incremental sensor pipeline: `mode: :incremental`, `feed_diff`, sliding window |
675
-
676
- ## Design Docs
677
-
678
- - [Architecture v2](docs/ARCHITECTURE_V2.md)
679
- - [Execution Model v2](docs/EXECUTION_MODEL_V2.md)
680
- - [API Draft v2](docs/API_V2.md)
681
- - [Patterns](docs/PATTERNS.md)
682
- - [Branches v1](docs/BRANCHES_V1.md)
683
- - [Collections v1](docs/COLLECTIONS_V1.md)
684
- - [Distributed Contracts v1](docs/DISTRIBUTED_CONTRACTS_V1.md)
685
- - [Store Adapters](docs/STORE_ADAPTERS.md)
686
- - [igniter-server v1](docs/SERVER_V1.md)
687
- - [LLM Integration v1](docs/LLM_V1.md)
688
- - [Application scaffold v1](docs/APPLICATION_V1.md)
689
- - [Capabilities v1](docs/CAPABILITIES_V1.md)
690
- - [Temporal Contracts v1](docs/TEMPORAL_V1.md)
691
- - [Content Addressing v1](docs/CONTENT_ADDRESSING_V1.md)
692
- - [Incremental Dataflow v1](docs/DATAFLOW_V1.md)
693
- - [Concepts and Principles](docs/IGNITER_CONCEPTS.md)
694
-
695
- ## Development
696
-
697
- ```bash
698
- rake # specs + RuboCop
699
- rake spec # tests only
700
- rake rubocop # lint only
701
- rake build # build gem
205
+ ```text
206
+ real app pressure
207
+ -> proof-local experiment
208
+ -> receipt-backed package primitive
209
+ -> protocol/read surface
210
+ -> docs compression
211
+ -> next pressure
702
212
  ```
703
213
 
704
- Current feature baseline:
705
-
706
- - synchronous runtime + parallel thread-pool runner
707
- - pending / deferred node states with snapshot / restore
708
- - store-backed resume flow (MemoryStore, FileStore)
709
- - compile-time graph validation, typed inputs, cycle detection
710
- - composition, branch, collection, guard, scope / namespace
711
- - distributed workflows: `await`, `correlate_by`, `start`, `deliver_event`
712
- - igniter-server: TCP server, Rack adapter, CLI, `remote:` DSL
713
- - LLM compute nodes: Ollama, Anthropic, OpenAI providers
714
- - Rails integration: Railtie, ActiveJob, ActionCable, webhook controller mixin
715
- - `Igniter::Application`: YAML config, autoloading, scheduler, generator (`igniter-server new`)
716
- - auditing, diagnostics, reactive subscriptions, graph introspection
717
- - capability-based security: `capabilities`, `pure`, `Policy`, `CapabilityViolationError`
718
- - temporal contracts: `include Igniter::Temporal`, `temporal_compute`, `as_of` input, historical reproduction
719
- - content-addressed computation: `pure`, `fingerprint`, universal `ContentKey`, pluggable `ContentCache`
720
- - incremental dataflow: `mode: :incremental`, `window:`, `feed_diff`, `collection_diff`, `DiffState`, `IncrementalCollectionResult`
721
-
722
- ## License
723
-
724
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
214
+ That loop is why some docs live beside packages, some live in public guide/dev
215
+ sections, and older long-form research is compressed into `playgrounds/docs/`
216
+ instead of being used as public onboarding.