mapify-cli 3.17.1__tar.gz → 3.18.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 (423) hide show
  1. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/PKG-INFO +5 -4
  2. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/README.md +3 -3
  3. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/pyproject.toml +8 -2
  4. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/__init__.py +1 -1
  5. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/config/mcp.py +0 -3
  6. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/config/project_config.py +48 -5
  7. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/schemas.py +4 -0
  8. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/.gitignore +3 -0
  9. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/actor.md +0 -37
  10. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +4 -2
  11. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/monitor.md +0 -88
  12. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +4 -1
  13. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +48 -0
  14. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +22 -3
  15. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/post-compact-context.py +28 -0
  16. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +35 -0
  17. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +19 -0
  18. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +384 -100
  19. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +4 -2
  20. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +83 -0
  21. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +23 -3
  22. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +48 -0
  23. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/.gitignore.jinja +3 -0
  24. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -37
  25. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +4 -2
  26. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -88
  27. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +4 -1
  28. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +48 -0
  29. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +22 -3
  30. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +28 -0
  31. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +35 -0
  32. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +19 -0
  33. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +384 -100
  34. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +4 -2
  35. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +83 -0
  36. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +23 -3
  37. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +48 -0
  38. mapify_cli-3.18.0/src/mapify_cli/tool_output_offload.py +524 -0
  39. mapify_cli-3.18.0/tests/test_agent_dispatch_audit.py +92 -0
  40. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_artifact_schemas.py +24 -0
  41. mapify_cli-3.18.0/tests/test_compaction_offload_integration.py +145 -0
  42. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_decomposition.py +18 -3
  43. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_map_step_runner.py +350 -5
  44. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_mapify_cli.py +3 -3
  45. mapify_cli-3.18.0/tests/test_prompt_layering.py +248 -0
  46. mapify_cli-3.18.0/tests/test_pyyaml_dep.py +95 -0
  47. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills.py +223 -1
  48. mapify_cli-3.18.0/tests/test_tool_output_offload.py +338 -0
  49. mapify_cli-3.17.1/src/mapify_cli/templates/agents/debate-arbiter.md +0 -953
  50. mapify_cli-3.17.1/src/mapify_cli/templates/agents/synthesizer.md +0 -1066
  51. mapify_cli-3.17.1/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -953
  52. mapify_cli-3.17.1/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -1066
  53. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/.claude/hooks/README.md +0 -0
  54. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/.claude/skills/README.md +0 -0
  55. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/.gitignore +0 -0
  56. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/LICENSE +0 -0
  57. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/_locking.py +0 -0
  58. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/cli_ui.py +0 -0
  59. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/config/__init__.py +0 -0
  60. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/config/settings.py +0 -0
  61. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/__init__.py +0 -0
  62. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
  63. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
  64. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/file_copier.py +0 -0
  65. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  66. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/providers.py +0 -0
  67. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
  68. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/dependency_graph.py +0 -0
  69. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/intent_detector.py +0 -0
  70. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/memory/__init__.py +0 -0
  71. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/memory/capture.py +0 -0
  72. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/memory/digest_schema.py +0 -0
  73. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/memory/finalize.py +0 -0
  74. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/memory/recall.py +0 -0
  75. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/minimality_report.py +0 -0
  76. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/ralph_state.py +0 -0
  77. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/repo_insight.py +0 -0
  78. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/research_eval.py +0 -0
  79. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skill_ir.py +0 -0
  80. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
  81. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  82. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  83. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
  84. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  85. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  86. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  87. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
  88. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/runner.py +0 -0
  89. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
  90. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
  91. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  92. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
  93. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
  94. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
  95. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
  96. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
  97. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  98. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
  99. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
  100. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
  101. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/config.toml +0 -0
  102. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +0 -0
  103. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
  104. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  105. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
  106. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  107. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +0 -0
  108. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/README.md +0 -0
  109. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  110. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  111. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  112. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  113. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  114. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  115. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  116. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  117. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  118. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  119. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
  120. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
  121. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/hooks/workflow-gate.py +0 -0
  122. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  123. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  124. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  125. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
  126. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  127. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
  128. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
  129. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
  130. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  131. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
  132. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  133. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
  134. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  135. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  136. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
  137. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
  138. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  139. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  140. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  141. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  142. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
  143. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  144. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  145. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/settings.json +0 -0
  146. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/README.md +0 -0
  147. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
  148. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  149. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  150. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
  151. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  152. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  153. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  154. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  155. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  156. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  157. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
  158. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
  159. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  160. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
  161. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
  162. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  163. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  164. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  165. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
  166. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  167. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  168. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
  169. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  170. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
  171. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  172. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  173. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  174. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
  175. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
  176. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
  177. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/map-understand/SKILL.md +0 -0
  178. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
  179. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
  180. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
  181. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  182. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
  183. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  184. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  185. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
  186. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
  187. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  188. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
  189. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
  190. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
  191. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  192. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +0 -0
  193. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  194. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  195. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
  196. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  197. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +0 -0
  198. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
  199. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  200. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  201. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  202. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  203. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  204. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  205. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  206. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  207. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  208. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  209. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
  210. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
  211. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +0 -0
  212. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  213. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  214. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  215. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
  216. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  217. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
  218. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
  219. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
  220. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  221. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
  222. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  223. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
  224. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  225. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  226. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
  227. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  228. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  229. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  230. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  231. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  232. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
  233. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  234. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  235. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
  236. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  237. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
  238. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  239. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  240. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
  241. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  242. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  243. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  244. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  245. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  246. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  247. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
  248. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
  249. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  250. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
  251. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
  252. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  253. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  254. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  255. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
  256. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  257. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  258. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
  259. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  260. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
  261. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  262. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  263. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  264. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
  265. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
  266. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
  267. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +0 -0
  268. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
  269. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  270. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/token_budget.py +0 -0
  271. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/tools/__init__.py +0 -0
  272. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  273. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/verification_recorder.py +0 -0
  274. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/workflow_finalizer.py +0 -0
  275. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/workflow_logger.py +0 -0
  276. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/src/mapify_cli/workflow_state.py +0 -0
  277. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/__init__.py +0 -0
  278. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/conftest.py +0 -0
  279. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
  280. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/fixtures/codex/config.toml +0 -0
  281. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  282. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/hooks/test_end_of_turn.py +0 -0
  283. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
  284. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/hooks/test_safety_guardrails.py +0 -0
  285. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/__init__.py +0 -0
  286. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/blueprint.json +0 -0
  287. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/code_review.md +0 -0
  288. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/plan_handoff.json +0 -0
  289. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/spec.md +0 -0
  290. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
  291. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  292. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/task_plan.md +0 -0
  293. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/fixtures/verification_summary.md +0 -0
  294. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
  295. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
  296. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/README.md +0 -0
  297. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  298. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  299. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  300. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  301. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  302. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  303. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  304. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  305. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  306. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  307. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  308. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  309. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  310. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  311. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  312. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  313. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  314. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  315. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  316. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  317. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  318. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  319. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  320. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  321. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  322. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  323. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  324. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  325. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  326. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  327. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  328. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  329. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  330. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  331. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  332. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  333. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  334. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  335. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  336. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  337. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  338. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  339. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  340. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  341. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  342. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  343. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  344. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  345. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  346. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  347. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  348. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  349. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  350. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  351. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  352. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  353. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  354. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  355. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  356. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  357. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  358. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  359. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  360. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  361. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  362. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  363. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  364. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  365. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  366. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  367. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  368. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  369. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_agent_cli_correctness.py +0 -0
  370. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_agent_frontmatter.py +0 -0
  371. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_bump_version.py +0 -0
  372. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_dependency_graph.py +0 -0
  373. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_diagnostics.py +0 -0
  374. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_digest_schema.py +0 -0
  375. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_file_copier.py +0 -0
  376. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_hook_patterns.py +0 -0
  377. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_init_import_graph.py +0 -0
  378. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_intent_detector.py +0 -0
  379. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  380. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_jinja2_dep.py +0 -0
  381. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_locking.py +0 -0
  382. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_managed_file_copier.py +0 -0
  383. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_map_orchestrator.py +0 -0
  384. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_map_token_meter.py +0 -0
  385. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_map_utils_sanitize.py +0 -0
  386. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_memory_capture.py +0 -0
  387. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_memory_finalize.py +0 -0
  388. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_memory_integration.py +0 -0
  389. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_memory_recall.py +0 -0
  390. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_memory_review_fixes.py +0 -0
  391. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_minimality_report.py +0 -0
  392. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_post_compact_context.py +0 -0
  393. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_ralph_hooks.py +0 -0
  394. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_ralph_state.py +0 -0
  395. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_repo_insight.py +0 -0
  396. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_research_eval.py +0 -0
  397. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_schemas.py +0 -0
  398. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skill_ir.py +0 -0
  399. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_consistency.py +0 -0
  400. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_aggregator.py +0 -0
  401. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_apply.py +0 -0
  402. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_cli_optimize.py +0 -0
  403. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
  404. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  405. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_fixtures.py +0 -0
  406. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_optimizer.py +0 -0
  407. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  408. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_proposer.py +0 -0
  409. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_runner.py +0 -0
  410. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_schema.py +0 -0
  411. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_skills_eval_viewer.py +0 -0
  412. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_sofa_client.py +0 -0
  413. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_sofa_search.py +0 -0
  414. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_template_render.py +0 -0
  415. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_token_budget.py +0 -0
  416. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_validate_dependencies.py +0 -0
  417. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_validate_spec_citations.py +0 -0
  418. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_verification_recorder.py +0 -0
  419. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_workflow_context_injector.py +0 -0
  420. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_workflow_finalizer.py +0 -0
  421. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_workflow_gate.py +0 -0
  422. {mapify_cli-3.17.1 → mapify_cli-3.18.0}/tests/test_workflow_logger.py +0 -0
  423. {mapify_cli-3.17.1 → mapify_cli-3.18.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.17.1
3
+ Version: 3.18.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
@@ -11,6 +11,7 @@ Requires-Python: >=3.11
11
11
  Requires-Dist: httpx>=0.25.0
12
12
  Requires-Dist: jinja2<4,>=3.1
13
13
  Requires-Dist: platformdirs>=4.0.0
14
+ Requires-Dist: pyyaml>=6.0.0
14
15
  Requires-Dist: questionary>=2.0.0
15
16
  Requires-Dist: readchar>=4.0.0
16
17
  Requires-Dist: rich>=13.0.0
@@ -249,10 +250,10 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
249
250
 
250
251
  ```yaml
251
252
  # .map/config.yaml
252
- minimality: lite # new installs default to lite; existing repos without the key stay off
253
+ minimality: lite # default for ALL projects incl. keyless configs (#183); set 'off' to opt out
253
254
  ```
254
255
 
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.
256
+ Allowed values: `off`, `lite`, `full`, `ultra`. The global default is `lite` (Phase 3 flip, #183 — keyless configs included; set `off` to opt out). `lite` is conservative: 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 still inspect local rollout telemetry with `mapify minimality-report --json`, which compares complete `off` and opt-in run-health cohorts, reports sample gaps and cohort branch names, lists next telemetry actions, and emits a candidate-only `manual_review_gate` with opt-in branches plus a clarity/underscope checklist.
256
257
 
257
258
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
258
259
 
@@ -263,7 +264,7 @@ mapify init . --compression aggressive # nudge at 0.4 x threshold
263
264
  mapify init . --compression-threshold 250000 # Opus 1M / 50+ subtask plans
264
265
  ```
265
266
 
266
- Actor and reviewer prompts always carry the full bundled context — context-block truncation was removed. If the conversation grows beyond your model's window, opt into `/compact` via `--compression auto` or trigger it manually. See [docs/USAGE.md#context-budget-policy](docs/USAGE.md).
267
+ Actor and reviewer prompts always carry the full bundled context — context-block truncation was removed. If the conversation grows beyond your model's window, opt into `/compact` via `--compression auto` or trigger it manually. When a policy other than `never` is active, MAP also offloads large tool outputs (grep/test/file-read results) to `.map/<branch>/compacted/` before `/compact` drops them, so a dropped output is re-read from its sidecar instead of re-running broad discovery (these sidecars can hold secrets — they are `0o600` and self-ignored from git; never push `.map/`). See [docs/USAGE.md#context-budget-policy](docs/USAGE.md).
267
268
 
268
269
  **Stack Overflow for Agents (SOFA)** read-only prior-art search — **off by default**, no network or credentials unless you enable it:
269
270
 
@@ -205,10 +205,10 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
205
205
 
206
206
  ```yaml
207
207
  # .map/config.yaml
208
- minimality: lite # new installs default to lite; existing repos without the key stay off
208
+ minimality: lite # default for ALL projects incl. keyless configs (#183); set 'off' to opt out
209
209
  ```
210
210
 
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.
211
+ Allowed values: `off`, `lite`, `full`, `ultra`. The global default is `lite` (Phase 3 flip, #183 — keyless configs included; set `off` to opt out). `lite` is conservative: 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 still inspect local rollout telemetry with `mapify minimality-report --json`, which compares complete `off` and opt-in run-health cohorts, reports sample gaps and cohort branch names, lists next telemetry actions, and emits a candidate-only `manual_review_gate` with opt-in branches plus a clarity/underscope checklist.
212
212
 
213
213
  **Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
214
214
 
@@ -219,7 +219,7 @@ mapify init . --compression aggressive # nudge at 0.4 x threshold
219
219
  mapify init . --compression-threshold 250000 # Opus 1M / 50+ subtask plans
220
220
  ```
221
221
 
222
- Actor and reviewer prompts always carry the full bundled context — context-block truncation was removed. If the conversation grows beyond your model's window, opt into `/compact` via `--compression auto` or trigger it manually. See [docs/USAGE.md#context-budget-policy](docs/USAGE.md).
222
+ Actor and reviewer prompts always carry the full bundled context — context-block truncation was removed. If the conversation grows beyond your model's window, opt into `/compact` via `--compression auto` or trigger it manually. When a policy other than `never` is active, MAP also offloads large tool outputs (grep/test/file-read results) to `.map/<branch>/compacted/` before `/compact` drops them, so a dropped output is re-read from its sidecar instead of re-running broad discovery (these sidecars can hold secrets — they are `0o600` and self-ignored from git; never push `.map/`). See [docs/USAGE.md#context-budget-policy](docs/USAGE.md).
223
223
 
224
224
  **Stack Overflow for Agents (SOFA)** read-only prior-art search — **off by default**, no network or credentials unless you enable it:
225
225
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.17.1"
3
+ version = "3.18.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"
@@ -12,7 +12,13 @@ dependencies = [
12
12
  "jinja2>=3.1,<4",
13
13
  "platformdirs>=4.0.0",
14
14
  "readchar>=4.0.0",
15
- "questionary>=2.0.0"
15
+ "questionary>=2.0.0",
16
+ # mapify is a config-driven CLI: project_config.py loads .map/config.yaml via
17
+ # PyYAML on every config-dependent path (minimality-report, init overrides).
18
+ # It MUST be a hard runtime dep — a normal install (uv tool / pipx / pip
19
+ # without dev/test extras) otherwise ships without yaml, hits ImportError,
20
+ # and silently falls back to default config, ignoring the user's settings (#245).
21
+ "pyyaml>=6.0.0"
16
22
  ]
17
23
 
18
24
  [project.optional-dependencies]
@@ -23,7 +23,7 @@ Or install globally:
23
23
  mapify check
24
24
  """
25
25
 
26
- __version__ = "3.17.1"
26
+ __version__ = "3.18.0"
27
27
 
28
28
  import os
29
29
  import subprocess
@@ -23,8 +23,6 @@ def create_mcp_config(project_path: Path, mcp_servers: List[str]) -> None:
23
23
  "evaluator": [],
24
24
  "reflector": [],
25
25
  "documentation-reviewer": [],
26
- "debate-arbiter": [],
27
- "synthesizer": [],
28
26
  "research-agent": [],
29
27
  "final-verifier": [],
30
28
  },
@@ -62,7 +60,6 @@ def create_mcp_config(project_path: Path, mcp_servers: List[str]) -> None:
62
60
  "monitor",
63
61
  "evaluator",
64
62
  "reflector",
65
- "debate-arbiter",
66
63
  ]:
67
64
  if agent in config["agent_mcp_mappings"]:
68
65
  config["agent_mcp_mappings"][agent].append("sequential-thinking")
@@ -16,6 +16,7 @@ except ImportError:
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
18
  VALID_MINIMALITY = frozenset({"off", "lite", "full", "ultra"})
19
+ VALID_PROMPT_LAYERING = frozenset({"docs_first", "stable_first"})
19
20
 
20
21
 
21
22
  @dataclass
@@ -79,9 +80,22 @@ class MapConfig:
79
80
  # Language preference for agent responses
80
81
  language: str = ""
81
82
 
82
- # Minimality doctrine intensity. Existing projects that have no config key
83
- # stay off; new generated configs opt into lite explicitly.
84
- minimality: str = "off"
83
+ # Minimality doctrine intensity. Phase 3 (#183) flipped the global default
84
+ # off -> lite after the promotion gate (`mapify minimality-report`) reached
85
+ # `candidate` and the manual review gate passed: projects with no config key
86
+ # now default to `lite` (advisory complexity-lens; no behavior/verdict gating).
87
+ minimality: str = "lite"
88
+
89
+ # Agent-prompt layering for repeated same-workflow dispatches (#231).
90
+ # "docs_first" (default) = variable <documents> first, stable contract
91
+ # last — optimized for recency / "lost-in-the-middle".
92
+ # "stable_first" = stable contract first, variable <documents> last — a
93
+ # byte-identical prefix across same-role dispatches. Resolved
94
+ # cache-neutral at the Claude Code Task layer (the harness owns
95
+ # cache_control and the seam is mid-block), but NOT a behavior
96
+ # no-op: it changes token order / attention. Kept opt-in; never
97
+ # remapped to docs_first. See docs/ARCHITECTURE.md (#231).
98
+ prompt_layering: str = "docs_first"
85
99
 
86
100
  # Context compression policy (see docs/context-compression-plan.md)
87
101
  # "never" = never inject /compact nudge (default — user opts in by
@@ -167,6 +181,15 @@ def load_map_config(project_path: Path) -> MapConfig:
167
181
  if isinstance(data, dict) and "sofa.enabled" in data and "sofa_enabled" not in data:
168
182
  data["sofa_enabled"] = data.pop("sofa.enabled")
169
183
 
184
+ # YAML 1.1 parses bare ``off``/``on`` as booleans, so ``minimality: off``
185
+ # — the documented opt-out from the lite default (#183) — arrives as bool
186
+ # ``False``. Coerce it back to the string level before the type-check loop;
187
+ # otherwise the str field rejects the bool and silently falls back to the
188
+ # lite default, breaking opt-out. ``False`` -> ``"off"`` (valid opt-out);
189
+ # ``True`` -> ``"on"`` (not a real level -> rejected -> lite fallback).
190
+ if isinstance(data, dict) and isinstance(data.get("minimality"), bool):
191
+ data["minimality"] = "off" if data["minimality"] is False else "on"
192
+
170
193
  # Map YAML keys to MapConfig fields, filtering out unrecognized keys
171
194
  # and validating types against dataclass field annotations
172
195
  defaults = MapConfig()
@@ -216,12 +239,22 @@ def load_map_config(project_path: Path) -> MapConfig:
216
239
  if cfg.minimality not in VALID_MINIMALITY:
217
240
  logger.warning(
218
241
  "Invalid minimality %r in %s (expected one of %s). "
219
- "Using default 'off'.",
242
+ "Using default 'lite'.",
220
243
  cfg.minimality,
221
244
  config_file,
222
245
  ", ".join(sorted(VALID_MINIMALITY)),
223
246
  )
224
- cfg.minimality = "off"
247
+ cfg.minimality = "lite"
248
+
249
+ if cfg.prompt_layering not in VALID_PROMPT_LAYERING:
250
+ logger.warning(
251
+ "Invalid prompt_layering %r in %s (expected one of %s). "
252
+ "Using default 'docs_first'.",
253
+ cfg.prompt_layering,
254
+ config_file,
255
+ ", ".join(sorted(VALID_PROMPT_LAYERING)),
256
+ )
257
+ cfg.prompt_layering = "docs_first"
225
258
 
226
259
  return cfg
227
260
 
@@ -317,6 +350,16 @@ profile: full
317
350
  # Allowed: off, lite, full, ultra
318
351
  minimality: lite
319
352
 
353
+ # Agent-prompt layering for repeated same-workflow dispatches (#231).
354
+ # "docs_first" (default) orders the variable <documents> first and the stable
355
+ # task/instructions/expected_output contract last — best for recency/attention.
356
+ # "stable_first" puts the stable contract first (byte-identical prefix across
357
+ # same-role dispatches). Resolved cache-neutral at the Claude Code Task layer
358
+ # (harness owns cache_control; the seam is mid-block) but it still changes token
359
+ # order/attention, so it is kept opt-in — see docs/ARCHITECTURE.md (#231).
360
+ # Allowed: docs_first, stable_first
361
+ # prompt_layering: docs_first
362
+
320
363
  # Context compression policy. Default is "never" — the /compact nudge is
321
364
  # opt-in. Uncomment and switch to "auto" or "aggressive" if you want the
322
365
  # meter to interrupt long workflows and ask Claude to compact.
@@ -684,6 +684,10 @@ WORKFLOW_FIT_DECISION_SCHEMA = {
684
684
  "needs_independent_review": {"type": "boolean"},
685
685
  "has_clear_acceptance_criteria": {"type": "boolean"},
686
686
  "test_first_required": {"type": "boolean"},
687
+ # Optional (not required): pre-existing workflow-fit.json files
688
+ # written before this signal existed must still validate. New
689
+ # writes always emit it (record_workflow_fit defaults it False).
690
+ "depends_on_runtime_state": {"type": "boolean"},
687
691
  },
688
692
  "required": [
689
693
  "expected_diff_size",
@@ -1,5 +1,8 @@
1
1
  # Phase E cross-session memory: scratch WAL is transient (never commit)
2
2
  .map/*/sessions/scratch/
3
+ # Offloaded tool outputs (#232) may contain secrets — never commit. A
4
+ # self-contained .map/<branch>/compacted/.gitignore enforces this too.
5
+ .map/*/compacted/
3
6
  # Digests (.map/*/sessions/*.md) are committed by default. To keep them
4
7
  # local, set MAP_MEMORY_COMMIT_DIGESTS=0 and uncomment the next line:
5
8
  # .map/*/sessions/
@@ -74,43 +74,6 @@ You are a Protocol-Driven Code Execution System. Your objective: translate an AA
74
74
  - `{{variable}}` (lowercase): Pre-filled by MAP framework Orchestrator before you see them
75
75
  - `{{variable}}` (in generated code): Preserve exactly for runtime substitution when instructed
76
76
 
77
- ### Self-MoA Support (Optional)
78
-
79
- When invoked in Self-MoA mode, Actor generates variants with specific optimization focus.
80
-
81
- | Field | Type | Description | Values |
82
- |-------|------|-------------|--------|
83
- | `approach_focus` | string | Primary optimization constraint | `"security"` \| `"performance"` \| `"simplicity"` |
84
- | `self_moa_mode` | boolean | Multiple variants indicator | `true` \| `false` |
85
- | `variant_id` | string | Variant identifier for synthesis | `"v1"`, `"v2"`, `"v3"` |
86
-
87
- **Behavior per focus:**
88
- - **security**: Prioritize input validation, OWASP compliance, defensive coding, parameterized queries
89
- - **performance**: Prioritize algorithm efficiency, caching strategies, async patterns, minimal allocations
90
- - **simplicity**: Prioritize the smallest sufficient safe change: stdlib/native/existing project patterns before new abstractions, with clarity over cleverness
91
-
92
- **CRITICAL:** Even with focus, NEVER compromise basic security or correctness. All variants must:
93
- - Validate input at boundaries
94
- - Handle errors explicitly (no silent failures)
95
- - Follow contract constraints (if provided)
96
-
97
- **Output in Self-MoA Mode:**
98
- When `self_moa_mode: true`, include additional field in output:
99
- ```json
100
- {
101
- "decisions_made": [
102
- {
103
- "category": "algorithm|error_handling|structure|security|performance|observability|readability",
104
- "statement": "Use list comprehension instead of for-loop",
105
- "rationale": "Better performance for this transformation",
106
- "priority_class": "correctness|security|maintainability|performance"
107
- }
108
- ]
109
- }
110
- ```
111
-
112
- This enables Synthesizer to extract and resolve decisions across variants.
113
-
114
77
  ---
115
78
 
116
79
  <Actor_MCP_Protocol>
@@ -2,10 +2,12 @@
2
2
  name: documentation-reviewer
3
3
  description: Reviews technical documentation for completeness, external dependencies, and architectural consistency
4
4
  model: sonnet
5
- version: 3.1.0
6
- last_updated: 2025-11-27
5
+ version: 3.1.1
6
+ last_updated: 2026-06-19
7
7
  ---
8
8
 
9
+ > **Dispatch status:** Optional / user-dispatchable agent — not auto-wired into any shipped MAP skill pipeline (no `subagent_type="documentation-reviewer"` dispatch site exists). Invoke manually via `Task(subagent_type="documentation-reviewer", …)`. Retained per the Agent-Boundary Doctrine in `docs/ARCHITECTURE.md` because it emits a unique, non-relay verdict (docs-vs-source-architecture review).
10
+
9
11
  # QUICK REFERENCE (Read First)
10
12
 
11
13
  ```
@@ -1602,7 +1602,6 @@ Do NOT invent issues to justify review effort. Empty `issues` array is valid.
1602
1602
  "type": "object",
1603
1603
  "required": ["valid", "summary", "issues", "passed_checks", "failed_checks", "feedback_for_actor", "estimated_fix_time", "mcp_tools_used"],
1604
1604
  "additionalProperties": true,
1605
- "description_note": "additionalProperties: true allows Self-MoA extension fields (variant_id, decisions_identified, compatibility_features, etc.) - see Self-MoA Output Extension section",
1606
1605
  "properties": {
1607
1606
  "valid": {
1608
1607
  "type": "boolean",
@@ -1873,93 +1872,6 @@ IF map-state workflow active AND valid === true:
1873
1872
  - **estimated_fix_time** (string): Realistic estimate
1874
1873
  - **mcp_tools_used** (array): Tools used for debugging
1875
1874
 
1876
- ### Self-MoA Output Extension
1877
-
1878
- When reviewing code in Self-MoA mode (variant validation), include additional fields to support Synthesizer:
1879
-
1880
- ```json
1881
- {
1882
- "variant_id": "v1",
1883
- "self_moa_mode": true,
1884
-
1885
- "decisions_identified": [
1886
- {
1887
- "id": "dec-001",
1888
- "category": "performance",
1889
- "statement": "Use list comprehension for data transformation",
1890
- "rationale": "Better performance for this use case",
1891
- "source_variant": "v1",
1892
- "priority_class": "performance",
1893
- "conflicts_with": [],
1894
- "code_location": "process_data:45",
1895
- "confidence": 0.9
1896
- },
1897
- {
1898
- "id": "dec-002",
1899
- "category": "error_handling",
1900
- "statement": "Return Result type for explicit error handling",
1901
- "rationale": "Makes error cases visible in type system",
1902
- "source_variant": "v1",
1903
- "priority_class": "correctness",
1904
- "conflicts_with": ["dec-003"],
1905
- "code_location": "process_data:12",
1906
- "confidence": 0.85
1907
- }
1908
- ],
1909
-
1910
- "compatibility_features": {
1911
- "error_paradigm": "Result",
1912
- "concurrency_model": "sync",
1913
- "state_management": "stateless",
1914
- "type_strictness": "strict",
1915
- "naming_convention": "snake_case",
1916
- "imports_used": ["typing", "dataclasses", "logging"]
1917
- },
1918
-
1919
- "spec_contract_compliant": true,
1920
- "spec_contract_violations": [],
1921
-
1922
- "strengths": [
1923
- "Excellent input validation",
1924
- "Clear error messages"
1925
- ],
1926
- "weaknesses": [
1927
- "O(n²) algorithm in main loop"
1928
- ],
1929
-
1930
- "recommended_as_base": true
1931
- }
1932
- ```
1933
-
1934
- **Self-MoA Field Descriptions:**
1935
-
1936
- | Field | Type | Description |
1937
- |-------|------|-------------|
1938
- | `variant_id` | string | Identifier matching Actor's variant_id ("v1", "v2", "v3") |
1939
- | `self_moa_mode` | boolean | Must be `true` when in Self-MoA mode |
1940
- | `decisions_identified` | array | 3-8 key design decisions extracted from variant code |
1941
- | `compatibility_features` | object | Features for orchestrator's deterministic compatibility scoring |
1942
- | `spec_contract_compliant` | boolean | Whether variant follows SpecificationContract (if provided) |
1943
- | `spec_contract_violations` | array | List of SpecificationContract violations (empty if compliant) |
1944
- | `strengths` | array | Notable positive aspects of the variant |
1945
- | `weaknesses` | array | Areas where variant is suboptimal |
1946
- | `recommended_as_base` | boolean | True if variant has good structure for base_enhance strategy |
1947
-
1948
- **Decision Extraction Guidelines:**
1949
-
1950
- 1. Extract 3-8 key decisions per variant (not every line of code)
1951
- 2. Focus on architectural and algorithmic choices
1952
- 3. Include explicit `conflicts_with` if decision contradicts common alternatives
1953
- 4. Set `confidence` based on clarity of decision in code (0.0-1.0)
1954
- 5. Use `priority_class` to categorize decision importance
1955
-
1956
- **Compatibility Features Purpose:**
1957
-
1958
- Monitor outputs FEATURES, orchestrator computes SCORES. This separation ensures:
1959
- - Deterministic scoring (no LLM randomness in compatibility calculation)
1960
- - Auditable decisions (features are inspectable)
1961
- - Consistent pairwise comparison across variants
1962
-
1963
1875
  </Monitor_Output_v2_9>
1964
1876
 
1965
1877
 
@@ -168,7 +168,10 @@ so Actor/Monitor can distinguish planner-wide context from current-subtask
168
168
  evidence. Use `researcher` when independent exploration is useful: cold-start
169
169
  repository exploration, 3+ existing files, high risk, unclear locations, or
170
170
  failed direct search. Otherwise research in the current session and save concise
171
- strict-JSON findings. If the subtask truly needs no Actor/Monitor, use
171
+ strict-JSON findings exact field table + copy-pasteable skeleton in
172
+ [efficient-reference.md](efficient-reference.md) under "RESEARCH artifact schema"
173
+ (`validate_research` also echoes that skeleton in its `skeleton` field on any
174
+ failure). If the subtask truly needs no Actor/Monitor, use
172
175
  `mark_subtask_complete --reason` instead of closing RESEARCH. Validate the
173
176
  research contract, then close RESEARCH before Actor work:
174
177
 
@@ -104,6 +104,54 @@ Final verification must prove the full plan:
104
104
  - Confirm Monitor artifacts do not contain unresolved valid=false findings.
105
105
  - Write `run_health_report.json` with `write_run_health_report`.
106
106
 
107
+ ## RESEARCH artifact schema (exact contract)
108
+
109
+ `save_research` persists the bytes you pipe verbatim; `validate_research` then
110
+ enforces the machine-checkable contract below before Actor consumes the artifact.
111
+ Hand-author to this exact schema so the FIRST save validates.
112
+
113
+ Top-level object — strict JSON only (no markdown, no ``` code fences, ≤ 64 KiB):
114
+
115
+ | field | type | rule |
116
+ | --- | --- | --- |
117
+ | `status` | string | exactly one of `OK`, `PARTIAL_RESULTS`, `NO_RESULTS`, `SEARCH_FAILED` (upper-case enum — NOT free text like `"complete"`/`"high"`) |
118
+ | `confidence` | number | float in `[0, 1]` (NOT a word like `"high"`) |
119
+ | `search_stats` | object | exactly `files_scanned` (int ≥ 0), `total_matches_found` (int ≥ 0), `results_truncated` (bool) — these exact field names |
120
+ | `relevant_locations` | array | ≤ 5 entries; each is `{path, lines, relevance}` |
121
+
122
+ Each `relevant_locations[]` entry:
123
+
124
+ | field | type | rule |
125
+ | --- | --- | --- |
126
+ | `path` | string | safe relative repo path (no absolute, `~`, `\`, or `..`); must exist unless the entry is marked absent (`"exists": false`, `"absent": true`, or `"status"` ∈ `absent`/`missing`/`new`/`not_found`) |
127
+ | `lines` | array | `[start, end]` — two positive ints, `start ≤ end`, span `end - start + 1 ≤ 200`, `end` within the file's line count (NOT a `"start-end"` string) |
128
+ | `relevance` | string | non-empty; explain why the range matters. Never inline `content`/`file_contents`/`raw_code` |
129
+
130
+ Copy-pasteable skeleton (a valid artifact — swap in your real values):
131
+
132
+ ```json
133
+ {
134
+ "status": "OK",
135
+ "confidence": 0.8,
136
+ "search_stats": {
137
+ "files_scanned": 12,
138
+ "total_matches_found": 4,
139
+ "results_truncated": false
140
+ },
141
+ "relevant_locations": [
142
+ {
143
+ "path": "src/example/module.py",
144
+ "lines": [10, 42],
145
+ "relevance": "why this range matters to the current subtask"
146
+ }
147
+ ]
148
+ }
149
+ ```
150
+
151
+ `validate_research` echoes this exact skeleton in its `skeleton` field on ANY
152
+ failure, so the first reject is self-correcting: copy the `skeleton`, swap your
153
+ values, re-save. Extra fields beyond the contract are allowed and ignored.
154
+
107
155
  ## Troubleshooting
108
156
 
109
157
  - `resume_from_plan` fails: inspect the returned JSON and fix missing plan,
@@ -58,6 +58,7 @@ Assess whether MAP planning is warranted. Evaluate these signals:
58
58
  - `needs_independent_review`: risky enough to require review?
59
59
  - `has_clear_acceptance_criteria`: can be executed without a planning pass?
60
60
  - `test_first_required`: TDD warranted because behavior contract matters?
61
+ - `depends_on_runtime_state`: does correctness depend on **current production/runtime state** (applied migration head, a table/column/index/enum value present in the live DB, current row counts / backfill volume, the actual value of a feature flag or config, runtime capacity/traffic)? Ask the operator when unsure — **if unsure, true.** False for refactors, tests, docs, static-config; "code will run in prod" is not runtime-dependence. When true, Step 0.6 runs.
61
62
 
62
63
  Pick one outcome:
63
64
  - `direct-edit` — tiny, isolated, clear acceptance criteria, no new invariants
@@ -71,9 +72,11 @@ shell_command:
71
72
  cmd: |
72
73
  python3 .map/scripts/map_step_runner.py record_workflow_fit \
73
74
  "<direct-edit|map-fast|map-plan>" \
74
- "<tiny|small|medium|large>" \
75
- "<true|false>" "<true|false>" "<true|false>" "<true|false>" \
76
- "<one-sentence decision summary>"
75
+ --diff-size "<tiny|small|medium|large>" \
76
+ --has-new-invariants <0|1> --needs-independent-review <0|1> \
77
+ --has-clear-acceptance-criteria <0|1> --test-first-required <0|1> \
78
+ --depends-on-runtime-state <0|1> \
79
+ --summary "<one-sentence decision summary>"
77
80
  ```
78
81
 
79
82
  - Outcome `direct-edit`: print off-ramp explanation and STOP.
@@ -152,6 +155,22 @@ When unsure whether existing code truly satisfies the request, treat it as parti
152
155
 
153
156
  ---
154
157
 
158
+ ## Step 0.6: Verify Live/Runtime State Gate (MANDATORY when `depends_on_runtime_state=true`)
159
+
160
+ The runtime analogue of Step 0.5. Step 0.5 stops you re-planning code that already exists; Step 0.6 stops you planning against **runtime facts that have drifted** from the design docs / memory the plan copied them from. Skip only when `depends_on_runtime_state=false`.
161
+
162
+ Static discovery reads only the repo — it cannot see prod row counts, the enum labels actually present in a live DB, a column that already exists, the applied migration head, or a live feature-flag value. **Caution:** code can exist in the repo (Step 0.5 `file:line` proof) while its migration / feature flag is NOT yet applied in prod; verify runtime separately.
163
+
164
+ Signals that arm the gate: a DB migration / data backfill; "measured on prod" / "currently" / "as of" numbers in the source; count-based acceptance criteria referencing current state ("migrate the 10k existing rows"), not a forward target ("1k RPS"); a feature-flag / config cutover; capacity / latency assumptions; "this column/table/enum value already exists".
165
+
166
+ For each assumption the plan's correctness rests on:
167
+ - **Verifiable read-only now** — confirm via an approved read-only source (read replica, dashboard, runbook, `INFORMATION_SCHEMA` / `pg_enum` / migration-head introspection). Record the **fact** + source, not the raw rows.
168
+ - **Prod unreachable / unchecked** — record an `Unverified Runtime Assumption` under spec Open Questions / Risks with the **exact read-only check** + safe source, and mark dependent subtasks `provisional`. Do NOT bake the assumption in as fact.
169
+
170
+ Safety: this skill is a planning-time gate, NOT a runtime tool — it suggests checks, it does not run them (defer to the operator or an authorized sub-agent). Prefer bounded / metadata queries over full scans / `COUNT(*)`; never write, mutate, or flip flags; never paste PII, secrets, or bulky prod output into the spec or `.map/<branch>/` artifacts (they may be committed); no isolation-level / `NOLOCK` hints. Do not hard-stop merely because prod is unreachable — record-the-check is the contract. If a runtime dependency surfaces later during decomposition, loop back and verify-or-record it.
171
+
172
+ ---
173
+
155
174
  ## Step 1: Assess Scope and Decide Interview Depth
156
175
 
157
176
  Read the user's requirements and decide if a deep interview is needed.
@@ -200,6 +200,28 @@ def build_reprime(branch: str, branch_dir: Path) -> str | None:
200
200
  return truncate_text("\n".join(lines), REPRIME_LIMIT)
201
201
 
202
202
 
203
+ def offloaded_outputs_pointer(branch: str, branch_dir: Path) -> str | None:
204
+ """Pointer to tool outputs offloaded before compaction, if any (#232).
205
+
206
+ Rebuilds the manifest from the append-only index and returns the recovery
207
+ line. Lazy-imports mapify_cli and degrades to ``None`` (silent) when it is
208
+ unavailable or nothing was offloaded.
209
+ """
210
+ try:
211
+ sys.path.insert(0, str(PROJECT_DIR / "src"))
212
+ try:
213
+ from mapify_cli.tool_output_offload import (
214
+ build_manifest,
215
+ recovery_pointer_text,
216
+ )
217
+ except ImportError:
218
+ return None
219
+ build_manifest(branch_dir / "compacted")
220
+ return recovery_pointer_text(branch, branch_dir)
221
+ except Exception:
222
+ return None
223
+
224
+
203
225
  def main() -> None:
204
226
  try:
205
227
  json.load(sys.stdin)
@@ -229,6 +251,12 @@ def main() -> None:
229
251
  except (IOError, OSError):
230
252
  pass
231
253
 
254
+ # Point at any tool outputs offloaded before compaction (#232) so the agent
255
+ # re-reads a sidecar instead of re-running broad discovery.
256
+ offload_pointer = offloaded_outputs_pointer(branch, branch_dir)
257
+ if offload_pointer:
258
+ parts.append(offload_pointer)
259
+
232
260
  # Check for workflow restore point
233
261
  restore = branch_dir / "restore_point.json"
234
262
  if restore.exists():
@@ -129,6 +129,37 @@ def parse_transcript(transcript_path: Path) -> str:
129
129
  return "\n".join(lines)
130
130
 
131
131
 
132
+ def maybe_offload_tool_outputs(transcript_path: str, branch_dir: Path) -> None:
133
+ """Offload large tool-result bodies before compaction drops them (#232).
134
+
135
+ Only runs when ``compression_policy != never`` so a default install never
136
+ creates ``.map/<branch>/compacted/``. Lazy-imports mapify_cli and degrades
137
+ to a silent no-op if it is not importable. Never raises — a PreCompact hook
138
+ must not break compaction.
139
+ """
140
+ try:
141
+ sys.path.insert(0, str(PROJECT_DIR / "src"))
142
+ try:
143
+ from mapify_cli.config.project_config import load_map_config
144
+ from mapify_cli.tool_output_offload import (
145
+ offload_transcript_tool_outputs,
146
+ )
147
+ except ImportError:
148
+ return
149
+ config = load_map_config(PROJECT_DIR)
150
+ if config.compression_policy == "never":
151
+ return
152
+ summary = offload_transcript_tool_outputs(Path(transcript_path), branch_dir)
153
+ if summary.written:
154
+ print(
155
+ f"[pre-compact-save] Offloaded {summary.written} tool output(s) "
156
+ f"to {branch_dir / 'compacted'}",
157
+ file=sys.stderr,
158
+ )
159
+ except Exception: # never break compaction
160
+ pass
161
+
162
+
132
163
  def main() -> None:
133
164
  if os.environ.get("MAP_INVOKED_BY"):
134
165
  sys.exit(0)
@@ -190,6 +221,10 @@ def main() -> None:
190
221
  except (IOError, OSError):
191
222
  pass
192
223
 
224
+ # Offload full-resolution tool-result bodies so dropped outputs stay
225
+ # recoverable instead of forcing a re-run of broad discovery (#232).
226
+ maybe_offload_tool_outputs(transcript_path, branch_dir)
227
+
193
228
  print("{}")
194
229
  sys.exit(0)
195
230
 
@@ -3705,6 +3705,25 @@ def _emit_context_budget_warning(branch: str, transcript_path: Optional[str]) ->
3705
3705
  threshold=threshold,
3706
3706
  focus=_map_config_str(project_dir, "compression_focus", ""),
3707
3707
  )
3708
+
3709
+ # Offload large tool-result bodies before the (recommended) compaction drops
3710
+ # them, then point the operator/agent at the sidecars (#232). Provider-
3711
+ # agnostic: reuses the same transcript this warning already read. Lazy import
3712
+ # with graceful fallback — never block the warning on a missing mapify_cli.
3713
+ branch_dir = project_dir / ".map" / branch
3714
+ try:
3715
+ from mapify_cli.tool_output_offload import ( # noqa: PLC0415
3716
+ offload_transcript_tool_outputs,
3717
+ recovery_pointer_text,
3718
+ )
3719
+
3720
+ offload_transcript_tool_outputs(path, branch_dir)
3721
+ pointer = recovery_pointer_text(branch, branch_dir)
3722
+ if pointer:
3723
+ message = f"{message}\n\n{pointer}"
3724
+ except Exception: # noqa: BLE001 — warning must never raise
3725
+ pass
3726
+
3708
3727
  # stderr keeps stdout clean for JSON consumers (the orchestrator's
3709
3728
  # contract is JSON-on-stdout for every command).
3710
3729
  print(message, file=sys.stderr)