mapify-cli 3.25.0__tar.gz → 3.26.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 (530) hide show
  1. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/PKG-INFO +3 -1
  2. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/README.md +2 -0
  3. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/pyproject.toml +1 -1
  4. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/__init__.py +1 -1
  5. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/schemas.py +184 -1
  6. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/CLAUDE.md +7 -0
  7. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/final-verifier.md +15 -2
  8. {mapify_cli-3.25.0/src/mapify_cli/templates → mapify_cli-3.26.0/src/mapify_cli/templates/codex}/hooks/workflow-gate.py +159 -3
  9. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +14 -4
  10. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +40 -1
  11. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +6 -1
  12. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-review/SKILL.md +14 -2
  13. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-review/review-reference.md +3 -3
  14. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +155 -0
  15. {mapify_cli-3.25.0/src/mapify_cli/templates/codex → mapify_cli-3.26.0/src/mapify_cli/templates}/hooks/workflow-gate.py +159 -3
  16. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +2 -2
  17. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +1531 -76
  18. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +1 -1
  19. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +3 -3
  20. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +3 -3
  21. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +2 -2
  22. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +2 -2
  23. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/bash-guidelines.md +27 -0
  24. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/settings.json +0 -22
  25. mapify_cli-3.26.0/src/mapify_cli/templates/skills/map-auto/SKILL.md +104 -0
  26. mapify_cli-3.26.0/src/mapify_cli/templates/skills/map-auto/auto-reference.md +78 -0
  27. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +3 -3
  28. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +13 -5
  29. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +48 -9
  30. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +7 -2
  31. mapify_cli-3.26.0/src/mapify_cli/templates/skills/map-prd-review/SKILL.md +152 -0
  32. mapify_cli-3.26.0/src/mapify_cli/templates/skills/map-release/SKILL.md +179 -0
  33. mapify_cli-3.26.0/src/mapify_cli/templates/skills/map-release/release-reference.md +468 -0
  34. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +3 -3
  35. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +21 -9
  36. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +15 -7
  37. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +3 -3
  38. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/skill-rules.json +44 -0
  39. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +7 -0
  40. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +15 -2
  41. {mapify_cli-3.25.0/src/mapify_cli/templates_src → mapify_cli-3.26.0/src/mapify_cli/templates_src/codex}/hooks/workflow-gate.py.jinja +159 -3
  42. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +14 -4
  43. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +40 -1
  44. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +6 -1
  45. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-review/SKILL.md.jinja +14 -2
  46. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-review/review-reference.md.jinja +3 -3
  47. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +155 -0
  48. {mapify_cli-3.25.0/src/mapify_cli/templates_src/codex → mapify_cli-3.26.0/src/mapify_cli/templates_src}/hooks/workflow-gate.py.jinja +159 -3
  49. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +2 -2
  50. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +1531 -76
  51. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +1 -1
  52. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +3 -3
  53. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +3 -3
  54. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +2 -2
  55. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +2 -2
  56. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +27 -0
  57. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -22
  58. mapify_cli-3.26.0/src/mapify_cli/templates_src/skills/map-auto/SKILL.md.jinja +104 -0
  59. mapify_cli-3.26.0/src/mapify_cli/templates_src/skills/map-auto/auto-reference.md.jinja +78 -0
  60. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +3 -3
  61. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +13 -5
  62. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +48 -9
  63. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +7 -2
  64. mapify_cli-3.26.0/src/mapify_cli/templates_src/skills/map-prd-review/SKILL.md.jinja +152 -0
  65. mapify_cli-3.26.0/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +179 -0
  66. mapify_cli-3.26.0/src/mapify_cli/templates_src/skills/map-release/release-reference.md.jinja +468 -0
  67. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +3 -3
  68. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +21 -9
  69. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +15 -7
  70. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +3 -3
  71. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +44 -0
  72. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/hooks/test_safety_guardrails.py +194 -0
  73. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_agent_frontmatter.py +20 -4
  74. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_approval_hold.py +132 -3
  75. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_artifact_schemas.py +109 -0
  76. mapify_cli-3.26.0/tests/test_map_auto.py +148 -0
  77. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_map_step_runner.py +1807 -7
  78. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_settings_deny_globs.py +56 -97
  79. mapify_cli-3.26.0/tests/test_shell_json_pipes.py +125 -0
  80. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills.py +285 -1
  81. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_consistency.py +17 -7
  82. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_validate_spec_citations.py +17 -0
  83. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_workflow_gate.py +409 -2
  84. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_worktree_isolation.py +244 -0
  85. mapify_cli-3.25.0/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -1248
  86. mapify_cli-3.25.0/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -1248
  87. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/.claude/hooks/README.md +0 -0
  88. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/.claude/skills/README.md +0 -0
  89. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/.gitignore +0 -0
  90. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/LICENSE +0 -0
  91. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/_locking.py +0 -0
  92. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/boundary_quality_report.py +0 -0
  93. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/cli_ui.py +0 -0
  94. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/code_map.py +0 -0
  95. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/config/__init__.py +0 -0
  96. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/config/mcp.py +0 -0
  97. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/config/project_config.py +0 -0
  98. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/config/settings.py +0 -0
  99. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/__init__.py +0 -0
  100. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
  101. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
  102. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/domain_skill.py +0 -0
  103. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/file_copier.py +0 -0
  104. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/governance_report.py +0 -0
  105. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  106. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/providers.py +0 -0
  107. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
  108. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/dependency_graph.py +0 -0
  109. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/grace_eval/__init__.py +0 -0
  110. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/grace_eval/schema.py +0 -0
  111. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/grace_eval/sweep.py +0 -0
  112. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/install_manifest.py +0 -0
  113. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/intent_detector.py +0 -0
  114. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/memory/__init__.py +0 -0
  115. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/memory/capture.py +0 -0
  116. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/memory/digest_schema.py +0 -0
  117. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/memory/finalize.py +0 -0
  118. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/memory/recall.py +0 -0
  119. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/minimality_eval.py +0 -0
  120. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/minimality_report.py +0 -0
  121. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/parallelism_observability.py +0 -0
  122. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/ralph_state.py +0 -0
  123. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/repo_insight.py +0 -0
  124. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/research_eval.py +0 -0
  125. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/research_eval_compare.py +0 -0
  126. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/scope_classifier.py +0 -0
  127. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skill_ir.py +0 -0
  128. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
  129. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  130. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  131. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
  132. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  133. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  134. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  135. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
  136. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/runner.py +0 -0
  137. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/__init__.py +0 -0
  138. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/bundle.py +0 -0
  139. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/dispatcher.py +0 -0
  140. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/eval_schema.py +0 -0
  141. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/gates.py +0 -0
  142. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/judge.py +0 -0
  143. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/repeated.py +0 -0
  144. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/report.py +0 -0
  145. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/runner.py +0 -0
  146. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/trajectory/seeding.py +0 -0
  147. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
  148. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/.gitignore +0 -0
  149. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/actor.md +0 -0
  150. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
  151. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  152. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/monitor.md +0 -0
  153. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
  154. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
  155. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
  156. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
  157. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  158. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
  159. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/agents/evaluator.toml +0 -0
  160. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
  161. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/agents/predictor.toml +0 -0
  162. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
  163. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/config.toml +0 -0
  164. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
  165. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  166. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
  167. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  168. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-review/adversarial-reference.md +0 -0
  169. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +0 -0
  170. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/README.md +0 -0
  171. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  172. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  173. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  174. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  175. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  176. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  177. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  178. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-statusline.py +0 -0
  179. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  180. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
  181. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
  182. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  183. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  184. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/scrub-internal-ids.py +0 -0
  185. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
  186. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/classify_scope.py +0 -0
  187. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  188. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  189. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/scrub_internal_ids.py +0 -0
  190. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  191. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/scripts/wayfind_runner.py +0 -0
  192. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  193. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  194. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  195. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  196. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  197. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
  198. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
  199. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  200. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  201. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  202. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  203. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
  204. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  205. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  206. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/README.md +0 -0
  207. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-architecture/SKILL.md +0 -0
  208. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  209. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  210. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
  211. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  212. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  213. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  214. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  215. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  216. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  217. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
  218. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  219. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-review/adversarial-reference.md +0 -0
  220. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
  221. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  222. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  223. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  224. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
  225. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  226. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  227. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
  228. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  229. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
  230. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  231. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  232. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  233. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
  234. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-understand/SKILL.md +0 -0
  235. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-wayfind/SKILL.md +0 -0
  236. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/skills/map-wayfind/wayfind-reference.md +0 -0
  237. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
  238. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
  239. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
  240. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
  241. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  242. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
  243. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  244. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  245. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
  246. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
  247. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  248. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
  249. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/agents/evaluator.toml.jinja +0 -0
  250. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
  251. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/agents/predictor.toml.jinja +0 -0
  252. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
  253. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  254. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  255. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  256. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
  257. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  258. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-review/adversarial-reference.md.jinja +0 -0
  259. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +0 -0
  260. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
  261. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  262. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  263. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  264. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  265. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  266. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  267. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  268. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-statusline.py.jinja +0 -0
  269. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  270. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
  271. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
  272. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  273. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  274. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/scrub-internal-ids.py.jinja +0 -0
  275. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
  276. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/classify_scope.py.jinja +0 -0
  277. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  278. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  279. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/scrub_internal_ids.py.jinja +0 -0
  280. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  281. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/scripts/wayfind_runner.py.jinja +0 -0
  282. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  283. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  284. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  285. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  286. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  287. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
  288. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  289. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  290. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  291. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  292. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  293. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
  294. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  295. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  296. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  297. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-architecture/SKILL.md.jinja +0 -0
  298. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  299. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  300. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
  301. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  302. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  303. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  304. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  305. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  306. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  307. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
  308. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  309. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-review/adversarial-reference.md.jinja +0 -0
  310. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
  311. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  312. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  313. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  314. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
  315. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  316. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  317. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
  318. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  319. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
  320. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  321. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  322. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  323. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
  324. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +0 -0
  325. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-wayfind/SKILL.md.jinja +0 -0
  326. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/skills/map-wayfind/wayfind-reference.md.jinja +0 -0
  327. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  328. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/token_budget.py +0 -0
  329. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/tool_output_offload.py +0 -0
  330. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/tools/__init__.py +0 -0
  331. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  332. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/verification_recorder.py +0 -0
  333. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/workflow_finalizer.py +0 -0
  334. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/workflow_logger.py +0 -0
  335. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/src/mapify_cli/workflow_state.py +0 -0
  336. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/__init__.py +0 -0
  337. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/_fake_task_tool.py +0 -0
  338. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/conftest.py +0 -0
  339. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
  340. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/fixtures/codex/config.toml +0 -0
  341. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/fixtures/wave_blueprints.py +0 -0
  342. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  343. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/hooks/test_end_of_turn.py +0 -0
  344. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
  345. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/hooks/test_scrub_internal_ids_hook.py +0 -0
  346. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/__init__.py +0 -0
  347. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/blueprint.json +0 -0
  348. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/code_review.md +0 -0
  349. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/plan_handoff.json +0 -0
  350. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/spec.md +0 -0
  351. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
  352. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  353. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/task_plan.md +0 -0
  354. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/fixtures/verification_summary.md +0 -0
  355. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
  356. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
  357. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/README.md +0 -0
  358. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  359. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  360. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  361. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  362. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  363. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  364. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  365. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  366. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  367. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  368. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  369. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  370. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  371. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  372. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  373. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  374. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  375. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  376. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  377. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  378. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  379. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  380. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  381. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  382. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  383. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  384. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  385. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  386. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  387. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  388. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  389. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  390. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  391. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  392. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  393. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  394. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  395. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/hidden/test_kvparse_full.py +0 -0
  396. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/manifest.json +0 -0
  397. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/.map/main/blueprint.json +0 -0
  398. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/.map/main/task_plan_main.md +0 -0
  399. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/src/__init__.py +0 -0
  400. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/src/kvparse.py +0 -0
  401. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/tests/test_kvparse_basic.py +0 -0
  402. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  403. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  404. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  405. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  406. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  407. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  408. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  409. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  410. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  411. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  412. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  413. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  414. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  415. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  416. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  417. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  418. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  419. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  420. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  421. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  422. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  423. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  424. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  425. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  426. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  427. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  428. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  429. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  430. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  431. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  432. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  433. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  434. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  435. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  436. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  437. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_agent_cli_correctness.py +0 -0
  438. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_agent_dispatch_audit.py +0 -0
  439. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_agent_memory.py +0 -0
  440. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_boundary_quality_report.py +0 -0
  441. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_bump_version.py +0 -0
  442. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_classify_scope_script.py +0 -0
  443. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_code_map.py +0 -0
  444. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_compaction_offload_integration.py +0 -0
  445. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_concurrent_dispatch_harness.py +0 -0
  446. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_context_usefulness.py +0 -0
  447. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_cross_ai_config.py +0 -0
  448. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_decomposition.py +0 -0
  449. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_dependency_graph.py +0 -0
  450. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_diagnostics.py +0 -0
  451. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_digest_schema.py +0 -0
  452. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_domain_skill.py +0 -0
  453. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_file_copier.py +0 -0
  454. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_governance_attack_fixtures.py +0 -0
  455. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_governance_report.py +0 -0
  456. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_grace_eval_schema.py +0 -0
  457. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_grace_eval_sweep.py +0 -0
  458. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_hook_patterns.py +0 -0
  459. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_init_import_graph.py +0 -0
  460. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_install_manifest.py +0 -0
  461. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_intent_detector.py +0 -0
  462. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  463. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_jinja2_dep.py +0 -0
  464. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_locking.py +0 -0
  465. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_managed_file_copier.py +0 -0
  466. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_map_orchestrator.py +0 -0
  467. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_map_token_meter.py +0 -0
  468. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_map_utils_sanitize.py +0 -0
  469. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_mapify_cli.py +0 -0
  470. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_memory_capture.py +0 -0
  471. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_memory_finalize.py +0 -0
  472. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_memory_integration.py +0 -0
  473. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_memory_recall.py +0 -0
  474. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_memory_review_fixes.py +0 -0
  475. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_minimality_eval.py +0 -0
  476. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_minimality_report.py +0 -0
  477. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_parallelism_observability.py +0 -0
  478. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_post_compact_context.py +0 -0
  479. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_preset_commands.py +0 -0
  480. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_project_config.py +0 -0
  481. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_prompt_layering.py +0 -0
  482. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_prompt_profile_commands.py +0 -0
  483. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_pyyaml_dep.py +0 -0
  484. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_ralph_hooks.py +0 -0
  485. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_ralph_state.py +0 -0
  486. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_repo_insight.py +0 -0
  487. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_research_eval.py +0 -0
  488. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_research_eval_compare.py +0 -0
  489. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_review_verdict_ledger.py +0 -0
  490. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_schemas.py +0 -0
  491. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_scope_classifier.py +0 -0
  492. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_scrub_internal_ids.py +0 -0
  493. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skill_ir.py +0 -0
  494. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_aggregator.py +0 -0
  495. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_apply.py +0 -0
  496. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_cli_optimize.py +0 -0
  497. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
  498. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  499. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_fixtures.py +0 -0
  500. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_optimizer.py +0 -0
  501. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  502. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_proposer.py +0 -0
  503. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_runner.py +0 -0
  504. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_schema.py +0 -0
  505. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_bundle.py +0 -0
  506. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_cli.py +0 -0
  507. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_gates.py +0 -0
  508. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_judge.py +0 -0
  509. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_repeated.py +0 -0
  510. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_report.py +0 -0
  511. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_runner.py +0 -0
  512. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_trajectory_schema.py +0 -0
  513. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_skills_eval_viewer.py +0 -0
  514. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_slice5b_leak_guards.py +0 -0
  515. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_sofa_client.py +0 -0
  516. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_sofa_search.py +0 -0
  517. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_statusline.py +0 -0
  518. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_template_render.py +0 -0
  519. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_token_budget.py +0 -0
  520. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_tool_output_offload.py +0 -0
  521. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_validate_dependencies.py +0 -0
  522. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_verification_recorder.py +0 -0
  523. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_wave_eval_harness.py +0 -0
  524. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_wave_fixtures.py +0 -0
  525. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_wave_parallel_harness.py +0 -0
  526. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_wayfind_runner.py +0 -0
  527. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_workflow_context_injector.py +0 -0
  528. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_workflow_finalizer.py +0 -0
  529. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_workflow_logger.py +0 -0
  530. {mapify_cli-3.25.0 → mapify_cli-3.26.0}/tests/test_workflow_state.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: mapify-cli
