dialectical-framework 1.7.2__tar.gz → 1.8.0__tar.gz

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 (205) hide show
  1. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/PKG-INFO +1 -1
  2. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/pyproject.toml +1 -1
  3. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/system_prompts.py +39 -0
  4. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/deepen.py +35 -2
  5. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/explore.py +26 -0
  6. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/analyst.py +38 -3
  7. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/system_prompts.py +15 -4
  8. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/explore_transformations.py +245 -32
  9. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/generate_synthesis.py +50 -0
  10. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/present_exploration.py +17 -0
  11. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/get_schema.py +1 -1
  12. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/inspect_node.py +34 -3
  13. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ac_re_taxonomy.py +90 -0
  14. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/action_extraction.py +21 -26
  15. dialectical_framework-1.8.0/src/dialectical_framework/concerns/build_status.py +362 -0
  16. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/dialectical_context.py +124 -0
  17. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/synthesis.py +13 -1
  18. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/transformation.py +27 -0
  19. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/wheel.py +3 -4
  20. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/rendering.py +255 -0
  21. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/transformation_repository.py +42 -2
  22. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/wheel_repository.py +47 -0
  23. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/order_transitions.py +25 -0
  24. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/LICENSE +0 -0
  25. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/PATENTS +0 -0
  26. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/README.md +0 -0
  27. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/__init__.py +0 -0
  28. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/__init__.py +0 -0
  29. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/__init__.py +0 -0
  30. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/advisor.py +0 -0
  31. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/__init__.py +0 -0
  32. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/anchor.py +0 -0
  33. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/ingest.py +0 -0
  34. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/record_decision.py +0 -0
  35. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/scoped.py +0 -0
  36. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/advisor/tools/sync.py +0 -0
  37. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/agent_context.py +0 -0
  38. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/__init__.py +0 -0
  39. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/__init__.py +0 -0
  40. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/anchor_theses.py +0 -0
  41. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/edit_perspective.py +0 -0
  42. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/expand_polarities.py +0 -0
  43. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/find_polarities.py +0 -0
  44. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/introduce_polarity.py +0 -0
  45. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/skills/surface_theses.py +0 -0
  46. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/tools/__init__.py +0 -0
  47. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/analyst/tools/place_statement.py +0 -0
  48. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/app_spec.py +0 -0
  49. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/apps.py +0 -0
  50. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/conversation_facilitator.py +0 -0
  51. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/execution_report.py +0 -0
  52. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/__init__.py +0 -0
  53. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/explorer.py +0 -0
  54. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/__init__.py +0 -0
  55. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/skills/build_wheels.py +0 -0
  56. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/system_prompts.py +0 -0
  57. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/__init__.py +0 -0
  58. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/create_nexus.py +0 -0
  59. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/expand_nexus.py +0 -0
  60. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/explorer/tools/generate_synthesis.py +0 -0
  61. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/__init__.py +0 -0
  62. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/__init__.py +0 -0
  63. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/add_input.py +0 -0
  64. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/create_dx_input.py +0 -0
  65. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/digest_input.py +0 -0
  66. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/discard.py +0 -0
  67. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/present_analysis.py +0 -0
  68. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/query_graph.py +0 -0
  69. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/read_digest.py +0 -0
  70. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/orchestrator/tools/read_input.py +0 -0
  71. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/reasonable_concern.py +0 -0
  72. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/stream_events.py +0 -0
  73. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/agents/toolsets.py +0 -0
  74. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/__init__.py +0 -0
  75. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/add_input.py +0 -0
  76. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/__init__.py +0 -0
  77. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/statement_dto.py +0 -0
  78. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/ai_dto/statements_deck_dto.py +0 -0
  79. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithesis_classification.py +0 -0
  80. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithesis_extraction.py +0 -0
  81. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/antithetical_thesis_detection.py +0 -0
  82. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/aspect_classification.py +0 -0
  83. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/aspect_generation.py +0 -0
  84. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/__init__.py +0 -0
  85. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator.py +0 -0
  86. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_balanced.py +0 -0
  87. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_criteria.py +0 -0
  88. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_desirable.py +0 -0
  89. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_feasible.py +0 -0
  90. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_estimator_realistic.py +0 -0
  91. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/causality_normalizer.py +0 -0
  92. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality/estimator_resolver.py +0 -0
  93. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/causality_estimation.py +0 -0
  94. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/control_statements_check.py +0 -0
  95. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/create_dx_input.py +0 -0
  96. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/create_nexus.py +0 -0
  97. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/decision_coherence_check.py +0 -0
  98. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/decision_confirmation_check.py +0 -0
  99. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/diagonal_oppositions_check.py +0 -0
  100. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/discard.py +0 -0
  101. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/display_text_edit.py +0 -0
  102. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/expand_nexus.py +0 -0
  103. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/perspective_combination.py +0 -0
  104. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/perspective_validation.py +0 -0
  105. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/positive_ac_re_apex_derivation.py +0 -0
  106. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/record_decision.py +0 -0
  107. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/scoring_scales.py +0 -0
  108. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/source_digest.py +0 -0
  109. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_classification.py +0 -0
  110. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_deduplication.py +0 -0
  111. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_headline.py +0 -0
  112. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/statement_placement.py +0 -0
  113. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/synthesis_generation.py +0 -0
  114. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/tetrad_grounding.py +0 -0
  115. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/thesis_extraction.py +0 -0
  116. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/transformation_audit.py +0 -0
  117. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/concerns/transformation_generation.py +0 -0
  118. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/dialectical_reasoning.py +0 -0
  119. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/__init__.py +0 -0
  120. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/causality_preset.py +0 -0
  121. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/enums/di.py +0 -0
  122. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/__init__.py +0 -0
  123. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/graph_event.py +0 -0
  124. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/events/graph_event_bus.py +0 -0
  125. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/__init__.py +0 -0
  126. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/node_errors.py +0 -0
  127. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/exceptions/resolver_errors.py +0 -0
  128. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/__init__.py +0 -0
  129. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/composite_input_resolver.py +0 -0
  130. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/dialexity_input_resolver.py +0 -0
  131. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/estimation_manager.py +0 -0
  132. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/__init__.py +0 -0
  133. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/incremental_build_mixin.py +0 -0
  134. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/intent_mixin.py +0 -0
  135. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/mixins/persistable_mixin.py +0 -0
  136. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/__init__.py +0 -0
  137. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/assessable_entity.py +0 -0
  138. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/base_node.py +0 -0
  139. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/case.py +0 -0
  140. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/cycle.py +0 -0
  141. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/decision.py +0 -0
  142. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/estimation.py +0 -0
  143. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/ideas.py +0 -0
  144. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/input.py +0 -0
  145. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/nexus.py +0 -0
  146. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/perspective.py +0 -0
  147. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/polarity.py +0 -0
  148. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/rationale.py +0 -0
  149. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/statement.py +0 -0
  150. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/nodes/transition.py +0 -0
  151. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationship_manager.py +0 -0
  152. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/__init__.py +0 -0
  153. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/action_reflection_relationship.py +0 -0
  154. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/belongs_to_cycle_relationship.py +0 -0
  155. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/belongs_to_nexus_relationship.py +0 -0
  156. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/changed_to_relationship.py +0 -0
  157. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/contradiction_of_relationship.py +0 -0
  158. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/critiques_relationship.py +0 -0
  159. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/distilled_to_relationship.py +0 -0
  160. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/estimates_relationship.py +0 -0
  161. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/explains_relationship.py +0 -0
  162. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/grounded_in_relationship.py +0 -0
  163. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_input_relationship.py +0 -0
  164. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_statement_relationship.py +0 -0
  165. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/has_wheel_relationship.py +0 -0
  166. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/immutable_structure.py +0 -0
  167. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/is_source_of_relationship.py +0 -0
  168. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/is_target_of_relationship.py +0 -0
  169. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/negative_side_of_relationship.py +0 -0
  170. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/opposite_direction_relationship.py +0 -0
  171. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/opposite_of_relationship.py +0 -0
  172. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/polarity_relationship.py +0 -0
  173. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/positive_side_of_relationship.py +0 -0
  174. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/provides_relationship.py +0 -0
  175. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/relationships/synthesis_of_relationship.py +0 -0
  176. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/__init__.py +0 -0
  177. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/case_repository.py +0 -0
  178. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/cycle_repository.py +0 -0
  179. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/decision_repository.py +0 -0
  180. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/input_repository.py +0 -0
  181. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/nexus_repository.py +0 -0
  182. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/node_repository.py +0 -0
  183. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/perspective_repository.py +0 -0
  184. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/polarity_repository.py +0 -0
  185. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/schema_repository.py +0 -0
  186. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/repositories/statement_repository.py +0 -0
  187. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/scope_context.py +0 -0
  188. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/verbatim_input_resolver.py +0 -0
  189. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/wheel_segment.py +0 -0
  190. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/graph/wheel_segment_polar_pair.py +0 -0
  191. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/__init__.py +0 -0
  192. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/has_config.py +0 -0
  193. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/protocols/input_resolver.py +0 -0
  194. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/settings.py +0 -0
  195. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/__init__.py +0 -0
  196. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/bedrock_provider.py +0 -0
  197. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/concurrency.py +0 -0
  198. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/dc_replace.py +0 -0
  199. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/decompose_probability_uniformly.py +0 -0
  200. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/edge_context.py +0 -0
  201. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/effect_logger.py +0 -0
  202. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/input_context.py +0 -0
  203. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/sequence_generation.py +0 -0
  204. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/thinking_compat.py +0 -0
  205. {dialectical_framework-1.7.2 → dialectical_framework-1.8.0}/src/dialectical_framework/utils/use_brain.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dialectical-framework
