mapify-cli 3.13.1__tar.gz → 3.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/PKG-INFO +3 -3
  2. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/README.md +2 -2
  3. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/pyproject.toml +1 -1
  4. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/__init__.py +1 -1
  5. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/agents/researcher.toml +32 -26
  6. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +4 -2
  7. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +3 -1
  8. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +26 -6
  9. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/workflow-gate.py +4 -2
  10. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +21 -9
  11. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +394 -1
  12. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +4 -3
  13. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +1 -0
  14. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +10 -1
  15. mapify_cli-3.15.0/src/mapify_cli/templates/skills/map-review/review-reference.md +69 -0
  16. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +32 -26
  17. {mapify_cli-3.13.1/src/mapify_cli/templates_src → mapify_cli-3.15.0/src/mapify_cli/templates_src/codex}/hooks/workflow-gate.py.jinja +4 -2
  18. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +3 -1
  19. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +26 -6
  20. {mapify_cli-3.13.1/src/mapify_cli/templates_src/codex → mapify_cli-3.15.0/src/mapify_cli/templates_src}/hooks/workflow-gate.py.jinja +4 -2
  21. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +21 -9
  22. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +394 -1
  23. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +4 -3
  24. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +1 -0
  25. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +10 -1
  26. mapify_cli-3.15.0/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +69 -0
  27. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/test_e2e_artifact_contracts.py +36 -4
  28. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_map_orchestrator.py +57 -4
  29. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_map_step_runner.py +150 -0
  30. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills.py +70 -0
  31. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_workflow_gate.py +2 -1
  32. mapify_cli-3.13.1/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -43
  33. mapify_cli-3.13.1/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -43
  34. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/.claude/hooks/README.md +0 -0
  35. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/.claude/skills/README.md +0 -0
  36. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/.gitignore +0 -0
  37. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/LICENSE +0 -0
  38. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/_locking.py +0 -0
  39. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/cli_ui.py +0 -0
  40. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/config/__init__.py +0 -0
  41. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/config/mcp.py +0 -0
  42. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/config/project_config.py +0 -0
  43. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/config/settings.py +0 -0
  44. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/__init__.py +0 -0
  45. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
  46. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
  47. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/file_copier.py +0 -0
  48. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  49. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/providers.py +0 -0
  50. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
  51. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/dependency_graph.py +0 -0
  52. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/intent_detector.py +0 -0
  53. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/memory/__init__.py +0 -0
  54. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/memory/capture.py +0 -0
  55. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/memory/digest_schema.py +0 -0
  56. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/memory/finalize.py +0 -0
  57. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/memory/recall.py +0 -0
  58. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/ralph_state.py +0 -0
  59. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/repo_insight.py +0 -0
  60. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/schemas.py +0 -0
  61. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skill_ir.py +0 -0
  62. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
  63. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  64. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  65. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
  66. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  67. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  68. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  69. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
  70. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/runner.py +0 -0
  71. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
  72. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/.gitignore +0 -0
  73. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
  74. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/actor.md +0 -0
  75. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/debate-arbiter.md +0 -0
  76. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
  77. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  78. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
  79. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/monitor.md +0 -0
  80. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
  81. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
  82. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
  83. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/synthesizer.md +0 -0
  84. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
  85. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  86. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
  87. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
  88. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/config.toml +0 -0
  89. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
  90. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  91. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
  92. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
  93. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  94. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
  95. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/README.md +0 -0
  96. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  97. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  98. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  99. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  100. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  101. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  102. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  103. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  104. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
  105. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
  106. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  107. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  108. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
  109. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  110. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  111. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  112. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
  113. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  114. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
  115. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
  116. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
  117. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  118. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
  119. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  120. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
  121. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  122. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  123. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
  124. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
  125. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  126. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  127. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  128. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  129. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
  130. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  131. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  132. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/settings.json +0 -0
  133. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/README.md +0 -0
  134. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
  135. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  136. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  137. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
  138. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
  139. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  140. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  141. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  142. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  143. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  144. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  145. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
  146. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
  147. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
  148. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  149. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  150. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  151. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  152. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
  153. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  154. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  155. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
  156. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  157. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
  158. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  159. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  160. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  161. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
  162. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
  163. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
  164. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
  165. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
  166. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
  167. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
  168. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
  169. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -0
  170. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
  171. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  172. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
  173. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
  174. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  175. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  176. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
  177. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -0
  178. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
  179. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  180. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
  181. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
  182. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  183. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  184. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  185. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
  186. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
  187. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  188. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
  189. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
  190. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  191. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  192. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  193. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  194. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  195. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  196. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  197. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  198. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
  199. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
  200. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  201. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  202. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
  203. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  204. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  205. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  206. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
  207. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  208. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
  209. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
  210. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
  211. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  212. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
  213. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  214. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
  215. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  216. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  217. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
  218. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  219. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  220. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  221. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  222. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  223. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
  224. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  225. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  226. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
  227. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  228. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
  229. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  230. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  231. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
  232. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
  233. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  234. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  235. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  236. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  237. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  238. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  239. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
  240. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
  241. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
  242. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  243. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  244. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  245. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  246. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
  247. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  248. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  249. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
  250. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  251. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
  252. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  253. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  254. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  255. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
  256. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
  257. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
  258. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
  259. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  260. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/token_budget.py +0 -0
  261. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/tools/__init__.py +0 -0
  262. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  263. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/verification_recorder.py +0 -0
  264. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/workflow_finalizer.py +0 -0
  265. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/workflow_logger.py +0 -0
  266. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/src/mapify_cli/workflow_state.py +0 -0
  267. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/__init__.py +0 -0
  268. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/conftest.py +0 -0
  269. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
  270. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/fixtures/codex/config.toml +0 -0
  271. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  272. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/hooks/test_end_of_turn.py +0 -0
  273. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
  274. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/hooks/test_safety_guardrails.py +0 -0
  275. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/__init__.py +0 -0
  276. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/blueprint.json +0 -0
  277. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/code_review.md +0 -0
  278. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/plan_handoff.json +0 -0
  279. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/spec.md +0 -0
  280. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
  281. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  282. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/task_plan.md +0 -0
  283. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/fixtures/verification_summary.md +0 -0
  284. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
  285. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/README.md +0 -0
  286. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  287. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  288. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  289. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  290. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  291. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  292. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  293. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  294. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  295. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  296. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  297. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  298. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  299. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  300. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  301. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  302. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  303. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  304. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  305. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  306. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  307. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  308. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  309. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  310. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  311. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  312. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  313. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  314. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  315. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  316. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  317. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  318. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  319. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  320. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  321. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  322. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  323. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  324. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  325. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  326. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  327. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  328. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  329. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  330. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  331. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  332. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  333. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  334. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  335. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  336. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  337. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  338. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  339. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  340. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  341. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  342. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  343. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  344. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  345. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  346. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  347. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  348. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  349. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  350. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  351. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  352. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  353. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  354. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  355. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  356. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  357. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  358. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_agent_cli_correctness.py +0 -0
  359. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_agent_frontmatter.py +0 -0
  360. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_artifact_schemas.py +0 -0
  361. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_bump_version.py +0 -0
  362. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_decomposition.py +0 -0
  363. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_dependency_graph.py +0 -0
  364. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_diagnostics.py +0 -0
  365. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_digest_schema.py +0 -0
  366. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_file_copier.py +0 -0
  367. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_hook_patterns.py +0 -0
  368. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_init_import_graph.py +0 -0
  369. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_intent_detector.py +0 -0
  370. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  371. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_jinja2_dep.py +0 -0
  372. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_locking.py +0 -0
  373. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_managed_file_copier.py +0 -0
  374. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_map_token_meter.py +0 -0
  375. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_map_utils_sanitize.py +0 -0
  376. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_mapify_cli.py +0 -0
  377. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_memory_capture.py +0 -0
  378. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_memory_finalize.py +0 -0
  379. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_memory_integration.py +0 -0
  380. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_memory_recall.py +0 -0
  381. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_memory_review_fixes.py +0 -0
  382. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_post_compact_context.py +0 -0
  383. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_ralph_hooks.py +0 -0
  384. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_ralph_state.py +0 -0
  385. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_repo_insight.py +0 -0
  386. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_schemas.py +0 -0
  387. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skill_ir.py +0 -0
  388. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_consistency.py +0 -0
  389. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_aggregator.py +0 -0
  390. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_apply.py +0 -0
  391. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_cli_optimize.py +0 -0
  392. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
  393. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  394. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_fixtures.py +0 -0
  395. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_optimizer.py +0 -0
  396. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  397. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_proposer.py +0 -0
  398. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_runner.py +0 -0
  399. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_schema.py +0 -0
  400. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_skills_eval_viewer.py +0 -0
  401. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_sofa_client.py +0 -0
  402. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_sofa_search.py +0 -0
  403. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_template_render.py +0 -0
  404. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_token_budget.py +0 -0
  405. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_validate_dependencies.py +0 -0
  406. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_validate_spec_citations.py +0 -0
  407. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_verification_recorder.py +0 -0
  408. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_workflow_context_injector.py +0 -0
  409. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_workflow_finalizer.py +0 -0
  410. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/tests/test_workflow_logger.py +0 -0
  411. {mapify_cli-3.13.1 → mapify_cli-3.15.0}/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.13.1
