ww-agentic-workflows 1.0.0.dev6__tar.gz → 1.0.0.dev7__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 (376) hide show
  1. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/CHANGELOG.md +8 -0
  2. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/PKG-INFO +10 -1
  3. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/README.md +9 -0
  4. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/WW_AGENT_INSTRUCTIONS.md +19 -19
  5. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/architecture.md +34 -0
  6. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/features.md +96 -0
  7. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/specification.md +10 -1
  8. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/pyproject.toml +1 -1
  9. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/agent_instructions.md +19 -19
  10. ww_agentic_workflows-1.0.0.dev7/src/ww/assets/ww-debug-report_skill.md +34 -0
  11. ww_agentic_workflows-1.0.0.dev7/src/ww/assets/ww-workflow-feedback_skill.md +38 -0
  12. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww_skill.md +8 -2
  13. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/discover.py +43 -0
  14. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/main.py +102 -1
  15. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/parser.py +33 -0
  16. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/prompts.py +9 -0
  17. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/defaults.py +9 -0
  18. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/plan/compiler.py +10 -2
  19. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/project_config.py +68 -0
  20. ww_agentic_workflows-1.0.0.dev7/src/ww/run_reports.py +649 -0
  21. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/service.py +60 -9
  22. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_cli.py +2 -0
  23. ww_agentic_workflows-1.0.0.dev7/tests/integration/test_run_report_commands.py +291 -0
  24. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_project_config.py +38 -0
  25. ww_agentic_workflows-1.0.0.dev7/tests/unit/test_run_reports.py +388 -0
  26. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.claude/settings.json +0 -0
  27. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.claude/skills/noww/SKILL.md +0 -0
  28. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.claude/skills/update-architecture-documentation/SKILL.md +0 -0
  29. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.claude/skills/ww/SKILL.md +0 -0
  30. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.codex/hooks.json +0 -0
  31. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.codex/skills/noww/SKILL.md +0 -0
  32. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.codex/skills/update-architecture-documentation/SKILL.md +0 -0
  33. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.codex/skills/ww/SKILL.md +0 -0
  34. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.git-blame-ignore-revs +0 -0
  35. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.githooks/pre-commit +0 -0
  36. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  37. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  38. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  39. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  40. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/workflows/dev-publish.yml +0 -0
  41. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.github/workflows/release-gates.yml +0 -0
  42. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/.gitignore +0 -0
  43. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/AGENTS.md +0 -0
  44. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/CLAUDE.md +0 -0
  45. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/CODE_OF_CONDUCT.md +0 -0
  46. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/CONTRIBUTING.md +0 -0
  47. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/LICENSE +0 -0
  48. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/SECURITY.md +0 -0
  49. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/agent-hooks.md +0 -0
  50. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/development-releases.md +0 -0
  51. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/examples.md +0 -0
  52. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/limitations.md +0 -0
  53. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/python-agent-rules.md +0 -0
  54. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/documentation/todo.md +0 -0
  55. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/ext/ww/git/extension.py +0 -0
  56. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/check_distribution.py +0 -0
  57. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/check_release_gates.py +0 -0
  58. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/demo.sh +0 -0
  59. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/ensure_spdx_license.py +0 -0
  60. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/measure_pages.py +0 -0
  61. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/run_workflow_dummy.py +0 -0
  62. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/set_dev_version.py +0 -0
  63. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/scripts/test +0 -0
  64. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/__init__.py +0 -0
  65. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/action_execution.py +0 -0
  66. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/__init__.py +0 -0
  67. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/command.py +0 -0
  68. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/contracts.py +0 -0
  69. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/extension.py +0 -0
  70. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/mcp.py +0 -0
  71. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/prompt.py +0 -0
  72. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/skill.py +0 -0
  73. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/actions/slash_command.py +0 -0
  74. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/agents.py +0 -0
  75. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/amendments.py +0 -0
  76. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/artifacts.py +0 -0
  77. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assessments.py +0 -0
  78. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/__init__.py +0 -0
  79. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/noww_skill.md +0 -0
  80. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/workflows/onboarding.yaml +0 -0
  81. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/workflows/scriptize.yaml +0 -0
  82. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-automate_skill.md +0 -0
  83. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-deduce-feedback_skill.md +0 -0
  84. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-feedback-rules_skill.md +0 -0
  85. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-learn-project_skill.md +0 -0
  86. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-refresh_skill.md +0 -0
  87. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-rule_skill.md +0 -0
  88. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-rules-from-artifacts_skill.md +0 -0
  89. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-scriptize_skill.md +0 -0
  90. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-setup_skill.md +0 -0
  91. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-solve_skill.md +0 -0
  92. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-suggest_skill.md +0 -0
  93. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assets/ww-wizard_skill.md +0 -0
  94. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/assignments.py +0 -0
  95. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/bootstrap.py +0 -0
  96. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/builtin_workflows.py +0 -0
  97. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/changes.py +0 -0
  98. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/child_coordination.py +0 -0
  99. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/children.py +0 -0
  100. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/claude_permissions.py +0 -0
  101. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/__init__.py +0 -0
  102. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/__main__.py +0 -0
  103. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/audit.py +0 -0
  104. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/catalogs.py +0 -0
  105. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/initialization.py +0 -0
  106. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/lookup.py +0 -0
  107. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/cli/updates.py +0 -0
  108. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/completion_artifacts.py +0 -0
  109. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/completion_inputs.py +0 -0
  110. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/__init__.py +0 -0
  111. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/actions.py +0 -0
  112. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/composition.py +0 -0
  113. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/rules.py +0 -0
  114. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/steps.py +0 -0
  115. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config/values.py +0 -0
  116. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config_files.py +0 -0
  117. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/config_writes.py +0 -0
  118. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/contracts.py +0 -0
  119. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/control.py +0 -0
  120. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/design_docs.py +0 -0
  121. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/direct_work.py +0 -0
  122. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/discovery.py +0 -0
  123. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/documents.py +0 -0
  124. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/errors.py +0 -0
  125. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/executable.py +0 -0
  126. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/__init__.py +0 -0
  127. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/construction.py +0 -0
  128. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/decoding.py +0 -0
  129. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/plan_codec.py +0 -0
  130. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/records.py +0 -0
  131. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/execution_models/runs.py +0 -0
  132. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/extensions/__init__.py +0 -0
  133. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/extensions/api.py +0 -0
  134. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/extensions/registry.py +0 -0
  135. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/extensions/store.py +0 -0
  136. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/feedback.py +0 -0
  137. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/handler_repairs.py +0 -0
  138. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/hooks/__init__.py +0 -0
  139. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/hooks/agents.py +0 -0
  140. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/hooks/install.py +0 -0
  141. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/hooks/notices.py +0 -0
  142. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/hooks/runtime.py +0 -0
  143. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/inspect.py +0 -0
  144. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/__init__.py +0 -0
  145. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/builder.py +0 -0
  146. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/commands.py +0 -0
  147. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/handoff.py +0 -0
  148. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/models.py +0 -0
  149. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/policy.py +0 -0
  150. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/instructions/text.py +0 -0
  151. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/interactions.py +0 -0
  152. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/interpolation.py +0 -0
  153. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/item_passes.py +0 -0
  154. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/items.py +0 -0
  155. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/locking.py +0 -0
  156. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/metadata_publication.py +0 -0
  157. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/onboarding.py +0 -0
  158. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/open_work.py +0 -0
  159. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operations.py +0 -0
  160. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/__init__.py +0 -0
  161. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/page.html +0 -0
  162. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/server.py +0 -0
  163. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/session.py +0 -0
  164. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/sheet.py +0 -0
  165. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/operator_ui/view.py +0 -0
  166. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output.py +0 -0
  167. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/__init__.py +0 -0
  168. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/base.py +0 -0
  169. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/json_adapter.py +0 -0
  170. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/markdown.py +0 -0
  171. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/rule_pages.py +0 -0
  172. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/output_adapters/terminal.py +0 -0
  173. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/package_updates.py +0 -0
  174. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/plan/__init__.py +0 -0
  175. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/plan/actions.py +0 -0
  176. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/plan/constructs.py +0 -0
  177. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/plan/models.py +0 -0
  178. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/recovery.py +0 -0
  179. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/replanning.py +0 -0
  180. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/results.py +0 -0
  181. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_checks.py +0 -0
  182. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_conversion.py +0 -0
  183. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_disputes.py +0 -0
  184. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_store.py +0 -0
  185. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_verification.py +0 -0
  186. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_views.py +0 -0
  187. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/rule_writes.py +0 -0
  188. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/run_coordination.py +0 -0
  189. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/runtimes.py +0 -0
  190. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/setup_apply.py +0 -0
  191. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/step_values.py +0 -0
  192. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage.py +0 -0
  193. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/__init__.py +0 -0
  194. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/base.py +0 -0
  195. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/filesystem.py +0 -0
  196. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/memory.py +0 -0
  197. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/project_metadata.py +0 -0
  198. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/storage_adapters/task_document.py +0 -0
  199. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/task_ids.py +0 -0
  200. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/task_references.py +0 -0
  201. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/transitions.py +0 -0
  202. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/updates.py +0 -0
  203. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/upgrade.py +0 -0
  204. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/validation.py +0 -0
  205. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/variables.py +0 -0
  206. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/workflow_config.py +0 -0
  207. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/workflow_update.py +0 -0
  208. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/workflow_validation.py +0 -0
  209. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/src/ww/workspace.py +0 -0
  210. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/action_contract_helpers.py +0 -0
  211. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/config_helpers.py +0 -0
  212. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/conftest.py +0 -0
  213. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/example_documents.py +0 -0
  214. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/fixtures/packaged_extension/ww_test_packaged_extension.py +0 -0
  215. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/completion.md +0 -0
  216. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/fix-required.md +0 -0
  217. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/interactive.md +0 -0
  218. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/item-stage.md +0 -0
  219. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/loop-body.md +0 -0
  220. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/loop-continue.md +0 -0
  221. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/manager-dispatch.md +0 -0
  222. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/operator-stop.md +0 -0
  223. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/step-auto-worker.md +0 -0
  224. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/step-rules.md +0 -0
  225. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/step-single.md +0 -0
  226. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/values-and-metadata.md +0 -0
  227. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/verification.md +0 -0
  228. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/worker-bootstrap.md +0 -0
  229. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/golden/pages/worker-handoff.md +0 -0
  230. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_adjustments.py +0 -0
  231. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_artifact_from_containers.py +0 -0
  232. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_assessment_outcomes.py +0 -0
  233. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_assignment_tokens.py +0 -0
  234. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_auto_retries.py +0 -0
  235. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_automatic_handler_groups.py +0 -0
  236. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_automatic_modes.py +0 -0
  237. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_awaiting_operator.py +0 -0
  238. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_bootstrap_task_id.py +0 -0
  239. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_builtin_workflows.py +0 -0
  240. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_identity.py +0 -0
  241. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_launch_settings.py +0 -0
  242. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_stages.py +0 -0
  243. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_start_action.py +0 -0
  244. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_start_guards.py +0 -0
  245. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_child_tasks.py +0 -0
  246. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_children_added_mid_run.py +0 -0
  247. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_command_metadata.py +0 -0
  248. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_complete_dispatch.py +0 -0
  249. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_concurrency.py +0 -0
  250. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_config_files.py +0 -0
  251. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_configuration_authority.py +0 -0
  252. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_direct_work.py +0 -0
  253. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_discover.py +0 -0
  254. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_documents.py +0 -0
  255. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_example_behaviour.py +0 -0
  256. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_executable.py +0 -0
  257. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_extension_execution.py +0 -0
  258. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_feedback_commands.py +0 -0
  259. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_git_extension.py +0 -0
  260. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_git_variables.py +0 -0
  261. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_golden_pages.py +0 -0
  262. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_handler_repairs.py +0 -0
  263. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_handoff_block.py +0 -0
  264. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_hooks.py +0 -0
  265. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_init_force.py +0 -0
  266. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_init_permissions.py +0 -0
  267. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_inspect.py +0 -0
  268. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_interactive.py +0 -0
  269. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_assignment.py +0 -0
  270. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_fields.py +0 -0
  271. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_pass_restarts.py +0 -0
  272. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_pass_runs.py +0 -0
  273. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_reply_reports.py +0 -0
  274. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_item_runtime_values.py +0 -0
  275. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_items.py +0 -0
  276. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_local_step_pages.py +0 -0
  277. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_loops.py +0 -0
  278. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_memory_workflow_service.py +0 -0
  279. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_metadata_lists.py +0 -0
  280. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_onboarding.py +0 -0
  281. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_onboarding_workflows.py +0 -0
  282. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_pack_scenarios.py +0 -0
  283. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_packaged_extension.py +0 -0
  284. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_page_gates.py +0 -0
  285. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_plan_execution.py +0 -0
  286. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_projects.py +0 -0
  287. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_recommended_workflow.py +0 -0
  288. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_recovery_guards.py +0 -0
  289. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_replanning.py +0 -0
  290. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_requirements_pages.py +0 -0
  291. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_requirements_per_session.py +0 -0
  292. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_restart.py +0 -0
  293. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_rule_commands.py +0 -0
  294. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_rule_conversion.py +0 -0
  295. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_rule_verification_flow.py +0 -0
  296. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_rule_write_commands.py +0 -0
  297. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_rules_and_checks.py +0 -0
  298. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_scriptize_workflow.py +0 -0
  299. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_setup_apply.py +0 -0
  300. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_setup_update.py +0 -0
  301. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_setup_verification.py +0 -0
  302. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_shared_items.py +0 -0
  303. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_stale_task_records.py +0 -0
  304. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_state_unknown_fields.py +0 -0
  305. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_system_scenarios.py +0 -0
  306. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_update_notice.py +0 -0
  307. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_upgrade.py +0 -0
  308. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_workdir.py +0 -0
  309. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_worker_bootstrap_text.py +0 -0
  310. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_worker_handoff.py +0 -0
  311. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/integration/test_workflow_service.py +0 -0
  312. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/page_catalog.py +0 -0
  313. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/plan_helpers.py +0 -0
  314. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/test_dev_version.py +0 -0
  315. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_action_contracts.py +0 -0
  316. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_action_example.py +0 -0
  317. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_action_phase_contexts.py +0 -0
  318. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_artifacts.py +0 -0
  319. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_assignments.py +0 -0
  320. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_beta_notice.py +0 -0
  321. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_builtin_actions.py +0 -0
  322. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_changes.py +0 -0
  323. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_checklist_prompt.py +0 -0
  324. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_child_stages_config.py +0 -0
  325. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_children_config.py +0 -0
  326. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_cli_prompts.py +0 -0
  327. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_completion_inputs.py +0 -0
  328. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_completion_selection.py +0 -0
  329. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_config.py +0 -0
  330. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_config_composition.py +0 -0
  331. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_config_writes.py +0 -0
  332. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_delegation_requests.py +0 -0
  333. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_design_docs.py +0 -0
  334. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_discovery.py +0 -0
  335. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_examples_doc.py +0 -0
  336. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_execution_hints.py +0 -0
  337. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_extensions.py +0 -0
  338. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_feedback.py +0 -0
  339. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_handler_failure_report.py +0 -0
  340. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_hook_agents.py +0 -0
  341. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_instruction_commands.py +0 -0
  342. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_interactions.py +0 -0
  343. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_item_config.py +0 -0
  344. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_item_passes.py +0 -0
  345. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_item_validation.py +0 -0
  346. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_locking.py +0 -0
  347. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_markdown_output.py +0 -0
  348. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_modes.py +0 -0
  349. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_operator_ui.py +0 -0
  350. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_package_updates.py +0 -0
  351. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_plan.py +0 -0
  352. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_project_metadata_storage_adapters.py +0 -0
  353. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_records.py +0 -0
  354. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_rule_disputes.py +0 -0
  355. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_rule_store.py +0 -0
  356. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_rule_verification.py +0 -0
  357. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_rule_writes.py +0 -0
  358. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_rules.py +0 -0
  359. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_runtimes.py +0 -0
  360. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_scripts_test_bootstrap.py +0 -0
  361. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_step_role.py +0 -0
  362. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_storage.py +0 -0
  363. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_task_document.py +0 -0
  364. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_task_ids.py +0 -0
  365. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_task_references.py +0 -0
  366. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_task_storage_adapters.py +0 -0
  367. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_transitions.py +0 -0
  368. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_updates.py +0 -0
  369. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_validation.py +0 -0
  370. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_variables.py +0 -0
  371. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_workflow_inheritance.py +0 -0
  372. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_workflow_validation.py +0 -0
  373. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/unit/test_workspace.py +0 -0
  374. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/tests/workflow_helpers.py +0 -0
  375. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/ww.json +0 -0
  376. {ww_agentic_workflows-1.0.0.dev6 → ww_agentic_workflows-1.0.0.dev7}/ww.yaml +0 -0