3
- Version: 1.7.2
3
+ Version: 1.8.0
4
4
  Summary: A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.).
5
5
  License: MIT
6
6
  Keywords: dialectics,dialectical-reasoning,synthesis,thesis-antithesis,ai,artificial-intelligence,llm,reasoning-framework,philosophy,logic,argumentation,conflict-resolution,decision-making,critical-thinking,semantic-graph,mirascope,pydantic,perspectives,polarity-reasoning
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "dialectical-framework"
3
- version = "1.7.2"
3
+ version = "1.8.0"
4
4
  description = "A dialectical framework for augmented intelligence. AI reasoning powered with dialectics supports humans in: system optimization (psychology, engineering, business, politics, etc.); dispute resolution (mediation, conflicts, negotiations, etc.); decision-making (dilemmas, challenging situations, win-win, etc.)."
5
5
  authors = ["Evaldas Taroza <evaldas@dialexity.com>"]
6
6
  readme = "README.md"
@@ -882,6 +882,20 @@ correction, and the two arrive in the same sentence often enough that the
882
882
  distinction has its own paragraph in Your Internal Model. Concede the fact in
883
883
  the first clause there too; what you carry forward is what the fact now costs.
884
884
 
885
+ **Unfinished work is spoken plainly, and never with counts.** Your
886
+ understanding may say that an arrangement is only partly worked through, that a
887
+ synthesis was drawn from part of it, or that some tensions were named and never
888
+ developed. Those states are real and you do not hide them — but they are said
889
+ the way a person says them: "I've only got part of this worked out", "there's a
890
+ thread here I haven't followed yet", "let me sit with the rest of it". Not a
891
+ fraction, not a tally, not "four of six", and not the nouns behind them.
892
+
893
+ If they ask outright whether you finished, or whether that's everything —
894
+ answer straight. Saying "yes" over a partial understanding is the one failure
895
+ this rule exists to prevent; a plain "not yet, there's a piece I haven't worked
896
+ through" costs you nothing and is the honest answer. If they want it finished,
897
+ finish it (the work is yours to resume) rather than describing the gap again.
898
+
885
899
  If asked "how do you know that?" — respond naturally about seeing patterns
