mapify-cli 3.14.0__tar.gz → 3.15.1__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 (409) hide show
  1. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/PKG-INFO +1 -1
  2. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/pyproject.toml +1 -1
  3. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/__init__.py +1 -1
  4. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/agents/researcher.toml +32 -26
  5. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +16 -13
  6. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +8 -2
  7. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/post-compact-context.py +1 -1
  8. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/workflow-context-injector.py +1 -1
  9. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/workflow-gate.py +16 -13
  10. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +35 -16
  11. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/map_step_runner.py +320 -1
  12. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/step-state-schema.md +2 -3
  13. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +7 -6
  14. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-plan/SKILL.md +1 -0
  15. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-task/SKILL.md +1 -1
  16. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +32 -26
  17. {mapify_cli-3.14.0/src/mapify_cli/templates_src → mapify_cli-3.15.1/src/mapify_cli/templates_src/codex}/hooks/workflow-gate.py.jinja +16 -13
  18. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +8 -2
  19. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +1 -1
  20. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +1 -1
  21. {mapify_cli-3.14.0/src/mapify_cli/templates_src/codex → mapify_cli-3.15.1/src/mapify_cli/templates_src}/hooks/workflow-gate.py.jinja +16 -13
  22. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +35 -16
  23. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +320 -1
  24. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +2 -3
  25. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +7 -6
  26. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +1 -0
  27. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +1 -1
  28. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/test_e2e_artifact_contracts.py +36 -4
  29. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_map_orchestrator.py +57 -4
  30. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_map_step_runner.py +117 -0
  31. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills.py +53 -0
  32. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_workflow_gate.py +2 -1
  33. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/.claude/hooks/README.md +0 -0
  34. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/.claude/skills/README.md +0 -0
  35. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/.gitignore +0 -0
  36. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/LICENSE +0 -0
  37. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/README.md +0 -0
  38. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/_locking.py +0 -0
  39. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/cli_ui.py +0 -0
  40. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/config/__init__.py +0 -0
  41. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/config/mcp.py +0 -0
  42. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/config/project_config.py +0 -0
  43. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/config/settings.py +0 -0
  44. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/__init__.py +0 -0
  45. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/agent_generator.py +0 -0
  46. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/codex_copier.py +0 -0
  47. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/file_copier.py +0 -0
  48. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  49. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/providers.py +0 -0
  50. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/delivery/template_renderer.py +0 -0
  51. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/dependency_graph.py +0 -0
  52. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/intent_detector.py +0 -0
  53. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/memory/__init__.py +0 -0
  54. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/memory/capture.py +0 -0
  55. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/memory/digest_schema.py +0 -0
  56. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/memory/finalize.py +0 -0
  57. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/memory/recall.py +0 -0
  58. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/ralph_state.py +0 -0
  59. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/repo_insight.py +0 -0
  60. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/schemas.py +0 -0
  61. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skill_ir.py +0 -0
  62. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/__init__.py +0 -0
  63. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  64. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  65. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/assertions.py +0 -0
  66. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  67. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  68. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  69. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/proposer.py +0 -0
  70. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/runner.py +0 -0
  71. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/skills_eval/viewer.py +0 -0
  72. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/.gitignore +0 -0
  73. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/CLAUDE.md +0 -0
  74. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/actor.md +0 -0
  75. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/debate-arbiter.md +0 -0
  76. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
  77. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  78. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
  79. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/monitor.md +0 -0
  80. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/predictor.md +0 -0
  81. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/reflector.md +0 -0
  82. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/research-agent.md +0 -0
  83. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/synthesizer.md +0 -0
  84. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
  85. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  86. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
  87. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
  88. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/config.toml +0 -0
  89. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/hooks.json +0 -0
  90. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  91. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
  92. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
  93. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  94. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
  95. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/README.md +0 -0
  96. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  97. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  98. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  99. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  100. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  101. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  102. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  103. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  104. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
  105. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  106. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  107. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
  108. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  109. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  110. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  111. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
  112. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  113. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
  114. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
  115. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
  116. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  117. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
  118. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  119. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
  120. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  121. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  122. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
  123. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/host-paths.md +0 -0
  124. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  125. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  126. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  127. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  128. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  129. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  130. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/settings.json +0 -0
  131. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/README.md +0 -0
  132. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
  133. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  134. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  135. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
  136. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
  137. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  138. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  139. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  140. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  141. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  142. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  143. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
  144. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
  145. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
  146. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  147. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
  148. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
  149. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  150. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  151. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  152. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
  153. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  154. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  155. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
  156. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  157. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
  158. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  159. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  160. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  161. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
  162. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
  163. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
  164. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates/workflow-rules.json +0 -0
  165. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
  166. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
  167. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
  168. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -0
  169. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
  170. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  171. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
  172. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
  173. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  174. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  175. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
  176. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -0
  177. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
  178. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  179. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
  180. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
  181. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  182. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  183. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  184. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
  185. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
  186. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  187. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
  188. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
  189. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  190. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  191. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  192. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  193. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  194. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  195. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  196. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  197. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
  198. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  199. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  200. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
  201. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  202. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  203. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  204. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
  205. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  206. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
  207. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
  208. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
  209. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  210. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
  211. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  212. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
  213. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  214. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  215. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
  216. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  217. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  218. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  219. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  220. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  221. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  222. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  223. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
  224. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  225. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
  226. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  227. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  228. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
  229. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
  230. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  231. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  232. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  233. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  234. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  235. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  236. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
  237. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
  238. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
  239. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  240. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
  241. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
  242. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  243. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  244. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  245. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
  246. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  247. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  248. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
  249. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  250. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
  251. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  252. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  253. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  254. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
  255. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
  256. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
  257. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  258. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/token_budget.py +0 -0
  259. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/tools/__init__.py +0 -0
  260. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  261. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/verification_recorder.py +0 -0
  262. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/workflow_finalizer.py +0 -0
  263. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/workflow_logger.py +0 -0
  264. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/src/mapify_cli/workflow_state.py +0 -0
  265. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/__init__.py +0 -0
  266. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/conftest.py +0 -0
  267. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/fixtures/claude/escalation-matrix.md +0 -0
  268. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/fixtures/codex/config.toml +0 -0
  269. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  270. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/hooks/test_end_of_turn.py +0 -0
  271. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/hooks/test_hook_inventory_smoke.py +0 -0
  272. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/hooks/test_safety_guardrails.py +0 -0
  273. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/__init__.py +0 -0
  274. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/blueprint.json +0 -0
  275. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/code_review.md +0 -0
  276. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/plan_handoff.json +0 -0
  277. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/spec.md +0 -0
  278. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/step_state_initialized.json +0 -0
  279. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  280. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/task_plan.md +0 -0
  281. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/fixtures/verification_summary.md +0 -0
  282. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/integration/test_e2e_claude_sdk.py +0 -0
  283. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/README.md +0 -0
  284. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  285. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  286. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  287. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  288. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  289. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  290. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  291. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  292. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  293. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  294. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  295. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  296. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  297. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  298. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  299. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  300. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  301. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  302. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  303. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  304. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  305. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  306. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  307. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  308. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  309. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  310. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  311. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  312. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  313. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  314. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  315. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  316. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  317. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  318. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  319. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  320. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  321. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  322. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  323. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  324. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  325. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  326. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  327. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  328. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  329. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  330. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  331. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  332. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  333. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  334. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  335. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  336. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  337. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  338. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  339. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  340. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  341. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  342. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  343. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  344. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  345. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  346. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  347. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  348. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  349. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  350. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  351. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  352. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  353. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  354. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  355. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  356. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_agent_cli_correctness.py +0 -0
  357. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_agent_frontmatter.py +0 -0
  358. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_artifact_schemas.py +0 -0
  359. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_bump_version.py +0 -0
  360. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_decomposition.py +0 -0
  361. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_dependency_graph.py +0 -0
  362. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_diagnostics.py +0 -0
  363. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_digest_schema.py +0 -0
  364. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_file_copier.py +0 -0
  365. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_hook_patterns.py +0 -0
  366. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_init_import_graph.py +0 -0
  367. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_intent_detector.py +0 -0
  368. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  369. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_jinja2_dep.py +0 -0
  370. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_locking.py +0 -0
  371. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_managed_file_copier.py +0 -0
  372. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_map_token_meter.py +0 -0
  373. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_map_utils_sanitize.py +0 -0
  374. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_mapify_cli.py +0 -0
  375. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_memory_capture.py +0 -0
  376. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_memory_finalize.py +0 -0
  377. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_memory_integration.py +0 -0
  378. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_memory_recall.py +0 -0
  379. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_memory_review_fixes.py +0 -0
  380. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_post_compact_context.py +0 -0
  381. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_ralph_hooks.py +0 -0
  382. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_ralph_state.py +0 -0
  383. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_repo_insight.py +0 -0
  384. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_schemas.py +0 -0
  385. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skill_ir.py +0 -0
  386. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_consistency.py +0 -0
  387. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_aggregator.py +0 -0
  388. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_apply.py +0 -0
  389. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_cli_optimize.py +0 -0
  390. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_dispatcher_env.py +0 -0
  391. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  392. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_fixtures.py +0 -0
  393. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_optimizer.py +0 -0
  394. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  395. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_proposer.py +0 -0
  396. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_runner.py +0 -0
  397. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_schema.py +0 -0
  398. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_skills_eval_viewer.py +0 -0
  399. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_sofa_client.py +0 -0
  400. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_sofa_search.py +0 -0
  401. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_template_render.py +0 -0
  402. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_token_budget.py +0 -0
  403. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_validate_dependencies.py +0 -0
  404. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_validate_spec_citations.py +0 -0
  405. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_verification_recorder.py +0 -0
  406. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_workflow_context_injector.py +0 -0
  407. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_workflow_finalizer.py +0 -0
  408. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_workflow_logger.py +0 -0
  409. {mapify_cli-3.14.0 → mapify_cli-3.15.1}/tests/test_workflow_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapify-cli