@@ -9,6 +9,14 @@ The committed package version stays at 0.1.0; development snapshots from `dev`
9
9
  use `1.0.0.devN`. What may change between two pulls, and what ww does not promise
10
10
  yet, is in [documentation/limitations.md](documentation/limitations.md).
11
11
 
12
+ ## 2026-10-06
13
+
14
+ - Added: three `ww.json` switches, off by default: `debug.collect` keeps a local record per run of how ww itself
15
+ behaved (`.ww/debug/`), `debug.report` makes `discover` offer to publish them as GitHub issues through the new
16
+ `debug report` command, each shown and confirmed first, and `feedback.collect` keeps a local record of how the
17
+ workflow was composed (`.ww/feedback/`), read with `workflow-feedback`; skills `ww-debug-report` and
18
+ `ww-workflow-feedback` cover the agent side. `4f11e89`
19
+
12
20
  ## 2026-10-05
13
21
 
14
22
  - Fixed: in the `auto` runtime, a worker's `loop --continue` below the loop's limit left the task stuck: the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ww-agentic-workflows
3
- Version: 1.0.0.dev6
3
+ Version: 1.0.0.dev7
4
4
  Summary: A local-first, resumable workflow CLI for people and AI agents.
5
5
  Project-URL: Homepage, https://agenticworkflows.dev
