mapify-cli 3.15.2__tar.gz → 3.17.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 (421) hide show
  1. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/PKG-INFO +7 -4
  2. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/README.md +6 -3
  3. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/pyproject.toml +4 -1
  4. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/__init__.py +260 -2
  5. mapify_cli-3.17.0/src/mapify_cli/minimality_report.py +372 -0
  6. mapify_cli-3.17.0/src/mapify_cli/research_eval.py +480 -0
  7. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/schemas.py +88 -0
  8. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/actor.md +18 -10
  9. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/monitor.md +2 -0
  10. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/research-agent.md +4 -4
  11. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/task-decomposer.md +38 -0
  12. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +38 -0
  13. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/agents/monitor.toml +9 -0
  14. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +22 -5
  15. mapify_cli-3.17.0/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +211 -0
  16. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +10 -11
  17. mapify_cli-3.17.0/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +112 -0
  18. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +219 -2
  19. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +916 -5
  20. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +1 -1
  21. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +3 -3
  22. mapify_cli-3.17.0/src/mapify_cli/templates/skills/map-explain/SKILL.md +190 -0
  23. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +13 -8
  24. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +4 -3
  25. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +4 -3
  26. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +1 -1
  27. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +13 -9
  28. mapify_cli-3.17.0/src/mapify_cli/templates/skills/map-understand/SKILL.md +128 -0
  29. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/skill-rules.json +23 -0
  30. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +18 -10
  31. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +2 -0
  32. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +4 -4
  33. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +38 -0
  34. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +38 -0
  35. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +9 -0
  36. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +22 -5
  37. mapify_cli-3.17.0/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +211 -0
  38. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +10 -11
  39. mapify_cli-3.17.0/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +112 -0
  40. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +219 -2
  41. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +916 -5
  42. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +1 -1
  43. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +3 -3
  44. mapify_cli-3.17.0/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +190 -0
  45. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +13 -8
  46. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +4 -3
  47. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +4 -3
  48. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +1 -1
  49. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +13 -9
  50. mapify_cli-3.17.0/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +128 -0
  51. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +23 -0
  52. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/test_e2e_artifact_contracts.py +72 -0
  53. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_artifact_schemas.py +77 -0
  54. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_map_orchestrator.py +133 -0
  55. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_map_step_runner.py +451 -0
  56. mapify_cli-3.17.0/tests/test_minimality_report.py +222 -0
  57. mapify_cli-3.17.0/tests/test_research_eval.py +161 -0
  58. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills.py +133 -0
  59. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_consistency.py +4 -4
  60. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_validate_spec_citations.py +10 -0
  61. mapify_cli-3.15.2/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -166
  62. mapify_cli-3.15.2/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -147
  63. mapify_cli-3.15.2/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -166
  64. mapify_cli-3.15.2/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -147
  65. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/.claude/hooks/README.md +0 -0
  66. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/.claude/skills/README.md +0 -0
  67. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/.gitignore +0 -0
  68. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/LICENSE +0 -0
  69. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/_locking.py +0 -0
  70. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/cli_ui.py +0 -0
  71. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/config/__init__.py +0 -0
  72. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/config/mcp.py +0 -0
  73. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/config/project_config.py +0 -0
  74. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/config/settings.py +0 -0
  75. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/__init__.py +0 -0
  76. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
  77. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
  78. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/file_copier.py +0 -0
  79. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  80. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/providers.py +0 -0
  81. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
  82. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/dependency_graph.py +0 -0
  83. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/intent_detector.py +0 -0
  84. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/memory/__init__.py +0 -0
  85. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/memory/capture.py +0 -0
  86. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/memory/digest_schema.py +0 -0
  87. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/memory/finalize.py +0 -0
  88. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/memory/recall.py +0 -0
  89. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/ralph_state.py +0 -0
  90. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/repo_insight.py +0 -0
  91. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skill_ir.py +0 -0
  92. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
  93. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  94. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  95. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
  96. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  97. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  98. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  99. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
  100. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/runner.py +0 -0
  101. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
  102. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/.gitignore +0 -0
  103. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
  104. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/debate-arbiter.md +0 -0
  105. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
  106. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  107. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
  108. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
  109. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
  110. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/agents/synthesizer.md +0 -0
  111. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  112. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
  113. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/config.toml +0 -0
  114. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +0 -0
  115. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
  116. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  117. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
  118. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  119. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/README.md +0 -0
  120. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  121. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  122. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  123. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  124. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  125. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  126. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  127. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  128. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
  129. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
  130. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  131. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  132. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
  133. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
  134. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/hooks/workflow-gate.py +0 -0
  135. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  136. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  137. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  138. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  139. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
  140. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
  141. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
  142. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  143. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
  144. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  145. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
  146. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  147. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  148. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
  149. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
  150. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  151. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  152. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  153. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  154. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
  155. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  156. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  157. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/settings.json +0 -0
  158. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/README.md +0 -0
  159. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
  160. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  161. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  162. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
  163. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  164. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  165. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  166. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  167. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  168. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  169. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
  170. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
  171. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
  172. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  173. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
  174. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
  175. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  176. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  177. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  178. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  179. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  180. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  181. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  182. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  183. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  184. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
  185. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
  186. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
  187. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
  188. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
  189. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -0
  190. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
  191. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  192. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
  193. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  194. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  195. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -0
  196. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  197. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
  198. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  199. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +0 -0
  200. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  201. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  202. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
  203. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  204. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
  205. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  206. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  207. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  208. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  209. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  210. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  211. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  212. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  213. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
  214. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
  215. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  216. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  217. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
  218. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
  219. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +0 -0
  220. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  221. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  222. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  223. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  224. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
  225. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
  226. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
  227. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  228. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
  229. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  230. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
  231. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  232. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  233. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
  234. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  235. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  236. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  237. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  238. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  239. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
  240. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  241. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  242. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
  243. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  244. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
  245. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  246. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  247. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
  248. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  249. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  250. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  251. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  252. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  253. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  254. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
  255. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
  256. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
  257. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  258. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
  259. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
  260. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  261. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  262. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  263. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  264. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  265. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  266. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  267. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  268. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  269. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
  270. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
  271. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  272. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/token_budget.py +0 -0
  273. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/tools/__init__.py +0 -0
  274. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  275. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/verification_recorder.py +0 -0
  276. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/workflow_finalizer.py +0 -0
  277. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/workflow_logger.py +0 -0
  278. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/src/mapify_cli/workflow_state.py +0 -0
  279. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/__init__.py +0 -0
  280. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/conftest.py +0 -0
  281. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
  282. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/fixtures/codex/config.toml +0 -0
  283. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  284. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/hooks/test_end_of_turn.py +0 -0
  285. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
  286. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/hooks/test_safety_guardrails.py +0 -0
  287. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/__init__.py +0 -0
  288. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/blueprint.json +0 -0
  289. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/code_review.md +0 -0
  290. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/plan_handoff.json +0 -0
  291. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/spec.md +0 -0
  292. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
  293. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  294. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/task_plan.md +0 -0
  295. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/fixtures/verification_summary.md +0 -0
  296. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
  297. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/README.md +0 -0
  298. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  299. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  300. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  301. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  302. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  303. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  304. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  305. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  306. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  307. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  308. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  309. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  310. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  311. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  312. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  313. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  314. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  315. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  316. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  317. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  318. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  319. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  320. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  321. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  322. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  323. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  324. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  325. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  326. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  327. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  328. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  329. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  330. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  331. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  332. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  333. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  334. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  335. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  336. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  337. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  338. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  339. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  340. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  341. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  342. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  343. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  344. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  345. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  346. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  347. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  348. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  349. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  350. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  351. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  352. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  353. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  354. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  355. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  356. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  357. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  358. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  359. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  360. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  361. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  362. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  363. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  364. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  365. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  366. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  367. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  368. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  369. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  370. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_agent_cli_correctness.py +0 -0
  371. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_agent_frontmatter.py +0 -0
  372. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_bump_version.py +0 -0
  373. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_decomposition.py +0 -0
  374. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_dependency_graph.py +0 -0
  375. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_diagnostics.py +0 -0
  376. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_digest_schema.py +0 -0
  377. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_file_copier.py +0 -0
  378. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_hook_patterns.py +0 -0
  379. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_init_import_graph.py +0 -0
  380. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_intent_detector.py +0 -0
  381. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  382. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_jinja2_dep.py +0 -0
  383. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_locking.py +0 -0
  384. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_managed_file_copier.py +0 -0
  385. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_map_token_meter.py +0 -0
  386. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_map_utils_sanitize.py +0 -0
  387. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_mapify_cli.py +0 -0
  388. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_memory_capture.py +0 -0
  389. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_memory_finalize.py +0 -0
  390. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_memory_integration.py +0 -0
  391. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_memory_recall.py +0 -0
  392. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_memory_review_fixes.py +0 -0
  393. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_post_compact_context.py +0 -0
  394. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_ralph_hooks.py +0 -0
  395. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_ralph_state.py +0 -0
  396. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_repo_insight.py +0 -0
  397. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_schemas.py +0 -0
  398. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skill_ir.py +0 -0
  399. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_aggregator.py +0 -0
  400. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_apply.py +0 -0
  401. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_cli_optimize.py +0 -0
  402. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
  403. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  404. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_fixtures.py +0 -0
  405. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_optimizer.py +0 -0
  406. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  407. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_proposer.py +0 -0
  408. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_runner.py +0 -0
  409. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_schema.py +0 -0
  410. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_skills_eval_viewer.py +0 -0
  411. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_sofa_client.py +0 -0
  412. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_sofa_search.py +0 -0
  413. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_template_render.py +0 -0
  414. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_token_budget.py +0 -0
  415. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_validate_dependencies.py +0 -0
  416. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_verification_recorder.py +0 -0
  417. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_workflow_context_injector.py +0 -0
  418. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_workflow_finalizer.py +0 -0
  419. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_workflow_gate.py +0 -0
  420. {mapify_cli-3.15.2 → mapify_cli-3.17.0}/tests/test_workflow_logger.py +0 -0
  421. {mapify_cli-3.15.2 → mapify_cli-3.17.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.15.2
3
+ Version: 3.17.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
@@ -70,6 +70,7 @@ You drive the whole loop with two core commands plus three gates:
70
70
  /map-check # 3. CHECK — quality gates against the plan
71
71
  /map-review # 4. REVIEW — semantic review vs spec, tests, and diff
72
72
  /map-learn # 5. LEARN — save the gotchas for next session
73
+ /map-understand # optional - teach and quiz until the workflow makes sense
73
74
  ```
74
75
 
75
76
  - **Start with `/map-plan`** for anything non-trivial — it clarifies behavior and splits the work into contract-sized subtasks.
@@ -117,6 +118,7 @@ Then enable the Codex hook manually: run `/hooks`, select `PreToolUse`, press `t
117
118
  /map-check
118
119
  /map-review
119
120
  /map-learn
121
+ /map-understand # optional learning/quiz mode
120
122
  ```
121
123
 
122
124
  That's the whole golden path. Everything below explains *why* it works and *when* to reach for it.
@@ -180,6 +182,7 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
180
182
  | `/map-check` | Quality gates, verification, and artifact checks |
181
183
  | `/map-review` | Pre-commit semantic review against the plan, tests, and diff |
182
184
  | `/map-learn` | Capture project memory and reusable lessons |
185
+ | `/map-understand` | Interactive teaching and quiz mode for code, diffs, and workflow results |
183
186
  | `/map-debug` | Bug fixes and debugging |
184
187
  | `/map-task` | Execute a single subtask from an existing plan |
185
188
  | `/map-tdd` | Test-first implementation workflow |
@@ -211,9 +214,9 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
211
214
  - **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it. Broader scope is reported as a blocker or tradeoff instead of silently expanding the diff.
212
215
  - **Context-first prompt envelopes** — high-context `/map-plan`, `/map-efficient`, `/map-debug`, and `/map-review` prompts wrap branch artifacts in XML-style `<documents>`, then state the `<task>` and `<expected_output>`, so specs, diffs, logs, and schemas stay separated for the model.
213
216
  - **Contract-sized subtasks** — blueprints require `expected_diff_size`, `concern_type`, `one_logical_step`, `hard_constraints`, `soft_constraints`, and `coverage_map`. Hard constraints must be owned in `coverage_map` and cited in the owning subtask; soft constraints can be traded off only with explicit `tradeoff_rationale`.
214
- - **Token budget report** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json` (before/after estimated tokens, clipped sections, source artifacts). The operator breadcrumb for diagnosing missing context.
217
+ - **Token budget and research ROI reports** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json`, while `token_accounting.json` and `/map-tokenreport` separate research-agent/researcher cost from Actor/Monitor cost so operators can see whether delegated research paid for itself.
215
218
  - **Clean retry quarantine** — after repeated Monitor rejection, write-capable workflows switch the next attempt into clean-retry mode using `.map/<branch>/retry_quarantine.json` (constraints, required evidence, do-not-repeat feedback) instead of raw failed-session context.
216
- - **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
219
+ - **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory research artifact/ROI signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
217
220
  - **Compact recovery surface** — `/map-resume` keeps the active recovery flow short and moves low-frequency notes to `resume-reference.md`, so recovery after `/clear` or context exhaustion gives the next checkpoint action without loading the whole appendix.
218
221
  - **Skill IR audit** — release checks lower shipped Claude and Codex `SKILL.md` files into a typed `SkillIR`, verify content hashes, catch unsupported frontmatter, reject missing supporting-file links, and block injection-like instructions before `mapify init` copies surfaces into user repos.
219
222
 
@@ -249,7 +252,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
249
252
  minimality: lite # new installs default to lite; existing repos without the key stay off
250
253
  ```
251
254
 
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.
255
+ 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. In `full`/`ultra`, the decomposer may place speculative omissions in `blueprint.deferred_yagni`; those items must be shown during plan approval and can be restored before execution with `python3 .map/scripts/map_orchestrator.py restore_deferred_yagni YG-NNN`. Maintainers can inspect local rollout readiness with `mapify minimality-report --json`, which compares complete `off` and opt-in run-health samples before considering the Phase 3 default flip, reports missing sample gaps and cohort branch names, lists the next telemetry actions, and emits a candidate-only `manual_review_gate` with opt-in branches plus a clarity/underscope checklist before promotion.
253
256
 
254
257
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
255
258
 
@@ -26,6 +26,7 @@ You drive the whole loop with two core commands plus three gates:
26
26
  /map-check # 3. CHECK — quality gates against the plan
27
27
  /map-review # 4. REVIEW — semantic review vs spec, tests, and diff
28
28
  /map-learn # 5. LEARN — save the gotchas for next session
29
+ /map-understand # optional - teach and quiz until the workflow makes sense
29
30
  ```
30
31
 
31
32
  - **Start with `/map-plan`** for anything non-trivial — it clarifies behavior and splits the work into contract-sized subtasks.
@@ -73,6 +74,7 @@ Then enable the Codex hook manually: run `/hooks`, select `PreToolUse`, press `t
73
74
  /map-check
74
75
  /map-review
75
76
  /map-learn
77
+ /map-understand # optional learning/quiz mode
76
78
  ```
77
79
 
78
80
  That's the whole golden path. Everything below explains *why* it works and *when* to reach for it.
@@ -136,6 +138,7 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
136
138
  | `/map-check` | Quality gates, verification, and artifact checks |
137
139
  | `/map-review` | Pre-commit semantic review against the plan, tests, and diff |
138
140
  | `/map-learn` | Capture project memory and reusable lessons |
141
+ | `/map-understand` | Interactive teaching and quiz mode for code, diffs, and workflow results |
139
142
  | `/map-debug` | Bug fixes and debugging |
140
143
  | `/map-task` | Execute a single subtask from an existing plan |
141
144
  | `/map-tdd` | Test-first implementation workflow |
@@ -167,9 +170,9 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
167
170
  - **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it. Broader scope is reported as a blocker or tradeoff instead of silently expanding the diff.
168
171
  - **Context-first prompt envelopes** — high-context `/map-plan`, `/map-efficient`, `/map-debug`, and `/map-review` prompts wrap branch artifacts in XML-style `<documents>`, then state the `<task>` and `<expected_output>`, so specs, diffs, logs, and schemas stay separated for the model.
169
172
  - **Contract-sized subtasks** — blueprints require `expected_diff_size`, `concern_type`, `one_logical_step`, `hard_constraints`, `soft_constraints`, and `coverage_map`. Hard constraints must be owned in `coverage_map` and cited in the owning subtask; soft constraints can be traded off only with explicit `tradeoff_rationale`.
170
- - **Token budget report** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json` (before/after estimated tokens, clipped sections, source artifacts). The operator breadcrumb for diagnosing missing context.
173
+ - **Token budget and research ROI reports** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json`, while `token_accounting.json` and `/map-tokenreport` separate research-agent/researcher cost from Actor/Monitor cost so operators can see whether delegated research paid for itself.
171
174
  - **Clean retry quarantine** — after repeated Monitor rejection, write-capable workflows switch the next attempt into clean-retry mode using `.map/<branch>/retry_quarantine.json` (constraints, required evidence, do-not-repeat feedback) instead of raw failed-session context.
172
- - **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
175
+ - **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory research artifact/ROI signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
173
176
  - **Compact recovery surface** — `/map-resume` keeps the active recovery flow short and moves low-frequency notes to `resume-reference.md`, so recovery after `/clear` or context exhaustion gives the next checkpoint action without loading the whole appendix.
174
177
  - **Skill IR audit** — release checks lower shipped Claude and Codex `SKILL.md` files into a typed `SkillIR`, verify content hashes, catch unsupported frontmatter, reject missing supporting-file links, and block injection-like instructions before `mapify init` copies surfaces into user repos.
175
178
 
@@ -205,7 +208,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
205
208
  minimality: lite # new installs default to lite; existing repos without the key stay off
206
209
  ```
207
210
 
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.
211
+ 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. In `full`/`ultra`, the decomposer may place speculative omissions in `blueprint.deferred_yagni`; those items must be shown during plan approval and can be restored before execution with `python3 .map/scripts/map_orchestrator.py restore_deferred_yagni YG-NNN`. Maintainers can inspect local rollout readiness with `mapify minimality-report --json`, which compares complete `off` and opt-in run-health samples before considering the Phase 3 default flip, reports missing sample gaps and cohort branch names, lists the next telemetry actions, and emits a candidate-only `manual_review_gate` with opt-in branches plus a clarity/underscope checklist before promotion.
209
212
 
210
213
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
211
214
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.15.2"
3
+ version = "3.17.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"
@@ -114,6 +114,9 @@ exclude = [
114
114
  [tool.ruff]
115
115
  extend-exclude = ["tests/skills_eval/fixtures/whole_skill"]
116
116
 
117
+ [tool.black]
118
+ target-version = ["py311"]
119
+
117
120
  [[tool.mypy.overrides]]
118
121
  module = "yaml"
119
122
  ignore_missing_imports = true
@@ -23,7 +23,7 @@ Or install globally:
23
23
  mapify check
24
24
  """
25
25
 
26
- __version__ = "3.15.2"
26
+ __version__ = "3.17.0"
27
27
 
28
28
  import os
29
29
  import subprocess
@@ -32,7 +32,7 @@ import shutil
32
32
  import ssl
33
33
  from datetime import datetime
34
34
  from pathlib import Path
35
- from typing import Optional, List, Dict, Any
35
+ from typing import Optional, List, Dict, Any, Mapping
36
36
 
37
37
  import typer
38
38
  import httpx
@@ -145,6 +145,13 @@ skill_eval_app = typer.Typer(
145
145
 
146
146
  app.add_typer(skill_eval_app, name="skill-eval")
147
147
 
148
+ research_eval_app = typer.Typer(
149
+ name="research-eval",
150
+ help="Evaluate research-agent localization quality without provider calls",
151
+ )
152
+
153
+ app.add_typer(research_eval_app, name="research-eval")
154
+
148
155
 
149
156
  def version_callback(value: bool):
150
157
  """Callback to show version and exit."""
@@ -1265,6 +1272,150 @@ def doctor(debug: bool = typer.Option(False, "--debug", help="Enable debug loggi
1265
1272
  console.print(f" • {path_name}")
1266
1273
 
1267
1274
 
1275
+ def _format_percent(value: Any) -> str:
1276
+ if value is None:
1277
+ return "n/a"
1278
+ try:
1279
+ return f"{float(value):.1%}"
1280
+ except (TypeError, ValueError):
1281
+ return "n/a"
1282
+
1283
+
1284
+ def _render_minimality_report(report: Mapping[str, Any]) -> None:
1285
+ summary = report.get("summary")
1286
+ if not isinstance(summary, Mapping):
1287
+ summary = {}
1288
+ branches = report.get("branches")
1289
+ branch_rows = branches if isinstance(branches, list) else []
1290
+
1291
+ console.print("[bold]Minimality rollout report[/bold]")
1292
+ console.print(
1293
+ f"Current config minimality: [cyan]{report.get('current_config_minimality', 'off')}[/cyan]"
1294
+ )
1295
+ console.print(
1296
+ f"Decision: [bold]{summary.get('decision', 'insufficient_data')}[/bold] "
1297
+ f"(ready_for_phase3={summary.get('ready_for_phase3', False)})"
1298
+ )
1299
+ console.print(
1300
+ "Runs: "
1301
+ f"{summary.get('complete_opt_in_runs', 0)} opt-in complete, "
1302
+ f"{summary.get('complete_off_runs', 0)} off-baseline complete, "
1303
+ f"{summary.get('complete_runs_missing_historical_minimality', 0)} inferred"
1304
+ )
1305
+ console.print(
1306
+ "Averages: "
1307
+ f"retry {float(summary.get('avg_retry_events_opt_in', 0.0)):.2f} opt-in vs "
1308
+ f"{float(summary.get('avg_retry_events_off', 0.0)):.2f} off; "
1309
+ f"guard rework {float(summary.get('avg_guard_rework_opt_in', 0.0)):.2f} opt-in vs "
1310
+ f"{float(summary.get('avg_guard_rework_off', 0.0)):.2f} off; "
1311
+ f"YAGNI reversal {_format_percent(summary.get('user_reversal_rate'))}"
1312
+ )
1313
+
1314
+ reasons = summary.get("reasons")
1315
+ if isinstance(reasons, list) and reasons:
1316
+ console.print()
1317
+ console.print("[bold]Reasons[/bold]")
1318
+ for reason in reasons:
1319
+ console.print(f" - {reason}")
1320
+
1321
+ next_actions = summary.get("next_actions")
1322
+ if isinstance(next_actions, list) and next_actions:
1323
+ console.print()
1324
+ console.print("[bold]Next actions[/bold]")
1325
+ for action in next_actions:
1326
+ console.print(f" - {action}")
1327
+
1328
+ cohort_branches = summary.get("cohort_branches")
1329
+ if isinstance(cohort_branches, Mapping):
1330
+ cohort_rows = (
1331
+ ("Off baseline", cohort_branches.get("off_baseline")),
1332
+ ("Opt-in", cohort_branches.get("opt_in")),
1333
+ (
1334
+ "Missing historical minimality",
1335
+ cohort_branches.get("missing_historical_minimality"),
1336
+ ),
1337
+ )
1338
+ if any(isinstance(branches, list) and branches for _, branches in cohort_rows):
1339
+ console.print()
1340
+ console.print("[bold]Cohort branches[/bold]")
1341
+ for label, branches in cohort_rows:
1342
+ if isinstance(branches, list) and branches:
1343
+ console.print(f" {label}: " + ", ".join(map(str, branches)))
1344
+
1345
+ manual_review_gate = summary.get("manual_review_gate")
1346
+ if (
1347
+ isinstance(manual_review_gate, Mapping)
1348
+ and manual_review_gate.get("required") is True
1349
+ ):
1350
+ console.print()
1351
+ console.print("[bold]Manual review gate[/bold]")
1352
+ candidate_branches = manual_review_gate.get("candidate_branches")
1353
+ if isinstance(candidate_branches, list) and candidate_branches:
1354
+ console.print(
1355
+ " Candidate opt-in branches: "
1356
+ + ", ".join(map(str, candidate_branches))
1357
+ )
1358
+ checklist = manual_review_gate.get("checklist")
1359
+ if isinstance(checklist, list) and checklist:
1360
+ console.print(" Checklist:")
1361
+ for item in checklist:
1362
+ console.print(f" - {item}")
1363
+
1364
+ if branch_rows:
1365
+ table = Table(title="Branch Samples", show_header=True, header_style="bold cyan")
1366
+ table.add_column("Branch")
1367
+ table.add_column("Status")
1368
+ table.add_column("Minimality")
1369
+ table.add_column("Source")
1370
+ table.add_column("Retries", justify="right")
1371
+ table.add_column("Guard", justify="right")
1372
+ table.add_column("YAGNI", justify="right")
1373
+ for row in branch_rows:
1374
+ if not isinstance(row, Mapping):
1375
+ continue
1376
+ table.add_row(
1377
+ str(row.get("branch", "")),
1378
+ str(row.get("terminal_status", "")),
1379
+ str(row.get("minimality", "")),
1380
+ str(row.get("minimality_source", "")),
1381
+ str(row.get("retry_events", 0)),
1382
+ str(row.get("guard_rework_events", 0)),
1383
+ f"{row.get('restored_yagni_count', 0)}/{row.get('total_yagni_recommendations', 0)}",
1384
+ )
1385
+ console.print()
1386
+ console.print(table)
1387
+
1388
+
1389
+ @app.command("minimality-report")
1390
+ def minimality_report(
1391
+ project_path: Path = typer.Option(
1392
+ Path("."),
1393
+ "--path",
1394
+ "-p",
1395
+ help="Project root containing .map/ artifacts",
1396
+ ),
1397
+ min_complete_runs: int = typer.Option(
1398
+ 3,
1399
+ "--min-runs",
1400
+ min=1,
1401
+ help="Minimum complete runs required per off/opt-in cohort",
1402
+ ),
1403
+ json_output: bool = typer.Option(
1404
+ False,
1405
+ "--json",
1406
+ help="Print the machine-readable report as JSON",
1407
+ ),
1408
+ ) -> None:
1409
+ """Summarize local minimality telemetry for the Phase 3 default-flip gate."""
1410
+ from mapify_cli.minimality_report import build_minimality_rollout_report
1411
+
1412
+ report = build_minimality_rollout_report(project_path, min_complete_runs)
1413
+ if json_output:
1414
+ console.print_json(data=report)
1415
+ return
1416
+ _render_minimality_report(report)
1417
+
1418
+
1268
1419
  def _mapify_install_kind() -> str:
1269
1420
  """Classify how this mapify CLI is installed.
1270
1421
 
@@ -1388,6 +1539,113 @@ def upgrade():
1388
1539
  )
1389
1540
 
1390
1541
 
1542
+ # Research localization eval commands
1543
+
1544
+
1545
+ @research_eval_app.command("score")
1546
+ def research_eval_score(
1547
+ output_file: Path = typer.Argument(
1548
+ ...,
1549
+ help="ResearchEvidence JSON/text output file to score",
1550
+ ),
1551
+ expected_file: Path = typer.Argument(
1552
+ ...,
1553
+ help="JSON list, or object with expected_locations, of target file ranges",
1554
+ ),
1555
+ repo_root: Optional[Path] = typer.Option(
1556
+ None,
1557
+ "--repo-root",
1558
+ help="Fixture repository root for path and line-range validation",
1559
+ ),
1560
+ fail_under_file_f1: float = typer.Option(
1561
+ 0.0,
1562
+ "--fail-under-file-f1",
1563
+ min=0.0,
1564
+ max=1.0,
1565
+ help="Exit 1 when file-level F1 is below this threshold",
1566
+ ),
1567
+ fail_under_line_f1: float = typer.Option(
1568
+ 0.0,
1569
+ "--fail-under-line-f1",
1570
+ min=0.0,
1571
+ max=1.0,
1572
+ help="Exit 1 when line-overlap F1 is below this threshold",
1573
+ ),
1574
+ overbroad_line_threshold: int = typer.Option(
1575
+ 50,
1576
+ "--overbroad-line-threshold",
1577
+ min=1,
1578
+ help="Count predicted locations above this line span as over-broad",
1579
+ ),
1580
+ fail_on_malformed: bool = typer.Option(
1581
+ True,
1582
+ "--fail-on-malformed/--allow-malformed",
1583
+ help="Exit 1 when parsed output contains malformed locations",
1584
+ ),
1585
+ ) -> None:
1586
+ """Score research-agent localization against known fixture targets.
1587
+
1588
+ Exit codes:
1589
+ 0 - Score meets thresholds
1590
+ 1 - Score below threshold or malformed output found
1591
+ 2 - Input files are missing or malformed
1592
+ """
1593
+ import json
1594
+
1595
+ from mapify_cli.research_eval import (
1596
+ load_expected_locations,
1597
+ score_research_output,
1598
+ score_to_dict,
1599
+ )
1600
+
1601
+ try:
1602
+ output = output_file.read_text(encoding="utf-8")
1603
+ except OSError as exc:
1604
+ console.print(f"[bold red]Error:[/bold red] cannot read output file: {exc}")
1605
+ raise typer.Exit(2)
1606
+
1607
+ try:
1608
+ expected = load_expected_locations(expected_file)
1609
+ except (OSError, ValueError) as exc:
1610
+ console.print(f"[bold red]Error:[/bold red] cannot load expected targets: {exc}")
1611
+ raise typer.Exit(2)
1612
+
1613
+ root = repo_root.resolve() if repo_root else Path.cwd()
1614
+ score = score_research_output(
1615
+ output,
1616
+ expected,
1617
+ repo_root=root,
1618
+ overbroad_line_threshold=overbroad_line_threshold,
1619
+ )
1620
+
1621
+ failed_reasons: list[str] = []
1622
+ if score.file_level.f1 < fail_under_file_f1:
1623
+ failed_reasons.append(
1624
+ f"file_level.f1 {score.file_level.f1:.3f} < {fail_under_file_f1:.3f}"
1625
+ )
1626
+ if score.line_level.f1 < fail_under_line_f1:
1627
+ failed_reasons.append(
1628
+ f"line_level.f1 {score.line_level.f1:.3f} < {fail_under_line_f1:.3f}"
1629
+ )
1630
+ if fail_on_malformed and score.malformed_count > 0:
1631
+ failed_reasons.append(f"malformed_count {score.malformed_count} > 0")
1632
+
1633
+ payload = {
1634
+ "passed": not failed_reasons,
1635
+ "failed_reasons": failed_reasons,
1636
+ "thresholds": {
1637
+ "fail_under_file_f1": fail_under_file_f1,
1638
+ "fail_under_line_f1": fail_under_line_f1,
1639
+ "fail_on_malformed": fail_on_malformed,
1640
+ "overbroad_line_threshold": overbroad_line_threshold,
1641
+ },
1642
+ "score": score_to_dict(score),
1643
+ }
1644
+ print(json.dumps(payload, indent=2, sort_keys=True))
1645
+ if failed_reasons:
1646
+ raise typer.Exit(1)
1647
+
1648
+
1391
1649
  # Skill-eval commands
1392
1650
 
1393
1651