3
- Version: 3.14.0
3
+ Version: 3.15.1
4
4
  Summary: MAP Framework installer - Modular Agentic Planner for Claude Code
5
5
  Project-URL: Homepage, https://github.com/azalio/map-framework
6
6
  Project-URL: Repository, https://github.com/azalio/map-framework.git
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.14.0"
3
+ version = "3.15.1"
4
4
  description = "MAP Framework installer - Modular Agentic Planner for Claude Code"
5
5
  authors = [{ name = "MAP Framework Contributors" }]
6
6
  readme = "README.md"
@@ -23,7 +23,7 @@ Or install globally:
23
23
  mapify check
24
24
  """
25
25
 
26
- __version__ = "3.14.0"
26
+ __version__ = "3.15.1"
27
27
 
28
28
  import os
29
29
  import subprocess
@@ -8,40 +8,46 @@ You are a research agent. Your job is to explore the codebase and gather actiona
8
8
  findings for downstream agents (decomposer, actor). You do NOT implement anything.
9
9
  You observe, summarize, and report.
10
10
 
11
- ## OUTPUT FORMAT
11
+ ## OUTPUT FORMAT (STRICT JSON)
12
12
 
13
- Write ONLY to the findings file specified in your task.
14
- Structure findings exactly as follows:
13
+ Write ONLY one JSON object to the findings file specified in your task. Do not
14
+ wrap it in markdown or prose. The downstream `validate_research` gate rejects
15
+ malformed JSON, missing confidence, missing line ranges, unsafe paths, and more
16
+ than 5 locations.
15
17
 
16
18
  ```
17
- ## Findings: <topic>
18
-
19
- ### Relevant Files
20
- - path/to/file.py:L10-L50 — description of what's there
21
- - path/to/other.py:L3-L20 — description
22
-
23
- ### Key Patterns
24
- - Pattern name: how it works, where it's used
25
- - Pattern name: how it works, where it's used
26
-
27
- ### Dependencies
28
- - External: list of external deps relevant to the task
29
- - Internal: list of internal modules that interact
30
-
31
- ### Constraints Discovered
32
- - Constraint 1: description
33
- - Constraint 2: description
34
-
35
- ### Recommendations
36
- - Recommendation for implementation approach
19
+ {
20
+ "confidence": 0.85,
21
+ "status": "OK",
22
+ "search_method": "glob_grep",
23
+ "search_stats": {
24
+ "files_scanned": 50,
25
+ "total_matches_found": 23,
26
+ "results_truncated": true
27
+ },
28
+ "executive_summary": "One paragraph summary, max 100 words",
29
+ "relevant_locations": [
30
+ {
31
+ "path": "src/auth/service.py",
32
+ "lines": [45, 67],
33
+ "signature": "def validate_token(token: str) -> User",
34
+ "relevance": "Core JWT validation with expiry check",
35
+ "relevance_score": 0.95,
36
+ "has_intent": true
37
+ }
38
+ ],
39
+ "patterns_discovered": ["JWT with HS256", "decorator-based auth"]
40
+ }
37
41
  ```
38
42
 
43
+ Status values: `OK`, `PARTIAL_RESULTS`, `NO_RESULTS`, `SEARCH_FAILED`.
44
+
39
45
  ## RULES
40
46
 
41
47
  1. Target: under 1500 tokens in the findings file.
42
- 2. Include: file paths, line ranges, function signatures, import patterns.
43
- 3. Exclude: raw search output, full file contents, speculation.
44
- 4. Use shell commands (find, rg/grep, cat) to search the codebase.
48
+ 2. Include: safe relative file paths, inclusive line ranges, function signatures, import patterns.
49
+ 3. Exclude: raw search output, full file contents, markdown fences, speculation.
50
+ 4. Return at most 5 `relevant_locations`, prioritized by relevance.
45
51
  5. Read files to understand patterns — do not guess.
46
52
  6. Focus on WHAT EXISTS, not what should be built.
47
53
  7. If the task mentions external libraries, note their current usage patterns in the codebase.
@@ -43,11 +43,12 @@ EDITING_PHASES = {"ACTOR", "APPLY", "TEST_WRITER"}
43
43
 
44
44
  # Docs-only file suffixes / path prefixes that are permitted during
45
45
  # RESEARCH (2.2). A docs-only subtask (runbook update, README tweak,
46
- # CHANGELOG line) doesn't benefit from research-agent investigation,
47
- # but the unconditional RESEARCH gate forced operators to save an
48
- # empty research stub before they could edit a .md file. Allowing
49
- # obvious docs surfaces during RESEARCH preserves the intent (block
50
- # code edits before research) without the friction.
46
+ # CHANGELOG line) usually doesn't need delegated research-agent
47
+ # investigation, but the unconditional RESEARCH edit gate forced
48
+ # operators to save an empty research stub before they could edit a .md
49
+ # file. Allowing obvious docs surfaces during RESEARCH preserves the
50
+ # intent (block code edits before research) without the friction; the
51
+ # state machine still requires a persisted artifact before Actor closes.
51
52
  DOCS_ONLY_EXTENSIONS = {".md", ".mdx", ".rst", ".txt", ".adoc"}
52
53
  DOCS_ONLY_PATH_PREFIXES = ("docs/", "doc/", "documentation/", "CHANGELOG", "RELEASING", "README")
53
54
 
@@ -120,12 +121,12 @@ def extract_target_file_paths(tool_call: dict) -> list[str]:
120
121
  def is_docs_only_path(file_path: str) -> bool:
121
122
  """Return True if path is documentation that may be edited during RESEARCH.