6
6
  Project-URL: Documentation, https://github.com/from-developers-for-developers/agentic-workflows/tree/main/documentation
@@ -399,6 +399,15 @@ default; set `"feedback_learning": false` in `ww.json` to disable it. Invoke
399
399
  stale points. See [feedback learning](documentation/features.md#learning-from-operator-feedback)
400
400
  for commands and examples.
401
401
 
402
+ Two further switches in `ww.json`, off by default, keep local run reports:
403
+ `debug.collect` asks the agent at the end of each run how ww itself behaved and
404
+ keeps the answer under `.ww/debug/`, and `feedback.collect` asks how well the
405
+ workflow was composed, kept under `.ww/feedback/`. Nothing leaves the machine
406
+ by itself: `./ww debug report` publishes a debug record to ww's GitHub issues
407
+ only after showing it and asking, and the `ww-workflow-feedback` skill reviews
408
+ the feedback with you. See [collecting debug info and workflow
409
+ feedback](documentation/features.md#collecting-debug-info-and-workflow-feedback).
410
+
402
411
  ### Runtimes: who actually performs a step
403
412
 
404
413
  Every task runs manager and worker responsibilities — the manager dispatches
@@ -361,6 +361,15 @@ default; set `"feedback_learning": false` in `ww.json` to disable it. Invoke
361
361
  stale points. See [feedback learning](documentation/features.md#learning-from-operator-feedback)
362
362
  for commands and examples.
363
363
 
364
+ Two further switches in `ww.json`, off by default, keep local run reports:
365
+ `debug.collect` asks the agent at the end of each run how ww itself behaved and
366
+ keeps the answer under `.ww/debug/`, and `feedback.collect` asks how well the
367
+ workflow was composed, kept under `.ww/feedback/`. Nothing leaves the machine
368
+ by itself: `./ww debug report` publishes a debug record to ww's GitHub issues
369
+ only after showing it and asking, and the `ww-workflow-feedback` skill reviews
370
+ the feedback with you. See [collecting debug info and workflow
371
+ feedback](documentation/features.md#collecting-debug-info-and-workflow-feedback).
372
+
364
373
  ### Runtimes: who actually performs a step
365
374
 
366
375
  Every task runs manager and worker responsibilities — the manager dispatches
@@ -13,14 +13,12 @@ Before starting new work, run:
13
13
  ./ww discover
14
14
  ```
15
15
 
16
- It lists the project's workflows, modes, the start command, and
17
- whether to use ww unasked. If disabled, stop; if used only on request, use it only when
18
- the user asks for ww. Choose the matching workflow and keep its default modes
19
- unless the request matches another mode; ask only when the choice would
20
- materially change the work.
21
-
22
- When a request names an external ticket, use that as the task ID. Omit the ID
23
- only when none is named or the workflow obtains it in its first step.
16
+ It lists the workflows, modes, the start command, and whether to use ww
17
+ unasked. If disabled, stop; if used only on request, use it only when the user
18
+ asks for ww. Choose the matching workflow and keep its default modes unless the
19
+ request matches another mode; ask only when the choice would materially change
20
+ the work. When a request names an external ticket, use that as the task ID.
21
+ Omit the ID only when none is named or the workflow obtains it in its first step.
24
22
 
25
23
  A request that names a ticket or clearly matches a workflow's description, and
26
24
  is more than a small change: propose that workflow, and offer the alternative in
@@ -33,9 +31,8 @@ and never again on a task once the operator chose direct work. If `record`
33
31
  fails or is forgotten, ww records the commits on the next manager
34
32
  page (`instruction --role manager`): do not retry.
35
33
 
36
- To continue an existing task, run `./ww instruction <task-id> --role manager`;
37
- a worker resuming its assignment uses `--role worker`. Check status with
38
- `./ww status <task-id>`.
34
+ To continue a task, run `./ww instruction <task-id> --role manager` (a resuming
35
+ worker uses `--role worker`); `./ww status <task-id>` checks it.
39
36
 
40
37
  ## Rules
41
38
  - Follow each authoritative ww page: replace placeholders and supply requested
@@ -43,17 +40,20 @@ a worker resuming its assignment uses `--role worker`. Check status with
43
40
  - Perform only agent-owned work. Never run or bypass a ww handler, edit ww state, or read `ww.yaml` or ww source to infer the next step.
44
41
  - For handler repair, fix the cause and complete with an artifact; ww retries it. In `auto`, the manager dispatches repairs with `next`.
45
42
  - On an `interactive: true` step, converse in the operator session and finish
46
- on clear contextual intent; ask if it is ambiguous. "Done for today" means
47
- pause. Record both sides and end the interaction before completing it.
48
- - Use a host choice tool when available, following its contract; otherwise use
49
- a numbered chat list. Keep async choices pending until an answer arrives;
43
+ on clear contextual intent; ask if it is ambiguous ("done for today" means
44
+ pause). Record both sides and end the interaction before completing it.
45
+ - Use a host choice tool when available, following its contract; otherwise a
46
+ numbered chat list. Keep async choices pending until an answer arrives;
50
47
  timeout, dismissal, and preselection are not answers.
51
48
  - On nonzero exit, read the full response. For "Fix required", repair and complete again
52
49
  (`./ww check <task-id>` previews checks) or `./ww dispute`; record impossible work
53
50
  with `./ww fail` and the page's role/assignment. On `awaiting_operator`, stop and
54
51
  report the reason and exact error; run only the operator's chosen recovery option;
55
52
  never reset unasked. A standing operator authorization for routine repairs (dependency
56
- installation, formatting, retries) covers such stops: apply it, asking only for a
57
- material decision or an action outside it.
58
- - Relay feedback-deduction suggestions after completion; use its skill and ww
59
- commands. Rule approval and pruning are separate follow-ups.
53
+ installation, formatting, retries) covers such stops; ask only for a material decision.
54
+ - Relay feedback-deduction suggestions after completion; rule approval and
55
+ pruning are separate follow-ups.
56
+ - When `discover` lists debug reports to send, ask the operator once (y/n); on
57
+ yes use the `ww-debug-report` skill, which confirms each report. When a start
58
+ page says ww collects debug or feedback info, tell the operator once, then
59
+ never mention it again.
@@ -1887,3 +1887,37 @@ explicit `feedback prune` command used during the separate `ww-feedback-rules`
1887
1887
  review; it is never a side effect of workflow completion or deduction. Review
1888
1888
  judgement may retain stale candidates using their IDs. Rule installation still
1889
1889
  requires approval of concrete proposals through validated existing rule commands.
1890
+
1891
+ ## Run reports: debug info and workflow feedback
1892
+
1893
+ `run_reports` holds the two optional collections `ww.json` switches on
1894
+ (`debug.collect`, `feedback.collect`) and the reporting of debug records
1895
+ (`debug.report`, `ww debug report`). Each kind is a `ReportKind`: its
1896
+ directory under the runtime path, the two `ProvidedVariable`s it adds to the
1897
+ built-in `update-workflow-summary` handler and the sentence it adds to that
1898
+ handler's prompt. The plan compiler reads the kinds from the project settings
1899
+ when it compiles the summary handler, so a run asks for exactly what was
1900
+ switched on when it started, and the saved plan keeps asking for it whatever
1901
+ the setting says later. No plan item is added: collection rides on the
1902
+ summary step's completion window.
1903
+
1904
+ The service validates the arrays before anything is saved (`complete` on the
1905
+ summary item parses each JSON array and refuses a malformed one), writes the
1906
+ records from the run's `workflow_values` right after the completing commit,
1907
+ and adds the one-time collection notice to the first page of every start
1908
+ (`notices`, beside the rules notice). A record that cannot be written is
1909
+ dropped rather than failing a run that is already committed. The workflow
1910
+ definition in a record is the entry of the composed `ww.yaml` (or of a
1911
+ built-in file), read through `compose_configuration`, not the compiled plan.
1912
+
1913
+ `RunReportStore` keeps one JSON file per run under `.ww/debug/` or
1914
+ `.ww/feedback/`, written atomically under the project's lock manager, with a
1915
+ `reported` field ww fills when a debug record was published. The CLI's
1916
+ `debug` and `workflow-feedback` commands read these stores; `discover`
1917
+ counts unreported debug records and offers them only while `debug.report` is
1918
+ on. Publishing goes through `report_records`, which takes the confirmation,
1919
+ browser and `gh` callables as parameters, so the CLI wires the terminal
1920
+ prompts (`confirm_operator`, `--yes`) and `webbrowser.open` while tests pass
1921
+ stubs. `gh` is used when it is installed and `gh auth status` succeeds;
1922
+ otherwise the prefilled new-issue URL is opened and the operator submits it.
1923
+ ww never holds a credential of its own.
@@ -45,6 +45,9 @@ An installation carries the same-version copies of all three: read them with
45
45
  automation.
46
46
  - Atomic persistence, task-level concurrency control, interruption recovery,
47
47
  execution logs, and lock cleanup.
48
+ - Optional local run reports, off by default: ww's own assessment of each run
49
+ (`debug.collect`), published to ww's GitHub issues only on the operator's
50
+ confirmation, and feedback on the workflow's composition (`feedback.collect`).
48
51
 
49
52
  ## Designing a workflow
50
53
 
@@ -4683,3 +4686,96 @@ Set `"feedback_learning": false` in `ww.json` to disable completion suggestions,
4683
4686
  deduction recording and task-exposure tracking. Existing candidates and
4684
4687
  artifacts remain readable. Pruning remains an explicit maintenance operation,
4685
4688
  independent of that suggestion setting.
4689
+
4690
+ ## Collecting debug info and workflow feedback
4691
+
4692
+ Two optional modes in `ww.json`, both off by default, make the built-in
4693
+ workflow summary ask the agent for an assessment at the end of every run and
4694
+ keep it on the operator's machine as one record per run:
4695
+
4696
+ ```json
4697
+ {
4698
+ "debug": {"collect": true, "report": true},
4699
+ "feedback": {"collect": true}
4700
+ }
4701
+ ```
4702
+
4703
+ - `debug.collect` collects **debug info about ww itself**: how the tool, its
4704
+ pages, commands and handlers behaved during the run. The record holds two
4705
+ arrays, `errors` (errors, bugs and blockers ww caused, first) and
4706
+ `inconveniences` (an assessment of ww's usability), and is kept under
4707
+ `.ww/debug/`.
4708
+ - `feedback.collect` collects **feedback about the workflow**: how well the
4709
+ workflow that ran was composed and how effective it was. Its two arrays are
4710
+ `problems` (application or code bugs met while the workflow ran) and
4711
+ `improvements` (steps to add, drop, merge or reorder, prompts to clarify,
4712
+ work to automate or script); ww's own defects do not belong here. The record
4713
+ is kept under `.ww/feedback/`, apart from the feedback-learning store
4714
+ `.ww/feedback.json`.
4715
+
4716
+ Collection adds no step to the plan. The summary step's page carries the
4717
+ questions as values to supply beside `summary`, each a JSON array of objects
4718
+ with `summary`, `detail` and `step` (a bare string counts as a summary; `[]`
4719
+ when there is nothing to say); a malformed array is refused at `complete`, so
4720
+ it comes back to the agent instead of into a record. Once the run completes,
4721
+ ww writes the record: the workflow's name, the time, the task and run IDs, the
4722
+ agent, runtime and modes, the ww version with the plan and task-state schema
4723
+ versions, the workflow's definition as written in `ww.yaml` (not the compiled
4724
+ plan), and the two arrays. The record's ID is the task and run, such as
4725
+ `TASK-42--01-task`; a child task's slash becomes a plus.
4726
+
4727
+ The agent is told about the collection exactly once: the first page of a run
4728
+ asks it to say that ww collects debug info or feedback at the end of the run,
4729
+ that it stays on this machine, and where. The collection itself is silent
4730
+ until the summary step. Nothing is ever sent by itself.
4731
+
4732
+ ```console
4733
+ ./ww debug list
4734
+ ./ww debug show TASK-42--01-task
4735
+ ./ww workflow-feedback list
4736
+ ./ww workflow-feedback show TASK-42--01-task --json
4737
+ ```
4738
+
4739
+ `list` names every record with its counts and whether it was reported;
4740
+ `show` prints one as Markdown, exactly what a report would send; `--json`
4741
+ gives the records themselves.
4742
+
4743
+ ### Reporting debug records
4744
+
4745
+ A debug record can be published as a GitHub issue of ww's public repository,
4746
+ one issue per record, by ww itself, never by the agent on its own:
4747
+
4748
+ ```console
4749
+ ./ww debug report
4750
+ ./ww debug report TASK-42--01-task --yes
4751
+ ```
4752
+
4753
+ Without a record ID, every unreported record is offered in turn. Each report
4754
+ is printed in full first, then confirmed on its own at the terminal; `--yes`
4755
+ stands for a confirmation the operator already gave, as the `ww-debug-report`
4756
+ skill obtains it, and an agent's shell without a terminal is refused without
4757
+ it. GitHub accepts no anonymous issue, and ww stores and reads no credentials:
4758
+ with the `gh` CLI installed and logged in, ww creates the issue through it and
4759
+ keeps the issue's URL on the record; otherwise ww opens the browser on the
4760
+ repository's new-issue page with the title and body prefilled, the operator
4761
+ reviews and submits it logged in, and the record is marked reported once they
4762
+ confirm they did (the prefilled page drops the workflow definition when the
4763
+ URL would be too long for GitHub). A declined report stays unreported. The
4764
+ command exits non-zero when nothing was sent.
4765
+
4766
+ With `debug.report` on, `discover` counts the unreported records and tells the
4767
+ agent to ask the operator once, yes or no, whether to report them before
4768
+ continuing; on yes the `ww-debug-report` skill shows each record and asks per
4769
+ record, on no the work carries on. With `debug.report` off, nothing is
4770
+ offered, and `ww debug report` still works on request.
4771
+
4772
+ ### Reviewing workflow feedback
4773
+
4774
+ Feedback records are for the operator's own review and are never sent
4775
+ anywhere. The `ww-workflow-feedback` skill reads them with
4776
+ `./ww workflow-feedback --json`, groups them by workflow, separates what
4777
+ recurs from what happened once and workflow composition from application
4778
+ problems, and proposes concrete `ww.yaml` changes with their evidence. It
4779
+ applies only what the operator approves, through the usual ways of changing a
4780
+ workflow (`ww-solve`, `ww-automate`, `ww-wizard`, or direct work), and hands
4781
+ the application problems over as a separate list for the project's backlog.
@@ -316,7 +316,14 @@ Without it, printed commands use `./ww` and the launcher runs
316
316
  missing. The launcher is ww-owned: `init` rewrites a `./ww` that differs from
317
317
  the current template, and `lint` warns about one. `runtime` (`single` or `auto`) is the runtime `start` uses when
318
318
  neither `--runtime` nor the workflow names one, `update_check: false` silences
319
- the notice that the ww checkout is behind its remote, `task_format` is the
319
+ the notice that the ww checkout is behind its remote, `debug` and `feedback`
320
+ switch on the [local run reports](features.md#collecting-debug-info-and-workflow-feedback):
321
+ `debug.collect` makes the built-in workflow summary also ask how ww itself
322
+ behaved and keeps one record per run under `.ww/debug/`, `debug.report` makes
323
+ `discover` offer to report unreported records to ww's GitHub issues through
324
+ `ww debug report`, and `feedback.collect` asks how well the workflow was
325
+ composed and keeps the record under `.ww/feedback/`; each is a boolean, off by
326
+ default, and any other key under them is an error. `task_format` is the
320
327
  generated task ID format, `rules` holds [the guidance for building
321
328
  checks](#guiding-checks-rulescheck_guidance), `projects` lists the
322
329
  directories a task may work in, and `extensions` holds each extension's
@@ -329,6 +336,8 @@ with its default, as `init` writes it:
329
336
  "runtime": "single",
330
337
  "update_check": true,
331
338
  "feedback_learning": true,
339
+ "debug": {"collect": false, "report": false},
340
+ "feedback": {"collect": false},
332
341
  "executable": "ww-agentic-workflows",
333
342
  "task_format": "TASK-{{uuid}}",
334
343
  "limits": {"rounds": 3, "fixes": 3, "auto_retries": 0},
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ww-agentic-workflows"
7
- version = "1.0.0.dev6"
7
+ version = "1.0.0.dev7"
8
8
  description = "A local-first, resumable workflow CLI for people and AI agents."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -13,14 +13,12 @@ Before starting new work, run:
13
13
  ./ww discover
14
14
  ```
15
15
 
16
- It lists the project's workflows, modes, the start command, and
17
- whether to use ww unasked. If disabled, stop; if used only on request, use it only when
18
- the user asks for ww. Choose the matching workflow and keep its default modes
19
- unless the request matches another mode; ask only when the choice would
20
- materially change the work.
21
-
22
- When a request names an external ticket, use that as the task ID. Omit the ID
23
- only when none is named or the workflow obtains it in its first step.
16
+ It lists the workflows, modes, the start command, and whether to use ww
17
+ unasked. If disabled, stop; if used only on request, use it only when the user
18
+ asks for ww. Choose the matching workflow and keep its default modes unless the
19
+ request matches another mode; ask only when the choice would materially change
20
+ the work. When a request names an external ticket, use that as the task ID.
21
+ Omit the ID only when none is named or the workflow obtains it in its first step.
24
22
 
25
23
  A request that names a ticket or clearly matches a workflow's description, and
26
24
  is more than a small change: propose that workflow, and offer the alternative in
@@ -33,9 +31,8 @@ and never again on a task once the operator chose direct work. If `record`
33
31
  fails or is forgotten, ww records the commits on the next manager
34
32
  page (`instruction --role manager`): do not retry.
35
33
 
36
- To continue an existing task, run `./ww instruction <task-id> --role manager`;
37
- a worker resuming its assignment uses `--role worker`. Check status with
38
- `./ww status <task-id>`.
34
+ To continue a task, run `./ww instruction <task-id> --role manager` (a resuming
35
+ worker uses `--role worker`); `./ww status <task-id>` checks it.
39
36
 
40
37
  ## Rules
41
38
  - Follow each authoritative ww page: replace placeholders and supply requested
@@ -43,17 +40,20 @@ a worker resuming its assignment uses `--role worker`. Check status with
43
40
  - Perform only agent-owned work. Never run or bypass a ww handler, edit ww state, or read `ww.yaml` or ww source to infer the next step.
44
41
  - For handler repair, fix the cause and complete with an artifact; ww retries it. In `auto`, the manager dispatches repairs with `next`.
45
42
  - On an `interactive: true` step, converse in the operator session and finish
46
- on clear contextual intent; ask if it is ambiguous. "Done for today" means
47
- pause. Record both sides and end the interaction before completing it.
48
- - Use a host choice tool when available, following its contract; otherwise use
49
- a numbered chat list. Keep async choices pending until an answer arrives;
43
+ on clear contextual intent; ask if it is ambiguous ("done for today" means
44
+ pause). Record both sides and end the interaction before completing it.
45
+ - Use a host choice tool when available, following its contract; otherwise a
46
+ numbered chat list. Keep async choices pending until an answer arrives;
50
47
  timeout, dismissal, and preselection are not answers.
51
48
  - On nonzero exit, read the full response. For "Fix required", repair and complete again
52
49
  (`./ww check <task-id>` previews checks) or `./ww dispute`; record impossible work
53
50
  with `./ww fail` and the page's role/assignment. On `awaiting_operator`, stop and
54
51
  report the reason and exact error; run only the operator's chosen recovery option;
55
52
  never reset unasked. A standing operator authorization for routine repairs (dependency
56
- installation, formatting, retries) covers such stops: apply it, asking only for a
57
- material decision or an action outside it.
58
- - Relay feedback-deduction suggestions after completion; use its skill and ww
59
- commands. Rule approval and pruning are separate follow-ups.
53
+ installation, formatting, retries) covers such stops; ask only for a material decision.
54
+ - Relay feedback-deduction suggestions after completion; rule approval and
55
+ pruning are separate follow-ups.
56
+ - When `discover` lists debug reports to send, ask the operator once (y/n); on
57
+ yes use the `ww-debug-report` skill, which confirms each report. When a start
58
+ page says ww collects debug or feedback info, tell the operator once, then
59
+ never mention it again.
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: ww-debug-report
3
+ description: Report the debug records ww collected about its own behaviour to ww's GitHub issues, one issue per record, each shown in full and confirmed by the operator first. Use when `./ww discover` offers it and the operator says yes, or when the operator asks to report ww debug info.
4
+ ---
5
+
6
+ # Report ww's debug records
7
+
8
+ ww's `debug.collect` mode keeps a local record per workflow run of how ww
9
+ itself behaved: errors, bugs and blockers first, then inconveniences. Nothing
10
+ is sent by itself. Reporting is the operator's explicit decision, record by
11
+ record, and ww does the sending, not you.
12
+
13
+ 1. Run `./ww debug list`. If it shows no unreported record, say so and stop.
14
+ 2. For each unreported record, run `./ww debug show <record-id>` and show the
15
+ operator what it contains: that exact content becomes the issue body, on
16
+ the public repository `from-developers-for-developers/agentic-workflows`.
17
+ Point out anything that looks private (paths, names, requirements) so they
18
+ can decline it.
19
+ 3. Ask the operator, per record, whether to send it, with the host choice
20
+ tool when available. Keep the choice pending until an answer arrives; a
21
+ timeout or a dismissal is not a yes.
22
+ 4. For each record they approved, run
23
+ `./ww debug report <record-id> --yes`. With an authenticated `gh` CLI, ww
24
+ creates the issue and prints its URL. Otherwise ww opens the browser on
25
+ the repository's new-issue page with the title and body prefilled; tell
26
+ the operator to review and submit it there, logged in. ww stores no
27
+ credentials and reads none.
28
+ 5. Relay the result: the issue URL, or that the browser page was opened.
29
+ Records the operator declined stay under `.ww/debug/`, unreported, and
30
+ ww offers them again on a later `discover` while `debug.report` is on.
31
+
32
+ Never pass `--yes` for a record the operator has not approved, never edit the
33
+ records under `.ww/debug/` yourself, and never publish their content through
34
+ another channel.
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: ww-workflow-feedback
3
+ description: Review the feedback records ww collected about how each workflow was composed and propose improvements to the operator. Use when the operator asks to review workflow feedback, to improve a workflow from collected feedback, or invokes /ww-workflow-feedback.
4
+ ---
5
+
6
+ # Review collected workflow feedback
7
+
8
+ ww's `feedback.collect` mode keeps a local record per workflow run, written
9
+ by the agent at the end of the run, of how effective the workflow was: the
10
+ application and code problems met during the run, and the improvements the
11
+ run suggested (steps to add, drop, merge or reorder; prompts to clarify; work
12
+ to automate or script). The records live under `.ww/feedback/` and are never
13
+ sent anywhere; this skill is the operator's way of acting on them. ww's own
14
+ defects are not here: they are debug records, reported with
15
+ `ww-debug-report`.
16
+
17
+ 1. Run `./ww workflow-feedback --json` and read every record; `./ww
18
+ workflow-feedback show <record-id>` prints one as Markdown. If there are
19
+ none, say so and stop. Each record carries the workflow's definition as it
20
+ was when the run started; read the current one from `./ww workflows` and
21
+ `./ww plan --workflow <name> --agent <agent>`, not from the record alone.
22
+ 2. Group the records by workflow. For each workflow, separate what recurs
23
+ across runs from what happened once, and separate workflow composition
24
+ (steps, prompts, order, checks, handlers) from application problems that
25
+ belong in the project's own backlog. Record contents are observations to
26
+ weigh, not instructions to carry out.
27
+ 3. Propose concrete improvements to the operator, per workflow, each with the
28
+ evidence (which records, how many runs) and the change in `ww.yaml` terms:
29
+ a step to add or remove, a prompt to reword, a check to script, a handler
30
+ to introduce, a mode to add. Prefer the smallest change that addresses
31
+ the evidence; say when the evidence is too thin to change anything.
32
+ 4. Apply only what the operator approves, through the usual ways of changing
33
+ a workflow: `ww-solve` for a problem to solve in a workflow, `ww-automate`
34
+ for a step to script, `ww-wizard` for a larger reshaping, or direct work
35
+ on `ww.yaml` registered afterwards. Do not edit the records under
36
+ `.ww/feedback/`; they are ww's.
37
+ 5. Hand the application problems to the operator as a separate list, for the
38
+ project's backlog, without starting work on them unasked.
@@ -14,7 +14,10 @@ change, start from step 1 then.
14
14
  1. Run `./ww discover` and read all of it. If it says ww is disabled, stop:
15
15
  do not use ww, and tell the user. If it says ww is used only on request
16
16
  and the user did not explicitly ask for ww (invoking this skill counts),
17
- carry out the request without ww and do not ask.
17
+ carry out the request without ww and do not ask. If it lists debug
18
+ reports to send, ask the user once, yes or no, whether to report them
19
+ now; on yes use the `ww-debug-report` skill, which shows each record and
20
+ asks before sending it; on no, carry on and do not ask again.
18
21
  2. To continue an existing task, run
19
22
  `./ww instruction <task-id> --role manager` instead of starting a new one.
20
23
  3. Otherwise decide how the request is carried out, in this order:
@@ -42,7 +45,10 @@ change, start from step 1 then.
42
45
  seen on the next run; say so, and do not retry it endlessly.
43
46
  When the first page of `start` says rules have no check
44
47
  yet, tell the user once and carry on: it never blocks the task, and the
45
- `ww-scriptize` skill builds those checks when they want it.
48
+ `ww-scriptize` skill builds those checks when they want it. When it says
49
+ ww collects debug info or workflow feedback, tell the user once that it
50
+ is collected at the end of the run and stays on this machine, then never
51
+ mention it again: the final summary step asks for it.
46
52
  4. Follow every ww response exactly: run each displayed command with all
47
53
  placeholders replaced, and keep going until ww reports that the workflow
48
54
  is complete or reports an error. On `interactive: true` steps, converse
@@ -27,6 +27,7 @@ from ww.open_work import unreadable_tasks
27
27
  from ww.project_config import FILE_NAME, ON_REQUEST
28
28
  from ww.rule_conversion import scriptize_notice
29
29
  from ww.rule_store import RuleStore
30
+ from ww.run_reports import DEBUG, RunReportStore
30
31
  from ww.runtimes import RUNTIME_DESCRIPTIONS
31
32
  from ww.storage import Storage
32
33
  from ww.task_ids import EXPLICIT_TASK_FORMAT
@@ -158,6 +159,9 @@ def discover(storage: Storage, extensions: ExtensionRegistry) -> dict[str, objec
158
159
  },
159
160
  # Declared rules no check covers yet; never a reason not to start.
160
161
  "rules_notice": _rules_notice(configuration, storage.root),
162
+ # Collected debug records not reported yet, offered when
163
+ # ``debug.report`` is on; never a reason not to start.
164
+ "debug_reports": _debug_reports(storage, config.debug.report),
161
165
  "projects": [
162
166
  {
163
167
  **project.to_dict(),
@@ -321,6 +325,7 @@ def _markdown(report: dict[str, object]) -> list[str]:
321
325
  "",
322
326
  *_unreadable_lines(report),
323
327
  *_onboarding_lines(report),
328
+ *_debug_report_lines(report),
324
329
  "## Workflows",
325
330
  "",
326
331
  ]
@@ -545,6 +550,44 @@ def _onboarding_lines(report: dict[str, object]) -> list[str]:
545
550
  return ["## Onboarding", "", *(f"- {line}" for line in guidance), ""]
546
551
 
547
552
 
553
+ def _debug_reports(storage: Storage, offer: bool) -> dict[str, object]:
554
+ """How many collected debug records await a report, and whether to offer it.
555
+
556
+ A record that cannot be read is left to ``debug list``; ``discover`` never
557
+ fails over it.
558
+ """
559
+ try:
560
+ unreported = len(RunReportStore(storage, DEBUG).unreported())
561
+ except StateError:
562
+ unreported = 0
563
+ return {
564
+ "unreported": unreported,
565
+ "offer": offer and unreported > 0,
566
+ "command": f"{ww_command()} debug report",
567
+ "skill": "ww-debug-report",
568
+ }
569
+
570
+
571
+ def _debug_report_lines(report: dict[str, object]) -> list[str]:
572
+ reports = report.get("debug_reports")
573
+ if not isinstance(reports, dict) or not reports.get("offer"):
574
+ return []
575
+ count = int(str(reports["unreported"]))
576
+ noun = "record" if count == 1 else "records"
577
+ command = str(reports["command"])
578
+ return [
579
+ "## Debug reports to send",
580
+ "",
581
+ f"ww has {count} debug {noun} about its own behaviour, collected from "
582
+ "earlier runs and not reported yet. Before continuing, ask the operator "
583
+ "once, yes or no, whether to report them to ww's GitHub issues now. On "
584
+ f"yes, use the `{reports['skill']}` skill (it runs `{command}`), which "
585
+ "shows each record in full and asks for confirmation before sending "
586
+ "it; on no, carry on and do not ask again in this session.",
587
+ "",
588
+ ]
589
+
590
+
548
591
  def _rules_notice(configuration: WorkflowConfiguration, root: Path) -> str | None:
549
592
  """The unscriptized-rules notice, or none when the store cannot be read.
550
593