3
+ Version: 3.15.0
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
@@ -201,7 +201,7 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
201
201
  - **Daily-driver speed** — optimized for repeated use, not occasional demo workflows. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
202
202
  - **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early instead of surprising reviewers later.
203
203
  - **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
204
- - **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
204
+ - **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch. With `minimality` enabled, review also runs an advisory what-to-delete lens for over-engineering cuts.
205
205
  - **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
206
206
 
207
207
  <details>
@@ -249,7 +249,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
249
249
  minimality: lite # new installs default to lite; existing repos without the key stay off
250
250
  ```
251
251
 
252
- Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work.
252
+ Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work. `/map-review` also adds an advisory what-to-delete lens when minimality is not `off`; its `net: -N` estimate is informational, not a gate.
253
253
 
254
254
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
255
255
 
@@ -157,7 +157,7 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
157
157
  - **Daily-driver speed** — optimized for repeated use, not occasional demo workflows. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
158
158
  - **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early instead of surprising reviewers later.
159
159
  - **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
160
- - **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
160
+ - **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch. With `minimality` enabled, review also runs an advisory what-to-delete lens for over-engineering cuts.
161
161
  - **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
162
162
 
163
163
  <details>
@@ -205,7 +205,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
205
205
  minimality: lite # new installs default to lite; existing repos without the key stay off
206
206
  ```