122
123
 
123
- RESEARCH (2.2) blocks Edit by default — research-agent must run
124
- before code mutation. Docs surfaces (README, runbook, CHANGELOG)
125
- don't benefit from research-agent, so the unconditional block
126
- forced operators to save an empty research stub. Allowing docs
127
- files during RESEARCH preserves the intent (no code edits before
128
- research) without the friction.
124
+ RESEARCH (2.2) blocks Edit by default — a persisted research
125
+ artifact must exist before code mutation. Docs surfaces (README,
126
+ runbook, CHANGELOG) usually don't need delegated research-agent, so
127
+ the unconditional edit block forced operators to save an empty
128
+ research stub. Allowing docs files during RESEARCH preserves the
129
+ intent (no code edits before research) without the friction.
129
130
  """
130
131
  if not isinstance(file_path, str) or not file_path.strip():
131
132
  return False
@@ -390,8 +391,10 @@ def is_editing_phase(branch: str) -> tuple[bool, Optional[str]]:
390
391
  "Required:\n"
391
392
  f" 1. echo '<findings>' | python3 .map/scripts/map_step_runner.py \\\n"
392
393
  f" save_research <branch> {subtask} # default kind=actor\n"
393
- f" 2. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
394
- " 3. Then Edit/Write opens (ACTOR phase).\n"
394
+ f" 2. python3 .map/scripts/map_step_runner.py validate_research \\\n"
395
+ f" <branch> {subtask}\n"
396
+ f" 3. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
397
+ " 4. Then Edit/Write opens (ACTOR phase).\n"
395
398
  "\n"
396
399
  f"Note: this block is scoped to {subtask}'s affected_files. Edits to\n"
397
400
  "files OUTSIDE that surface (orthogonal hotfixes, repo-root config,\n"
@@ -159,13 +159,19 @@ fi
159
159
 
160
160
  ### RESEARCH
161
161
 
162
- Use `researcher` when independent exploration is useful; otherwise research in
163
- the current session. Persist concise findings before Actor work:
162
+ Persist a RESEARCH artifact for every non-no-op subtask before Actor. Use
163
+ `researcher` when independent exploration is useful: cold-start repository
164
+ exploration, 3+ existing files, high risk, unclear locations, or failed direct
165
+ search. Otherwise research in the current session and save concise strict-JSON
166
+ findings. If the subtask truly needs no Actor/Monitor, use
167
+ `mark_subtask_complete --reason` instead of closing RESEARCH. Validate the
168
+ research contract, then close RESEARCH before Actor work:
164
169
 
165
170
  ```bash
166
171
  SUBTASK_ID=$(jq -r '.current_subtask_id' ".map/${BRANCH}/step_state.json")
167
172
  printf '%s' "$RESEARCH_FINDINGS" | \
168
173
  python3 .map/scripts/map_step_runner.py save_research "$BRANCH" "$SUBTASK_ID"
174
+ python3 .map/scripts/map_step_runner.py validate_research "$BRANCH" "$SUBTASK_ID"
169
175
  python3 .map/scripts/map_orchestrator.py validate_step "$STEP_ID"
170
176
  ```
171
177
 
@@ -24,7 +24,7 @@ REPRIME_LIMIT = 1200
24
24
  STEP_REQUIRED_ACTIONS = {
25
25
  "1.55": "Approve plan before execution state is initialized.",
26
26
  "1.56": "Choose execution mode before implementation.",
27
- "2.2": "Run research-agent before Actor if context gathering is required.",
27
+ "2.2": "Persist a RESEARCH artifact before Actor; delegate only when broad discovery is required.",
28
28
  "2.3": "Implement only the current subtask, then run Monitor.",
29
29
  "2.4": "Run Monitor and treat valid=false as a hard stop.",
30
30
  }
@@ -344,7 +344,7 @@ def required_action_for_step(step_id: str, step_phase: str) -> str | None:
344
344
  if step_id == "1.56":
345
345
  return "Choose mode (set_execution_mode step_by_step|batch)"
346
346
  if step_id == "2.2":
347
- return "Run research-agent (conditional: 3+ existing files or high risk)"
347
+ return "Persist RESEARCH artifact (research-agent only for broad/high-risk discovery)"
348
348
  if step_id == "2.3":
349
349
  return "Run Actor"
350
350
  if step_id == "2.4":
@@ -43,11 +43,12 @@ EDITING_PHASES = {"ACTOR", "APPLY", "TEST_WRITER"}
43
43
 
44
44
  # Docs-only file suffixes / path prefixes that are permitted during
45
45
  # RESEARCH (2.2). A docs-only subtask (runbook update, README tweak,
46
- # CHANGELOG line) doesn't benefit from research-agent investigation,
47
- # but the unconditional RESEARCH gate forced operators to save an
48
- # empty research stub before they could edit a .md file. Allowing
49
- # obvious docs surfaces during RESEARCH preserves the intent (block
50
- # code edits before research) without the friction.
46
+ # CHANGELOG line) usually doesn't need delegated research-agent
47
+ # investigation, but the unconditional RESEARCH edit gate forced
48
+ # operators to save an empty research stub before they could edit a .md
49
+ # file. Allowing obvious docs surfaces during RESEARCH preserves the
50
+ # intent (block code edits before research) without the friction; the
51
+ # state machine still requires a persisted artifact before Actor closes.
51
52
  DOCS_ONLY_EXTENSIONS = {".md", ".mdx", ".rst", ".txt", ".adoc"}
52
53
  DOCS_ONLY_PATH_PREFIXES = ("docs/", "doc/", "documentation/", "CHANGELOG", "RELEASING", "README")
53
54
 
@@ -120,12 +121,12 @@ def extract_target_file_paths(tool_call: dict) -> list[str]:
120
121
  def is_docs_only_path(file_path: str) -> bool:
121
122
  """Return True if path is documentation that may be edited during RESEARCH.