3
- Version: 3.25.0
3
+ Version: 3.26.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
@@ -125,6 +125,7 @@ That's the whole golden path.
125
125
  - **Already scoped?** Go straight to `/map-efficient`.
126
126
  - **Tiny edit?** `/map-plan` off-ramps you to a direct edit or `/map-fast` instead of forcing full planning.
127
127
  - **Too foggy to plan?** `/map-wayfind` resolves open design decisions one at a time on a durable map, then hands settled decisions to `/map-plan`.
128
+ - **Want one entry point?** `/map-auto` routes and drives the chain autonomously; hard-stops only on `dangerous_action`/`safety_guardrail` holds.
128
129
 
129
130
  > Codex CLI users invoke the same skills with `$`: `$map-plan`, `$map-efficient`, `$map-check`. See the [Usage Guide](docs/USAGE.md#codex-cli-provider).
130
131
 
@@ -155,6 +156,7 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
155
156
 
156
157
  | Command | Use For |
157
158
  |---------|---------|
159
+ | `/map-auto` | Single-entry autonomous autopilot: routes a task through existing MAP workflows and drives the chain to a committed branch |
158
160
  | `/map-plan` | **Start here** for non-trivial work; clarify behavior and decompose tasks |
159
161
  | `/map-wayfind` | Too foggy to plan? Resolve design decisions on a durable map *before* `/map-plan` |
160
162
  | `/map-efficient` | **Implement** an approved plan or already-scoped task |
@@ -80,6 +80,7 @@ That's the whole golden path.
80
80
  - **Already scoped?** Go straight to `/map-efficient`.
81
81
  - **Tiny edit?** `/map-plan` off-ramps you to a direct edit or `/map-fast` instead of forcing full planning.
82
82
  - **Too foggy to plan?** `/map-wayfind` resolves open design decisions one at a time on a durable map, then hands settled decisions to `/map-plan`.
83
+ - **Want one entry point?** `/map-auto` routes and drives the chain autonomously; hard-stops only on `dangerous_action`/`safety_guardrail` holds.
83
84
 
84
85
  > Codex CLI users invoke the same skills with `$`: `$map-plan`, `$map-efficient`, `$map-check`. See the [Usage Guide](docs/USAGE.md#codex-cli-provider).
85
86
 
@@ -110,6 +111,7 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
110
111
 
111
112
  | Command | Use For |
112
113
  |---------|---------|
114
+ | `/map-auto` | Single-entry autonomous autopilot: routes a task through existing MAP workflows and drives the chain to a committed branch |
113
115
  | `/map-plan` | **Start here** for non-trivial work; clarify behavior and decompose tasks |
114
116
  | `/map-wayfind` | Too foggy to plan? Resolve design decisions on a durable map *before* `/map-plan` |
115
117
  | `/map-efficient` | **Implement** an approved plan or already-scoped task |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.25.0"
3
+ version = "3.26.0"
4
4
  description = "MAP Framework installer - Modular Agentic Planner for Claude Code"
5
5
  authors = [{ name = "MAP Framework Contributors" }]
6
6
  readme = "README.md"
@@ -23,7 +23,7 @@ Or install globally:
23
23
  mapify check
24
24
  """
25
25
 
26
- __version__ = "3.25.0"
26
+ __version__ = "3.26.0"
27
27
 
28
28
  import json
29
29
  import os
@@ -808,6 +808,7 @@ ARTIFACT_MANIFEST_SCHEMA = {
808
808
  "workflow_fit": ARTIFACT_STAGE_SCHEMA,
809
809
  "spec": ARTIFACT_STAGE_SCHEMA,
810
810
  "plan": ARTIFACT_STAGE_SCHEMA,
811
+ "auto_route": ARTIFACT_STAGE_SCHEMA,
811
812
  "test_contract": ARTIFACT_STAGE_SCHEMA,
812
813
  "repro_probe": ARTIFACT_STAGE_SCHEMA,
813
814
  "implementation": ARTIFACT_STAGE_SCHEMA,
@@ -829,6 +830,8 @@ ARTIFACT_MANIFEST_SCHEMA = {
829
830
  "worktree": ARTIFACT_STAGE_SCHEMA,
830
831
  "context_usefulness": ARTIFACT_STAGE_SCHEMA,
831
832
  "wayfind_handoff": ARTIFACT_STAGE_SCHEMA,
833
+ "review_verdict_ledger": ARTIFACT_STAGE_SCHEMA,
834
+ "prd_review": ARTIFACT_STAGE_SCHEMA,
832
835
  },
833
836
  "required": [
834
837
  "workflow_fit",
@@ -1521,7 +1524,15 @@ REVIEW_BUNDLE_SCHEMA = {
1521
1524
  },
1522
1525
  "status": {
1523
1526
  "type": "string",
1524
- "enum": ["covered", "missing_evidence"],
1527
+ # planned_only: the owner subtask's validation_criteria
1528
+ # names the requirement but nothing downstream verified
1529
+ # it — a review gap, distinct from a requirement no
1530
+ # artifact ever mentions (missing_evidence).
1531
+ "enum": [
1532
+ "covered",
1533
+ "planned_only",
1534
+ "missing_evidence",
1535
+ ],
1525
1536
  },
1526
1537
  },
1527
1538
  "required": [
@@ -1539,7 +1550,11 @@ REVIEW_BUNDLE_SCHEMA = {
1539
1550
  "properties": {
1540
1551
  "total": {"type": "integer", "minimum": 0},
1541
1552
  "covered": {"type": "integer", "minimum": 0},
1553
+ # `missing` stays the total un-covered count for backward
1554
+ # compatibility; `planned_only` breaks out the review-gap
1555
+ # subset so the two failure modes are separable.
1542
1556
  "missing": {"type": "integer", "minimum": 0},
1557
+ "planned_only": {"type": "integer", "minimum": 0},
1543
1558
  },
1544
1559
  "required": ["total", "covered", "missing"],
1545
1560
  "additionalProperties": False,
@@ -2055,3 +2070,171 @@ REVIEW_VERDICT_LEDGER_SCHEMA: dict[str, Any] = {
2055
2070
  ],
2056
2071
  "additionalProperties": True,
2057
2072
  }
2073
+
2074
+ PRD_REVIEW_SCHEMA: dict[str, Any] = {
2075
+ "$id": "prd-review.json",
2076
+ "type": "object",
2077
+ "description": "PRD/requirements-quality review artifact written by write_prd_review.",
2078
+ "properties": {
2079
+ "schema_version": {"type": "string"},
2080
+ "branch": {"type": "string"},
2081
+ "generated_at": {"type": "string", "description": "ISO-8601 UTC timestamp"},
2082
+ "prd_source": {"type": "string", "description": "Path or label of the reviewed PRD"},
2083
+ "verdict": {
2084
+ "type": "string",
2085
+ "enum": [
2086
+ "ready_for_plan",
2087
+ "needs_prd_revision",
2088
+ "needs_user_decision",
2089
+ "route_to_wayfind",
2090
+ ],
2091
+ },
2092
+ "findings": {
2093
+ "type": "array",
2094
+ "items": {
2095
+ "type": "object",
2096
+ "properties": {
2097
+ "dimension": {"type": "string"},
2098
+ "severity": {
2099
+ "type": "string",
2100
+ "enum": ["critical", "major", "minor", "info"],
2101
+ },
2102
+ "description": {"type": "string"},
2103
+ "suggested_revision": {"type": "string"},
2104
+ },
2105
+ "required": ["dimension", "severity", "description"],
2106
+ "additionalProperties": False,
2107
+ },
2108
+ },
2109
+ "blocking_questions": {
2110
+ "type": "array",
2111
+ "items": {
2112
+ "type": "object",
2113
+ "properties": {
2114
+ "question": {"type": "string"},
2115
+ "category": {"type": "string"},
2116
+ },
2117
+ "required": ["question", "category"],
2118
+ "additionalProperties": False,
2119
+ },
2120
+ },
2121
+ "suggested_revisions": {
2122
+ "type": "array",
2123
+ "items": {"type": "string"},
2124
+ },
2125
+ "route_recommendation": {"type": "string"},
2126
+ "summary": {"type": "string"},
2127
+ },
2128
+ "required": [
2129
+ "schema_version",
2130
+ "branch",
2131
+ "generated_at",
2132
+ "verdict",
2133
+ "findings",
2134
+ "blocking_questions",
2135
+ "suggested_revisions",
2136
+ "summary",
2137
+ ],
2138
+ "additionalProperties": True,
2139
+ }
2140
+
2141
+ AUTO_ROUTE_SCHEMA: dict[str, Any] = {
2142
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2143
+ "$id": "https://mapframework.dev/schemas/auto-route.json",
2144
+ "title": "MAP Auto Route Decision",
2145
+ "description": (
2146
+ "Autonomous routing decision and phase ledger stored in "
2147
+ ".map/<branch>/auto-route.json (/map-auto)."
2148
+ ),
2149
+ "type": "object",
2150
+ "properties": {
2151
+ "schema_version": {"type": "string"},
2152
+ "task_summary": {"type": "string"},
2153
+ "selected_route": {
2154
+ "type": "string",
2155
+ "enum": [
2156
+ "map-resume",
2157
+ "map-check",
2158
+ "map-fast",
2159
+ "map-plan",
2160
+ "map-efficient",
2161
+ ],
2162
+ },
2163
+ "evidence": {
2164
+ "type": "array",
2165
+ "description": "Structured signals that justified the selected_route.",
2166
+ "items": {
2167
+ "type": "object",
2168
+ "properties": {
2169
+ "signal": {"type": "string"},
2170
+ "value": {"type": "string"},
2171
+ "source": {"type": "string"},
2172
+ },
2173
+ "required": ["signal", "value", "source"],
2174
+ "additionalProperties": False,
2175
+ },
2176
+ },
2177
+ "blocked_by": {
2178
+ "type": "array",
2179
+ "description": "Pending hard-stop hold ids blocking the chain, if any.",
2180
+ "items": {"type": "string"},
2181
+ },
2182
+ "next_command": {"type": "string"},
2183
+ "executed": {"type": "boolean"},
2184
+ "chain_status": {
2185
+ "type": "string",
2186
+ "enum": [
2187
+ "recommended_only",
2188
+ "blocked",
2189
+ "in_progress",
2190
+ "completed",
2191
+ "aborted",
2192
+ ],
2193
+ },
2194
+ "phases": {
2195
+ "type": "array",
2196
+ "description": "Phase ledger; appended only by record_auto_phase.",
2197
+ "items": {
2198
+ "type": "object",
2199
+ "properties": {
2200
+ "phase": {"type": "string"},
2201
+ "status": {"type": "string"},
2202
+ "attempt": {"type": "integer", "minimum": 1},
2203
+ "evidence_refs": {
2204
+ "type": "array",
2205
+ "items": {"type": "string"},
2206
+ },
2207
+ "reason": {"type": "string"},
2208
+ "recorded_at": {"type": "string", "format": "date-time"},
2209
+ },
2210
+ "required": [
2211
+ "phase",
2212
+ "status",
2213
+ "attempt",
2214
+ "evidence_refs",
2215
+ "reason",
2216
+ "recorded_at",
2217
+ ],
2218
+ "additionalProperties": False,
2219
+ },
2220
+ },
2221
+ "route_history": {
2222
+ "type": "array",
2223
+ "description": "Prior selected_route values preserved across re-routes.",
2224
+ "items": {"type": "string"},
2225
+ },
2226
+ },
2227
+ "required": [
2228
+ "schema_version",
2229
+ "task_summary",
2230
+ "selected_route",
2231
+ "evidence",
2232
+ "blocked_by",
2233
+ "next_command",
2234
+ "executed",
2235
+ "chain_status",
2236
+ "phases",
2237
+ "route_history",
2238
+ ],
2239
+ "additionalProperties": True,
2240
+ }
@@ -70,6 +70,13 @@ When you pipe through `head/tail/less/more`, the source command keeps running bu
70
70
 
71
71
  **Exception:** Filtering pipes are OK (grep, awk, sed) because they process all input.
72
72
 
73
+ ### Never pipe a captured variable through `echo`
74
+
75
+ zsh's builtin `echo` interprets backslash escapes, so piping `echo "$JSON"` into `jq`
76
+ turns the `\n` inside JSON string values into raw control bytes and jq aborts — inside
77
+ `$(...)` the failure is swallowed and the variable lands empty. Use
78
+ `printf '%s' "$VAR" | jq` (or `printf '%s\n'` when a `while read` loop consumes it).
79
+
73
80
  **Full guidelines:** `.claude/references/bash-guidelines.md`
74
81
 
75
82
  ## Progressive disclosure pointers
@@ -5,8 +5,21 @@ description: Adversarial verifier with Root Cause Analysis (Ralph Loop)
5
5
  # gate before merge — false negatives here ship bugs to production.
6
6
  model: opus
7
7
  effort: high
8
- version: 1.1.0
9
- last_updated: 2026-04-28
8
+ # 2026-08-14 (#424): a final-verifier run edited generated trees and committed
9
+ # them mid-audit, despite the prompt contract being APPROVED/REJECTED-only.
10
+ # Nested Agent is denied at the harness level. Edit/Write are NOT denied here:
11
+ # this agent's own contract requires an in-place append to
12
+ # .map/<branch>/progress_<branch>.md and a `[ ]` -> `[x]` update in the
13
+ # task-plan Acceptance Criteria table — forcing those through whole-file Write
14
+ # would drop surrounding content. The boundary is enforced by scope instead:
15
+ # the safety-guardrails PreToolUse hook keys on agent_type and confines every
16
+ # verifier Edit/Write/MultiEdit to `.map/` (normalized, so `.map/../src` cannot
17
+ # escape) while blocking all git-mutating Bash. Runner-owned state inside
18
+ # `.map/` stays protected for everyone by the workflow-gate tamper detector.
19
+ disallowedTools:
20
+ - Agent
21
+ version: 1.2.0
22
+ last_updated: 2026-08-14
10
23
  ---
11
24
 
12
25
  # IDENTITY
@@ -55,6 +55,21 @@ EDITING_PHASES = {"ACTOR", "APPLY", "TEST_WRITER"}
55
55
  DOCS_ONLY_EXTENSIONS = {".md", ".mdx", ".rst", ".txt", ".adoc"}
56
56
  DOCS_ONLY_PATH_PREFIXES = ("docs/", "doc/", "documentation/", "CHANGELOG", "RELEASING", "README")
57
57
 
58
+ # State-tamper detector (D3): runner-owned MAP state basenames that are
59
+ # never hand-editable directly, even though the blanket `.map/` exemption
60
+ # below (is_exempt_path) would otherwise allow them. Planning artifacts
61
+ # (spec_*, task_plan_*, blueprint.json, research/, code-review-*,
62
+ # compacted/, approval_hold_*.md) are NOT in this set and stay exempt as
63
+ # today — only the runner's own durable state is protected.
64
+ STATE_TAMPER_PROTECTED_BASENAMES = frozenset(
65
+ {
66
+ "step_state.json",
67
+ "approval_holds.json",
68
+ "auto-route.json",
69
+ "artifact_manifest.json",
70
+ }
71
+ )
72
+
58
73
  # TERMINAL_PHASES contains phases where the workflow is considered closed.
59
74
  # Edits during COMPLETE are intentionally permissive because:
60
75
  # 1. Post-workflow polish (doc tweaks, follow-up review fixes) must not be gated —
@@ -204,6 +219,44 @@ def is_exempt_path(file_path: str) -> bool:
204
219
  )
205
220
 
206
221
 
222
+ def is_state_tamper_path(file_path: str) -> bool:
223
+ """Return True if *file_path* is runner-owned MAP state protected from
224
+ direct hand-editing (the state-tamper detector, D3).
225
+
226
+ Mirrors is_exempt_path's PROJECT_DIR-relative resolution. Protected
227
+ under `.map/`:
228
+ - any path whose second segment is "scripts" (``.map/scripts/**`` —
229
+ the runner and its helper modules), or
230
+ - a basename in STATE_TAMPER_PROTECTED_BASENAMES anywhere under
231
+ `.map/` (branch-scoped durable state: `.map/<branch>/step_state.json`,
232
+ `approval_holds.json`, `auto-route.json`, `artifact_manifest.json`).
233
+
234
+ Everything else under `.map/` (spec_*, task_plan_*, blueprint.json,
235
+ research/, code-review-*, compacted/, approval_hold_*.md) is left
236
+ alone by this predicate — it stays exempt via is_exempt_path.
237
+ """
238
+ if not isinstance(file_path, str) or not file_path.strip():
239
+ return False
240
+
241
+ candidate = Path(file_path)
242
+ resolved = (
243
+ candidate.resolve(strict=False)
244
+ if candidate.is_absolute()
245
+ else (PROJECT_DIR / candidate).resolve(strict=False)
246
+ )
247
+ try:
248
+ rel = resolved.relative_to(PROJECT_DIR)
249
+ except ValueError:
250
+ return False
251
+
252
+ parts = rel.parts
253
+ if not parts or parts[0] != ".map":
254
+ return False
255
+ if len(parts) >= 2 and parts[1] == "scripts":
256
+ return True
257
+ return rel.name in STATE_TAMPER_PROTECTED_BASENAMES
258
+
259
+
207
260
  def sanitize_branch_name(branch: str) -> str:
208
261
  """Sanitize branch name for filesystem paths."""
209
262
  sanitized = branch.replace("/", "-")
@@ -248,6 +301,27 @@ def _current_phase_is_research(branch: str) -> bool:
248
301
  return isinstance(phase, str) and phase.upper() == "RESEARCH"
249
302
 
250
303
 
304
+ def _is_workflow_active(branch: str) -> bool:
305
+ """Return True iff a MAP workflow is active on *branch*.
306
+
307
+ Active means `.map/<branch>/step_state.json` exists and its
308
+ `workflow_status` is not `WORKFLOW_COMPLETE`. Scopes the state-tamper
309
+ detector (D3): outside an active workflow — no step_state.json yet, a
310
+ corrupt/unreadable one, or a finished workflow — the detector no-ops
311
+ and today's exempt-path behavior applies unchanged.
312
+ """
313
+ step_file = PROJECT_DIR / ".map" / branch / "step_state.json"
314
+ if not step_file.exists():
315
+ return False
316
+ try:
317
+ with open(step_file, "r", encoding="utf-8") as f:
318
+ state = json.load(f)
319
+ except (json.JSONDecodeError, OSError):
320
+ return False
321
+ status = str(state.get("workflow_status", "")).strip().upper()
322
+ return status != "WORKFLOW_COMPLETE"
323
+
324
+
251
325
  def _load_blueprint_subtasks(branch: str) -> list | None:
252
326
  """Read blueprint.json subtasks for *branch* (stdlib-only, fail-soft).
253
327
 
@@ -510,6 +584,57 @@ def check_constraints(branch: str, target_paths: list[str]) -> str | None:
510
584
  return None
511
585
 
512
586
 
587
+ def _create_safety_guardrail_hold(branch: str, rel_path: str) -> None:
588
+ """Best-effort creation of a `safety_guardrail` approval hold recording
589
+ a denied direct edit of runner-owned MAP state.
590
+
591
+ INV-4: the caller wraps this call in its own try/except — hold creation
592
+ is best-effort and must NEVER convert a tamper deny into an allow. Any
593
+ failure here (missing runner script, non-zero exit, a raised exception)
594
+ is swallowed by the caller; deny() still fires and the outer fail-open
595
+ handler is never reached from this path. Idempotency comes from the
596
+ stable request_summary (naming rel_path) plus create_approval_hold's
597
+ own dedup-by-(kind, request_summary, pending).
598
+ """
599
+ import subprocess
600
+
601
+ runner = PROJECT_DIR / ".map" / "scripts" / "map_step_runner.py"
602
+ reason = (
603
+ "Runner-owned MAP state must be mutated only through "
604
+ "map_step_runner.py subcommands; a direct Edit/Write bypasses "
605
+ "its validation and audit trail."
606
+ )
607
+ safe_continuation = (
608
+ "Revert the direct edit. Use the appropriate "
609
+ "`python3 .map/scripts/map_step_runner.py` subcommand instead "
610
+ "(e.g. record_step, create_approval_hold, decide_approval_hold)."
611
+ )
612
+ subprocess.run(
613
+ [
614
+ sys.executable,
615
+ str(runner),
616
+ "create_approval_hold",
617
+ "--kind",
618
+ "safety_guardrail",
619
+ "--reason",
620
+ reason,
621
+ "--request-summary",
622
+ f"Direct edit of runner-owned MAP state: {rel_path}",
623
+ "--source",
624
+ "workflow-gate",
625
+ "--safe-continuation",
626
+ safe_continuation,
627
+ "--branch",
628
+ branch,
629
+ ],
630
+ capture_output=True,
631
+ text=True,
632
+ cwd=PROJECT_DIR,
633
+ timeout=5,
634
+ check=False,
635
+ )
636
+
637
+
513
638
  def deny(reason: str) -> None:
514
639
  """Print deny response and exit."""
515
640
  print(
@@ -541,13 +666,44 @@ def main() -> None:
541
666
  if tool_name not in EDITING_TOOLS:
542
667
  allow()
543
668
 
544
- # Exempt paths (.map/, ~/.claude/memory/) → always allow
545
669
  target_paths = extract_target_file_paths(tool_call)
670
+ branch = get_branch_name()
671
+
672
+ # State-tamper detector (D3): runner-owned MAP state
673
+ # (step_state.json, approval_holds.json, auto-route.json,
674
+ # artifact_manifest.json, and anything under .map/scripts/) is
675
+ # never hand-editable while a MAP workflow is active on this
676
+ # branch — even though the blanket `.map/` exemption below would
677
+ # otherwise allow it. Evaluated BEFORE is_exempt_path
678
+ # (blocklist-before-allowlist, per the learned security-pattern)
679
+ # so the exemption cannot mask tampering. A mixed batch (one
680
+ # protected path alongside ordinary ones) denies as a whole — fail
681
+ # closed on any protected target.
682
+ tamper_paths = [p for p in target_paths if is_state_tamper_path(p)]
683
+ if tamper_paths and _is_workflow_active(branch):
684
+ attempted = tamper_paths[0]
685
+ try:
686
+ attempted = _to_repo_relative(tamper_paths[0]) or tamper_paths[0]
687
+ _create_safety_guardrail_hold(branch, attempted)
688
+ except Exception: # noqa: BLE001, S110 -- INV-4: producer/display-path failure must still reach deny(), never escape to the fail-open outer handler
689
+ pass
690
+ deny(
691
+ "Workflow gate: runner-owned MAP state is not "
692
+ f"hand-editable ('{attempted}').\n"
693
+ "This path is written exclusively by "
694
+ ".map/scripts/map_step_runner.py — use its CLI "
695
+ "subcommands (create_approval_hold, record_step, "
696
+ "decide_approval_hold, etc.) instead of editing it "
697
+ "directly.\n"
698
+ "A pending safety_guardrail approval hold has been "
699
+ "recorded for this attempt (best-effort; see "
700
+ f".map/{branch}/approval_holds.json)."
701
+ )
702
+
703
+ # Exempt paths (.map/, ~/.claude/memory/) → always allow
546
704
  if target_paths and all(is_exempt_path(p) for p in target_paths):
547
705
  allow()
548
706
 
549
- branch = get_branch_name()
550
-
551
707
  # Phase check (step_state.json)
552
708
  allowed, error = is_editing_phase(branch)
553
709
  if not allowed:
@@ -77,6 +77,16 @@ Empty `$TASK_ARGS` is a stop condition only when all of these are true:
77
77
 
78
78
  Otherwise proceed to resume detection.
79
79
 
80
+ ## Approval-hold preflight (MANDATORY — run BEFORE Step 0)
81
+
82
+ Resolve pending approval holds before `resume_from_plan` initializes any execution state — full recipe in [efficient-reference.md](efficient-reference.md#approval-hold-preflight).
83
+
84
+ ```bash
85
+ python3 .map/scripts/map_step_runner.py list_approval_holds --state pending
86
+ ```
87
+
88
+ A pending `plan_approval` requires an explicit operator approve/deny, recorded via `decide_approval_hold <hold-id> <approved|denied> --note "<operator note>"`: approved continues into Step 0, denied STOPS here — revise the plan and re-run `$map-plan` (no staleness re-check); an autonomous chain never reaches this ask because its pre-phase `auto_decide_holds` poll approves `plan_approval` first. A pending `dangerous_action`/`safety_guardrail` hold refuses to proceed instead — surface the hold's `reason` and stop.
89
+
80
90
  ## Step 0: Resume Existing State Or Plan
81
91
 
82
92
  Run this before validating `$TASK_ARGS`.
@@ -90,7 +100,7 @@ if [ -f "$STATE_FILE" ]; then
90
100
  echo "Existing step_state.json found; continuing with get_next_step."
91
101
  elif [ -f "$PLAN_FILE" ]; then
92
102
  RESUME_RESULT=$(python3 .map/scripts/map_orchestrator.py resume_from_plan)
93
- RESUME_STATUS=$(echo "$RESUME_RESULT" | jq -r '.status')
103
+ RESUME_STATUS=$(printf '%s' "$RESUME_RESULT" | jq -r '.status')
94
104
  if [ "$RESUME_STATUS" != "success" ]; then
95
105
  echo "resume_from_plan failed: $RESUME_RESULT" >&2
96
106
  exit 1
@@ -110,9 +120,9 @@ fi
110
120
 
111
121
  ```bash
112
122
  NEXT_STEP=$(python3 .map/scripts/map_orchestrator.py get_next_step)
113
- STEP_ID=$(echo "$NEXT_STEP" | jq -r '.step_id')
114
- PHASE=$(echo "$NEXT_STEP" | jq -r '.phase')
115
- IS_COMPLETE=$(echo "$NEXT_STEP" | jq -r '.is_complete')
123
+ STEP_ID=$(printf '%s' "$NEXT_STEP" | jq -r '.step_id')
124
+ PHASE=$(printf '%s' "$NEXT_STEP" | jq -r '.phase')
125
+ IS_COMPLETE=$(printf '%s' "$NEXT_STEP" | jq -r '.is_complete')
116
126
  echo "$NEXT_STEP"
117
127
  ```
118
128
 
@@ -3,6 +3,45 @@
3
3
  This file holds lower-frequency details for the Codex `$map-efficient` skill.
4
4
  Load only the section needed by the active phase.
5
5
 
6
+ ## Approval-Hold Preflight
7
+
8
+ Resolve any pending approval hold BEFORE Step 0's `resume_from_plan`
9
+ bootstraps execution state — a hold left pending means execution has not
10
+ been explicitly authorized, and a denied plan must stop before any
11
+ `step_state.json` exists.
12
+
13
+ ```bash
14
+ python3 .map/scripts/map_step_runner.py list_approval_holds --state pending
15
+ ```
16
+
17
+ Each pending hold's `kind` decides the branch:
18
+
19
+ - **`plan_approval`** — the operator must explicitly approve or deny before
20
+ execution starts:
21
+ ```bash
22
+ python3 .map/scripts/map_step_runner.py decide_approval_hold \
23
+ <hold-id> approved --note "approved by operator; proceeding with plan"
24
+ # or:
25
+ python3 .map/scripts/map_step_runner.py decide_approval_hold \
26
+ <hold-id> denied --note "<why the plan was denied>"
27
+ ```
28
+ - **Approved** — continue into the pre-flight test baseline below.
29
+ - **Denied** — STOP. Tell the operator to revise the plan and re-run
30
+ `$map-plan`; there is no staleness re-check against the denied blueprint
31
+ — the operator who denied it is the same operator re-running
32
+ `$map-efficient`.
33
+ - **`dangerous_action` / `safety_guardrail`** (hard stops) — never decide
34
+ these from inside the preflight. Refuse to proceed: surface the hold's
35
+ `reason` and `request_summary`, and stop. The operator resolves the
36
+ underlying issue out of band and decides the hold via `decide_approval_hold`
37
+ before retrying.
38
+
39
+ An autonomous chain never reaches the interactive ask above: its pre-phase
40
+ `auto_decide_holds` poll auto-approves `plan_approval` before `$map-efficient`
41
+ starts, so the preflight here finds nothing pending. If the operator
42
+ already decided the hold manually (CLI) before starting `$map-efficient`, the
43
+ preflight likewise finds nothing pending and proceeds without asking.
44
+
6
45
  ## Pre-Monitor Gates
7
46
 
8
47
  Before Monitor, verify that Actor output and repository state agree.
@@ -47,7 +86,7 @@ python3 .map/scripts/map_step_runner.py validate_flaky_test_triage
47
86
  # Preferred close — the verdict path. Monitor emits valid:false plus
48
87
  # disposition {kind: deferred_nondeterministic, check_id: ...}; close 2.4 with
49
88
  # the same disposition piped through (see "Verdict-path route" below).
50
- echo "$MONITOR_JSON" | python3 .map/scripts/map_orchestrator.py \
89
+ printf '%s' "$MONITOR_JSON" | python3 .map/scripts/map_orchestrator.py \
51
90
  validate_step 2.4 --disposition deferred_nondeterministic \
52
91
  --check-id "pytest::test_name" --monitor-envelope -
53
92
  ```
@@ -699,9 +699,13 @@ Record artifacts in the manifest:
699
699
  ```
700
700
  shell_command:
701
701
  cmd: |
702
- python3 .map/scripts/map_step_runner.py record_plan_artifacts
702
+ PLAN_ARTIFACTS_RESULT=$(python3 .map/scripts/map_step_runner.py record_plan_artifacts)
703
+ echo "$PLAN_ARTIFACTS_RESULT"
704
+ PLAN_APPROVAL_HOLD_ID=$(printf '%s' "$PLAN_ARTIFACTS_RESULT" | jq -r '.plan_approval_hold_id // empty')
703
705
  ```
704
706
 
707
+ `record_plan_artifacts` also opens a `plan_approval` hold at the plan-ready boundary and returns it as `plan_approval_hold_id` (idempotent — re-running finds the same pending hold instead of spamming a new one). Capture `PLAN_APPROVAL_HOLD_ID` for the Step 8 checkpoint. This hold does **not** block `$map-plan` itself: planning artifacts are written and Step 8 prints its checkpoint regardless of whether the hold is still pending. The decision (`decide_approval_hold <hold-id> approved|denied`) happens later, at the `$map-efficient` approval-hold preflight — or automatically via an autonomous chain's `auto_decide_holds` poll. If the result instead carries `plan_approval_hold_error: true`, the hold store failed — say so in the Step 8 checkpoint and have the operator create/decide the hold manually (`create_approval_hold --kind plan_approval ...`).
708
+
705
709
  ---
706
710
 
707
711
  ## Step 8: Output Checkpoint
@@ -726,6 +730,7 @@ shell_command:
726
730
  echo "[ok] Plan written to .map/${BRANCH}/task_plan_${BRANCH}.md"
727
731
  echo "[ok] artifact_manifest.json updated"
728
732
  echo "[ok] Mode: [standard | light | deep]"
733
+ echo "[ok] Plan approval hold: ${PLAN_APPROVAL_HOLD_ID:-none} — decide via decide_approval_hold <hold-id> <approved|denied> --note \"<operator note>\" before \$map-efficient will proceed"
729
734
  echo ""
730
735
  echo "Next steps:"
731
736
  echo " 1. Review .map/${BRANCH}/task_plan_${BRANCH}.md"
@@ -112,9 +112,21 @@ otherwise) and mode semantics.
112
112
 
113
113
  ### Step A.1: Gather changes
114
114
 
115
+ Diff against the **merge-base with the default branch**, not `HEAD`. On a
116
+ fully-committed branch — the normal `/map-check` → `/map-review` state —
117
+ `git diff HEAD` is empty and under-reports the review scope to zero (#426).
118
+
115
119
  ```bash
116
- git diff HEAD
117
- git status
120
+ BASE=""
121
+ for ref in origin/main origin/master main master; do
122
+ git rev-parse --verify --quiet "$ref" >/dev/null && { BASE="$ref"; break; }
123
+ done
124
+ # No default-branch ref: diff the working tree. NEVER "HEAD...HEAD" — that range
125
+ # is always empty and re-creates the very bug this step fixes.
126
+ [ -n "$BASE" ] && RANGE="$BASE...HEAD" || RANGE="HEAD"
127
+ git --no-pager diff --stat "$RANGE"
128
+ git --no-pager diff "$RANGE"
129
+ git status # uncommitted work in progress — secondary signal
118
130
  ```
119
131
 
120
132
  ### Step A.1b: Load canonical review context (bundle + handoff)