207
207
 
208
- Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work.
208
+ Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work. `/map-review` also adds an advisory what-to-delete lens when minimality is not `off`; its `net: -N` estimate is informational, not a gate.
209
209
 
210
210
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
211
211
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.13.1"
3
+ version = "3.15.0"
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.13.1"
26
+ __version__ = "3.15.0"
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.
@@ -390,8 +390,10 @@ def is_editing_phase(branch: str) -> tuple[bool, Optional[str]]:
390
390
  "Required:\n"
391
391
  f" 1. echo '<findings>' | python3 .map/scripts/map_step_runner.py \\\n"
392
392
  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"
393
+ f" 2. python3 .map/scripts/map_step_runner.py validate_research \\\n"
394
+ f" <branch> {subtask}\n"
395
+ f" 3. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
396
+ " 4. Then Edit/Write opens (ACTOR phase).\n"
395
397
  "\n"
396
398
  f"Note: this block is scoped to {subtask}'s affected_files. Edits to\n"
397
399
  "files OUTSIDE that surface (orthogonal hotfixes, repo-root config,\n"
@@ -160,12 +160,14 @@ fi
160
160
  ### RESEARCH
161
161
 
162
162
  Use `researcher` when independent exploration is useful; otherwise research in
163
- the current session. Persist concise findings before Actor work:
163
+ the current session. Persist concise strict-JSON findings, validate the research
164
+ contract, then close RESEARCH before Actor work:
164
165
 
165
166
  ```bash
166
167
  SUBTASK_ID=$(jq -r '.current_subtask_id' ".map/${BRANCH}/step_state.json")
167
168
  printf '%s' "$RESEARCH_FINDINGS" | \
168
169
  python3 .map/scripts/map_step_runner.py save_research "$BRANCH" "$SUBTASK_ID"
170
+ python3 .map/scripts/map_step_runner.py validate_research "$BRANCH" "$SUBTASK_ID"
169
171
  python3 .map/scripts/map_orchestrator.py validate_step "$STEP_ID"
170
172
  ```
171
173
 
@@ -14,9 +14,7 @@ Exit codes:
14
14
 
15
15
  import json
16
16
  import os
17
- import re
18
17
  import sys
19
- from pathlib import Path
20
18
 
21
19
  # =============================================================================
22
20
  # Default constants (overridable via .map/config.yaml → safe_path_prefixes)
@@ -36,6 +34,19 @@ _DEFAULT_DANGEROUS_FILE_PATTERNS = [
36
34
  r"tokens?\.(json|ya?ml|toml|txt)$", # token files, not any file with "token" in path
37
35
  ]
38
36
 
37
+ _DEFAULT_DANGEROUS_FILE_MARKERS = (
38
+ ".env",
39
+ "credential",
40
+ "private",
41
+ "key",
42
+ ".pem",
43
+ "secret",
44
+ "id_rsa",
45
+ "id_ed25519",
46
+ "password",
47
+ "token",
48
+ )
49
+
39
50
  # Dangerous bash command patterns