122
123
 
123
- RESEARCH (2.2) blocks Edit by default — research-agent must run
124
- before code mutation. Docs surfaces (README, runbook, CHANGELOG)
125
- don't benefit from research-agent, so the unconditional block
126
- forced operators to save an empty research stub. Allowing docs
127
- files during RESEARCH preserves the intent (no code edits before
128
- research) without the friction.
124
+ RESEARCH (2.2) blocks Edit by default — a persisted research
125
+ artifact must exist before code mutation. Docs surfaces (README,
126
+ runbook, CHANGELOG) usually don't need delegated research-agent, so
127
+ the unconditional edit block forced operators to save an empty
128
+ research stub. Allowing docs files during RESEARCH preserves the
129
+ intent (no code edits before research) without the friction.
129
130
  """
130
131
  if not isinstance(file_path, str) or not file_path.strip():
131
132
  return False
@@ -390,8 +391,10 @@ def is_editing_phase(branch: str) -> tuple[bool, Optional[str]]:
390
391
  "Required:\n"
391
392
  f" 1. echo '<findings>' | python3 .map/scripts/map_step_runner.py \\\n"
392
393
  f" save_research <branch> {subtask} # default kind=actor\n"
393
- f" 2. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
394
- " 3. Then Edit/Write opens (ACTOR phase).\n"
394
+ f" 2. python3 .map/scripts/map_step_runner.py validate_research \\\n"
395
+ f" <branch> {subtask}\n"
396
+ f" 3. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
397
+ " 4. Then Edit/Write opens (ACTOR phase).\n"
395
398
  "\n"
396
399
  f"Note: this block is scoped to {subtask}'s affected_files. Edits to\n"
397
400
  "files OUTSIDE that surface (orthogonal hotfixes, repo-root config,\n"
@@ -41,7 +41,7 @@ STEP PHASES (10 total, 8 standard + 2 TDD):
41
41
  1.55 REVIEW_PLAN - User review + explicit approval checkpoint
42
42
  1.56 CHOOSE_MODE - Auto-skipped (always batch mode)
43
43
  1.6 INIT_STATE - Create step_state.json (single source of truth)
44
- 2.2 RESEARCH - research-agent (mandatory for all subtasks)
44
+ 2.2 RESEARCH - persisted research artifact (mandatory; research-agent conditional)
45
45
  2.25 TEST_WRITER - TDD: write tests from spec (TDD mode only)
46
46
  2.26 TEST_FAIL_GATE - TDD: verify tests fail without impl (TDD mode only)
47
47
  2.3 ACTOR - Actor agent implementation
@@ -771,11 +771,13 @@ def get_step_instruction(step_id: str, state: StepState) -> str:
771
771
  "Single source of truth for workflow enforcement."
772
772
  ),
773
773
  "2.2": (
774
- "Call Task(subagent_type='research-agent') to research the subtask, "
775
- "then persist findings via "
774
+ "Persist RESEARCH findings for the subtask via "
776
775
  "`python3 .map/scripts/map_step_runner.py save_research <branch> "
777
- "<subtask_id>`. MANDATORY for all subtasks (validate_step 2.2 "
778
- "rejects when no research artifact exists). "
776
+ "<subtask_id>`. The artifact is MANDATORY for every non-no-op "
777
+ "subtask (validate_step 2.2 rejects when none exists); "
778
+ "Task(subagent_type='research-agent') is conditional for broad, "
779
+ "high-risk, or unclear discovery. If the target file/symbol is "
780
+ "already known, save direct current-session findings instead. "
779
781
  "Short-circuit hint: if this subtask is already done in a prior "
780
782
  "PR or is a pure no-op, skip the cycle with "
781
783
  "`python3 .map/scripts/map_orchestrator.py mark_subtask_complete "
@@ -1332,23 +1334,40 @@ def validate_step(
1332
1334
  ),
1333
1335
  "recommendation": normalized_rec,
1334
1336
  }
1335
- # RESEARCH (2.2) is documented MANDATORY for every subtask — enforce that
1336
- # save_research wrote something before letting Actor proceed. Without this
1337
- # check, "MANDATORY" was prompt-text only and could be silently skipped.
1337
+ # RESEARCH (2.2) requires a persisted artifact for every non-no-op subtask.
1338
+ # The artifact can come from research-agent or direct current-session
1339
+ # findings; enforce the machine-checkable contract before Actor proceeds.
1340
+ # Without this check, "MANDATORY" was prompt-text only and malformed
1341
+ # markdown could be silently passed downstream.
1338
1342
  if step_id == "2.2" and state.current_subtask_id:
1339
- research_dir = Path(f".map/{branch}/research")
1340
- # Accept any kind of research artifact for this subtask.
1341
- if not research_dir.is_dir() or not any(
1342
- research_dir.glob(f"{state.current_subtask_id}__*.md")
1343
- ):
1343
+ try:
1344
+ from map_step_runner import validate_research # pyright: ignore[reportMissingImports]
1345
+ research_report = validate_research(branch, state.current_subtask_id)
1346
+ except ImportError:
1347
+ research_report = {
1348
+ "valid": False,
1349
+ "errors": ["map_step_runner.validate_research could not be imported"],
1350
+ }
1351
+ if not research_report.get("valid"):
1352
+ research_errors = research_report.get("errors")
1353
+ if isinstance(research_errors, list) and research_errors:
1354
+ detail = "; ".join(str(err) for err in research_errors[:3])
1355
+ else:
1356
+ detail = "research artifact is missing or invalid"
1344
1357
  return {
1345
1358
  "valid": False,
1346
1359
  "message": (
1347
- f"RESEARCH not persisted for {state.current_subtask_id}. "
1360
+ f"RESEARCH artifact invalid for {state.current_subtask_id}: "
1361
+ f"{detail}. "
1362
+ "Use research-agent for broad/high-risk/unclear discovery, "
1363
+ "or save direct current-session findings when the target is known. "
1348
1364
  f"Run: python3 .map/scripts/map_step_runner.py save_research "
1349
- f"<branch> {state.current_subtask_id} (defaults kind=actor) "
1350
- "before validate_step 2.2."
1365
+ f"<branch> {state.current_subtask_id} (defaults kind=actor), "
1366
+ "then validate_research before validate_step 2.2. If this "
1367
+ "subtask needs no Actor/Monitor, use mark_subtask_complete "
1368
+ "--reason instead."
1351
1369
  ),
1370
+ "research_report": research_report,
1352
1371
  }
1353
1372
  # Auto-snapshot per-subtask baseline at RESEARCH-complete so the
1354
1373
  # MONITOR-side validate_mutation_boundary check only flags files