886
900
  and structural dynamics. Adapt to the persona defined above."""
887
901
 
@@ -899,6 +913,16 @@ node, speak plainly in their language — except for a `Grounded in:` line,
899
913
  whose facts are the person's own and are spoken as stated (see Reading Your
900
914
  Understanding).
901
915
 
916
+ **Unfinished work is stated with its numbers.** Unlike the unscoped register,
917
+ here the exploration is on screen and is the person's own deliverable, so a
918
+ `Pathways: 4/6` line, a synthesis marked "built from 4 of 6 pathways —
919
+ partial", or a count of undeveloped tensions is said as it stands: "this
920
+ arrangement is four pathways of six — the two on A1 → T2 aren't built yet".
921
+ Name what is missing and offer to build it (`deepen`). An edge marked blocked
922
+ cannot be built at all until its segment is finished — say that rather than
923
+ promising work that will not complete. Presenting a partial arrangement as
924
+ whole is the failure to avoid; hiding the fraction is how it happens.
925
+
902
926
  Your counsel is as specific as your understanding: not "find balance" or
903
927
  "consider both sides", but the particular complementarity you actually see.
904
928
  Pair every suggested action with the shift in understanding that sustains it —
@@ -1083,6 +1107,21 @@ low-probability wheels are already suppressed — count lines note what was
1083
1107
  filtered. Everything you see passed the floors; you rank within them, you
1084
1108
  don't re-filter.
1085
1109
 
1110
+ **Completeness is not quality — do not rank on it.** An arrangement may say it
1111
+ is only partly worked through, and a synthesis may say it was drawn from only
1112
+ part of its arrangement. That is unfinished work, not weak structure: it scored
1113
+ well enough to be built and the build was cut short (a closed session, a
1114
+ failure mid-run). Everything present in it is as sound as its scores say, so
1115
+ treat the gap as a to-do, not a demotion. What is missing is what `deepen` tops
1116
+ up — except where the line says the missing part is BLOCKED, meaning its
1117
+ segment must be completed before anything can be built there. An `# Unfinished`
1118
+ line means the same thing one level up: tensions named and never developed —
1119
+ outstanding work, not rejected work (rejected tensions are the suppressed ones
1120
+ above). The two failures to avoid are presenting a partial arrangement as the
1121
+ finished picture, and quietly deprioritizing it as though the shortfall were a
1122
+ score. How you SAY any of this is governed by How You Speak — which permits the
1123
+ numbers in an exploration-pinned session and forbids them otherwise.
1124
+
1086
1125
  1. Lead with the strongest tensions (highest HS on A, best area, best DV). Softer
1087
1126
  ones are still visible by design — usable, and they may resonate with
1088
1127
  the person's lived experience, but don't build your primary counsel
@@ -60,12 +60,45 @@ async def run_deepen(wheel_hash: str) -> str:
60
60
  if pathways:
61
61
  combined_report.artifacts["pathways"] = pathways
62
62
 
63
+ # Whether the deepening actually finished. `pathways` has no denominator, so
64
+ # a run that lost half its edges to a mid-flight failure or an interrupted
65
+ # session reported a shorter list and nothing else — the tool looked like it
66
+ # succeeded. The fraction is what tells the Advisor a second `deepen` would
67
+ # add something, and what tells it not to present a fragment as the whole.
68
+ try:
69
+ from dialectical_framework.graph.nodes.wheel import Wheel
70
+ from dialectical_framework.graph.rendering import wheel_completeness
71
+ from dialectical_framework.graph.repositories.node_repository import \
72
+ NodeRepository
73
+
74
+ wheel = NodeRepository().find_by_hash(wheel_hash, node_type=Wheel)
75
+ completeness = wheel_completeness(wheel) if wheel else None
76
+ if completeness and completeness.expected:
77
+ combined_report.artifacts["pathway_completeness"] = completeness.fraction
78
+ if completeness.incomplete_edges:
79
+ combined_report.artifacts["pathways_incomplete_on"] = (
80
+ completeness.incomplete_edges
81
+ )
82
+ if completeness.blocked_edges:
83
+ combined_report.artifacts["pathways_blocked_on"] = (
84
+ completeness.blocked_edges
85
+ )
86
+ except Exception: # noqa: BLE001 - decoration, never the payload
87
+ # Status decoration must never be the thing that fails a deepen that
88
+ # otherwise produced real pathways. Broad on purpose: the read goes to
89
+ # the DB, so the failure modes include driver errors that are neither
90
+ # ValueError nor RuntimeError.
91
+ pass
92
+
63
93
  try:
64
94
  synth = GenerateSynthesis(wheel_hash=wheel_hash)
65
95
  await synth.resolve()
66
96
  combined_report = combined_report.merge(synth.report)
67
- except (ValueError, RuntimeError) as e:
68
- combined_report.artifacts["synthesis_skipped"] = str(e)
97
+ except Exception as e: # noqa: BLE001 - pathways stand without a synthesis
98
+ # A failed synthesis is reported, not raised: the Transformations this
99
+ # call built are real and adoptable, and losing them to a synthesis
100
+ # fault would throw away the expensive half of the work.
101
+ combined_report.artifacts["synthesis_skipped"] = f"{type(e).__name__}: {e}"
69
102
 
70
103
  combined_report.artifacts["wheel_hash"] = wheel_hash
71
104
  return str(combined_report)
@@ -155,6 +155,32 @@ async def run_exploration_detailed(
155
155
  ]
156
156
  if shallow:
157
157
  combined_report.artifacts["shallow_wheel_hashes"] = shallow
158
+ # Whether the wheels explore DID deepen came out whole. A deepened wheel
159
+ # that lost edges to a failure or an interrupted session still lands in
160
+ # `deepened_wheel_hashes`, so without a fraction the caller cannot tell a
161
+ # finished arrangement from a fragment — and would present the fragment as
162
+ # the answer. Only partial wheels are listed; a clean run says nothing.
163
+ partial: dict[str, str] = {}
164
+ for wh in exp_result.deepened_wheel_hashes:
165
+ try:
166
+ from dialectical_framework.graph.nodes.wheel import Wheel
167
+ from dialectical_framework.graph.rendering import wheel_completeness
168
+ from dialectical_framework.graph.repositories.node_repository import \
169
+ NodeRepository
170
+
171
+ wheel_node = NodeRepository().find_by_hash(wh, node_type=Wheel)
172
+ if not wheel_node:
173
+ continue
174
+ completeness = wheel_completeness(wheel_node)
175
+ if completeness.expected and not completeness.is_complete:
176
+ partial[wh] = completeness.fraction
177
+ except Exception: # noqa: BLE001 - decoration, never the payload
178
+ # Broad on purpose: this is a derived-status read decorating an
179
+ # exploration that already succeeded, and a DB-level failure here
180
+ # is neither ValueError nor RuntimeError.
181
+ continue
182
+ if partial:
183
+ combined_report.artifacts["partial_wheels"] = partial
158
184
  if deferred_hashes:
159
185
  combined_report.artifacts["deferred_perspective_hashes"] = deferred_hashes
160
186
  combined_report.summary = (
@@ -364,7 +364,10 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
364
364
  # WHY these framings are the strong ones or that weaker tensions were
365
365
  # set aside.
366
366
  polarity_quality = self._build_polarity_quality(polarity_data, hashes_to_expand)
367
- set_aside_count = sum(1 for q in polarity_quality if not q["expanded"])
367
+ set_aside_count = sum(1 for q in polarity_quality if q["status"] == "set_aside")
368
+ # Strong enough to expand, dropped for budget — owed work, not a
369
+ # judgement. Reported separately so a resuming session can ask for it.
370
+ deferred_count = sum(1 for q in polarity_quality if q["status"] == "deferred")
368
371
 
369
372
  expand_results = await asyncio.gather(
370
373
  *[self._expand_one(h) for h in hashes_to_expand],
@@ -398,6 +401,16 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
398
401
  )
399
402
 
400
403
  expansion_errors = [e for e in errors if e.step == "expand_polarities"]
404
+ # An expansion that was attempted and failed is not an expanded tension.
405
+ # `status` was set to "expanded" before the gather (it records the gate
406
+ # decision), so without this correction a crashed expansion reads as
407
+ # done — the one state a resuming session most needs to see, since the
408
+ # tension has a Polarity and no usable Perspective.
409
+ failed_hashes = {e.hash for e in expansion_errors if e.hash}
410
+ if failed_hashes:
411
+ for q in polarity_quality:
412
+ if q["polarity_hash"] in failed_hashes:
413
+ q["status"] = "failed"
401
414
  # Producing NO perspectives is a failed analysis, not a quiet success.
402
415
  # This block used to set ok=True unconditionally and drop `errors` on
403
416
  # the floor (they rode home on AnalysisResult, which no tool renders),
@@ -414,11 +427,17 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
414
427
  if set_aside_count
415
428
  else ""
416
429
  )
430
+ deferred_note = (
431
+ f", {deferred_count} strong tension(s) NOT expanded (budget: "
432
+ f"{MAX_POLARITIES_TO_EXPAND} per run) — call again to develop them"
433
+ if deferred_count
434
+ else ""
435
+ )
417
436
  self._report.summary = (
418
437
  f"Analysis complete: {len(thesis_hashes)} theses, "
419
438
  f"{len(polarity_hashes)} polarities, "
420
439
  f"{len(perspective_hashes)} perspectives"
421
- f"{set_aside_note}"
440
+ f"{set_aside_note}{deferred_note}"
422
441
  )
423
442
  if expansion_errors:
424
443
  failed = "; ".join(
@@ -482,13 +501,29 @@ class AnalysisPipeline(ReasonableConcern[AnalysisResult]):
482
501
  if not h or h in seen or p.get("deduped", False):
483
502
  continue
484
503
  seen.add(h)
504
+ hs = p.get("heuristic_similarity")
485
505
  quality.append(
486
506
  {
487
507
  "polarity_hash": h,
488
508
  "thesis": p.get("thesis_text"),
489
509
  "antithesis": p.get("antithesis_text"),
490
- "hs": p.get("heuristic_similarity"),
510
+ "hs": hs,
491
511
  "expanded": h in expanded_set,
512
+ # WHY it wasn't expanded, not just that it wasn't. `expanded:
513
+ # False` conflated two opposite situations: a tension the HS
514
+ # gate judged too weak (working as designed, nothing to do)
515
+ # and one strong enough to expand that got dropped for
516
+ # budget (MAX_POLARITIES_TO_EXPAND) — real work still owed.
517
+ # Only the latter is worth a follow-up call.
518
+ "status": (
519
+ "expanded"
520
+ if h in expanded_set
521
+ else (
522
+ "deferred"
523
+ if hs is not None and hs >= HS_THRESHOLD
524
+ else "set_aside"
525
+ )
526
+ ),
492
527
  }
493
528
  )
494
529
  quality.sort(
@@ -121,10 +121,21 @@ you from a generic list of pros and cons.
121
121
 
122
122
  `analyze` expands only the strongest tensions into full perspectives and sets the
123
123
  rest aside — the report's `polarity_quality` artifact lists every tension with its
124
- `hs` and an `expanded` flag, and the summary notes how many were set aside. When
125
- tensions were set aside, briefly say stronger framings were prioritized and that
126
- you can develop a weaker one on request (via `find_polarities`/`expand_polarities`
127
- on that specific tension) don't silently drop them.
124
+ `hs`, an `expanded` flag, and a `status` naming *why*:
125
+
126
+ - **`expanded`** a full perspective exists.
127
+ - **`set_aside`** HS too weak to lead with. This is the gate working; nothing is owed.
128
+ - **`deferred`** — strong enough to expand, dropped only because one run expands a
129
+ limited number. Real work still outstanding: say so and offer to develop it now.
130
+ - **`failed`** — expansion was attempted and errored. The tension exists with no
131
+ usable perspective behind it. Never present it as developed; re-run
132
+ `expand_polarities` on that tension.
133
+
134
+ `deferred` and `failed` are the two you must not swallow — they are unfinished
135
+ work, not judgements. When tensions were merely set aside, briefly say stronger
136
+ framings were prioritized and that you can develop a weaker one on request (via
137
+ `find_polarities`/`expand_polarities` on that specific tension) — don't silently
138
+ drop them either.
128
139
 
129
140
  Communicate quality as meaning ("a strong tension", "a weaker, more tangential
130
141
  pull"), not raw numbers, unless the app preamble or the user asks for the figures.