40
51
  _DEFAULT_DANGEROUS_COMMANDS = [
41
52
  # Block `rm -rf /` (bare root), `rm -rf /etc`, `rm -rf /home/user`, etc.,
@@ -81,14 +92,14 @@ def _load_config_overrides() -> dict:
81
92
  Reads safe_path_prefixes from project config to allow customization.
82
93
  Falls back to defaults when config is missing or unreadable.
83
94
  """
84
- project_dir = Path(os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
85
- config_path = project_dir / ".map" / "config.yaml"
86
- if not config_path.exists():
95
+ project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
96
+ config_path = os.path.join(project_dir, ".map", "config.yaml")
97
+ if not os.path.exists(config_path):
87
98
  return {}
88
99
  try:
89
100
  import yaml # type: ignore[import-untyped]
90
101
 
91
- with open(config_path) as f:
102
+ with open(config_path, encoding="utf-8") as f:
92
103
  data = yaml.safe_load(f)
93
104
  return data if isinstance(data, dict) else {}
94
105
  except Exception:
@@ -121,6 +132,13 @@ def check_file_safety(path: str) -> tuple[bool, str]:
121
132
 
122
133
  # Check dangerous patterns
123
134
  path_lower = path.lower()
135
+ if DANGEROUS_FILE_PATTERNS == _DEFAULT_DANGEROUS_FILE_PATTERNS and not any(
136
+ marker in path_lower for marker in _DEFAULT_DANGEROUS_FILE_MARKERS
137
+ ):
138
+ return True, ""
139
+
140
+ import re
141
+
124
142
  for pattern in DANGEROUS_FILE_PATTERNS:
125
143
  if re.search(pattern, path_lower, re.IGNORECASE):
126
144
  return (
@@ -136,6 +154,8 @@ def check_command_safety(command: str) -> tuple[bool, str]:
136
154
  if not command:
137
155
  return True, ""
138
156
 
157
+ import re
158
+
139
159
  for pattern in DANGEROUS_COMMANDS:
140
160
  if re.search(pattern, command, re.IGNORECASE):
141
161
  return False, f"Blocked: Dangerous command pattern detected: {pattern}"
@@ -390,8 +390,10 @@ def is_editing_phase(branch: str) -> tuple[bool, Optional[str]]:
390
390
  "Required:\n"
391
391
  f" 1. echo '<findings>' | python3 .map/scripts/map_step_runner.py \\\n"
392
392
  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"
393
+ f" 2. python3 .map/scripts/map_step_runner.py validate_research \\\n"
394
+ f" <branch> {subtask}\n"
395
+ f" 3. python3 .map/scripts/map_orchestrator.py validate_step 2.2\n"
396
+ " 4. Then Edit/Write opens (ACTOR phase).\n"
395
397
  "\n"
396
398
  f"Note: this block is scoped to {subtask}'s affected_files. Edits to\n"
397
399
  "files OUTSIDE that surface (orthogonal hotfixes, repo-root config,\n"
@@ -1333,22 +1333,34 @@ def validate_step(
1333
1333
  "recommendation": normalized_rec,
1334
1334
  }
1335
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.
1336
+ # save_research wrote a machine-checkable artifact before letting Actor
1337
+ # proceed. Without this check, "MANDATORY" was prompt-text only and
1338
+ # malformed markdown could be silently passed downstream.
1338
1339
  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
- ):
1340
+ try:
1341
+ from map_step_runner import validate_research # pyright: ignore[reportMissingImports]
1342
+ research_report = validate_research(branch, state.current_subtask_id)
1343
+ except ImportError:
1344
+ research_report = {
1345
+ "valid": False,
1346
+ "errors": ["map_step_runner.validate_research could not be imported"],
1347
+ }
1348
+ if not research_report.get("valid"):
1349
+ research_errors = research_report.get("errors")
1350
+ if isinstance(research_errors, list) and research_errors:
1351
+ detail = "; ".join(str(err) for err in research_errors[:3])
1352
+ else:
1353
+ detail = "research artifact is missing or invalid"
1344
1354
  return {
1345
1355
  "valid": False,
1346
1356
  "message": (
1347
- f"RESEARCH not persisted for {state.current_subtask_id}. "
1357
+ f"RESEARCH artifact invalid for {state.current_subtask_id}: "
1358
+ f"{detail}. "
1348
1359
  f"Run: python3 .map/scripts/map_step_runner.py save_research "
1349
1360
  f"<branch> {state.current_subtask_id} (defaults kind=actor) "
1350
- "before validate_step 2.2."
1361
+ "then validate_research before validate_step 2.2."
1351
1362
  ),
1363
+ "research_report": research_report,
1352
1364
  }
1353
1365
  # Auto-snapshot per-subtask baseline at RESEARCH-complete so the
1354
1366
  # MONITOR-side validate_mutation_boundary check only flags files