mapify-cli 3.19.0__tar.gz → 3.20.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 (425) hide show
  1. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/.claude/hooks/README.md +2 -1
  2. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/PKG-INFO +1 -1
  3. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/pyproject.toml +1 -1
  4. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/__init__.py +1 -1
  5. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/config/project_config.py +11 -0
  6. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/actor.md +1 -0
  7. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/README.md +2 -1
  8. mapify_cli-3.20.0/src/mapify_cli/templates/hooks/scrub-internal-ids.py +173 -0
  9. mapify_cli-3.20.0/src/mapify_cli/templates/map/scripts/scrub_internal_ids.py +536 -0
  10. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/hook-patterns.md +1 -0
  11. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/settings.json +11 -0
  12. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +1 -0
  13. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +2 -1
  14. mapify_cli-3.20.0/src/mapify_cli/templates_src/hooks/scrub-internal-ids.py.jinja +173 -0
  15. mapify_cli-3.20.0/src/mapify_cli/templates_src/map/scripts/scrub_internal_ids.py.jinja +536 -0
  16. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +1 -0
  17. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/settings.json.jinja +11 -0
  18. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/hooks/test_hook_inventory_smoke.py +7 -0
  19. mapify_cli-3.20.0/tests/hooks/test_scrub_internal_ids_hook.py +166 -0
  20. mapify_cli-3.20.0/tests/test_scrub_internal_ids.py +311 -0
  21. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/.claude/skills/README.md +0 -0
  22. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/.gitignore +0 -0
  23. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/LICENSE +0 -0
  24. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/README.md +0 -0
  25. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/_locking.py +0 -0
  26. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/cli_ui.py +0 -0
  27. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/config/__init__.py +0 -0
  28. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/config/mcp.py +0 -0
  29. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/config/settings.py +0 -0
  30. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/__init__.py +0 -0
  31. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
  32. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
  33. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/file_copier.py +0 -0
  34. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
  35. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/providers.py +0 -0
  36. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
  37. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/dependency_graph.py +0 -0
  38. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/intent_detector.py +0 -0
  39. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/memory/__init__.py +0 -0
  40. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/memory/capture.py +0 -0
  41. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/memory/digest_schema.py +0 -0
  42. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/memory/finalize.py +0 -0
  43. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/memory/recall.py +0 -0
  44. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/minimality_report.py +0 -0
  45. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/ralph_state.py +0 -0
  46. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/repo_insight.py +0 -0
  47. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/research_eval.py +0 -0
  48. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/schemas.py +0 -0
  49. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skill_ir.py +0 -0
  50. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
  51. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
  52. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
  53. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
  54. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
  55. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
  56. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
  57. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
  58. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/runner.py +0 -0
  59. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
  60. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/.gitignore +0 -0
  61. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
  62. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
  63. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
  64. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
  65. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/monitor.md +0 -0
  66. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
  67. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
  68. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
  69. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
  70. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
  71. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
  72. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
  73. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
  74. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/config.toml +0 -0
  75. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +0 -0
  76. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
  77. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
  78. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +0 -0
  79. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
  80. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
  81. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
  82. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
  83. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +0 -0
  84. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
  85. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
  86. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
  87. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
  88. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
  89. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
  90. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
  91. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
  92. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
  93. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
  94. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
  95. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
  96. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
  97. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
  98. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/hooks/workflow-gate.py +0 -0
  99. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
  100. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +0 -0
  101. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +0 -0
  102. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
  103. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
  104. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
  105. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
  106. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
  107. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
  108. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
  109. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
  110. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
  111. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
  112. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
  113. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
  114. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
  115. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
  116. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
  117. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
  118. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
  119. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
  120. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
  121. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
  122. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
  123. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/README.md +0 -0
  124. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
  125. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
  126. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
  127. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +0 -0
  128. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
  129. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
  130. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
  131. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
  132. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
  133. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
  134. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
  135. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
  136. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +0 -0
  137. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
  138. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
  139. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
  140. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
  141. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
  142. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
  143. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
  144. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
  145. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
  146. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
  147. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
  148. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
  149. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
  150. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
  151. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
  152. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
  153. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
  154. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
  155. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
  156. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
  157. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
  158. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/map-understand/SKILL.md +0 -0
  159. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
  160. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
  161. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
  162. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
  163. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
  164. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
  165. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
  166. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
  167. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
  168. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
  169. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
  170. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
  171. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
  172. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
  173. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
  174. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
  175. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
  176. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +0 -0
  177. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
  178. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
  179. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +0 -0
  180. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
  181. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
  182. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
  183. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
  184. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +0 -0
  185. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
  186. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
  187. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
  188. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
  189. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
  190. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
  191. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
  192. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
  193. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
  194. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
  195. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
  196. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
  197. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
  198. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
  199. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +0 -0
  200. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
  201. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +0 -0
  202. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +0 -0
  203. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
  204. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
  205. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
  206. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
  207. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
  208. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
  209. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
  210. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
  211. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
  212. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
  213. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
  214. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
  215. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
  216. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
  217. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
  218. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
  219. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
  220. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
  221. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
  222. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
  223. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
  224. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
  225. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
  226. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
  227. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
  228. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +0 -0
  229. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
  230. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
  231. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
  232. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
  233. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
  234. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
  235. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
  236. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
  237. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +0 -0
  238. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
  239. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
  240. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
  241. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
  242. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
  243. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
  244. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
  245. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
  246. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
  247. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
  248. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
  249. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
  250. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
  251. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
  252. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
  253. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
  254. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
  255. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
  256. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
  257. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
  258. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
  259. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +0 -0
  260. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
  261. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
  262. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/token_budget.py +0 -0
  263. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/tool_output_offload.py +0 -0
  264. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/tools/__init__.py +0 -0
  265. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
  266. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/verification_recorder.py +0 -0
  267. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/workflow_finalizer.py +0 -0
  268. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/workflow_logger.py +0 -0
  269. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/src/mapify_cli/workflow_state.py +0 -0
  270. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/__init__.py +0 -0
  271. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/conftest.py +0 -0
  272. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
  273. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/fixtures/codex/config.toml +0 -0
  274. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
  275. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/hooks/test_end_of_turn.py +0 -0
  276. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/hooks/test_safety_guardrails.py +0 -0
  277. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/__init__.py +0 -0
  278. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/blueprint.json +0 -0
  279. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/code_review.md +0 -0
  280. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/plan_handoff.json +0 -0
  281. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/spec.md +0 -0
  282. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
  283. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
  284. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/task_plan.md +0 -0
  285. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/fixtures/verification_summary.md +0 -0
  286. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
  287. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
  288. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/README.md +0 -0
  289. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
  290. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
  291. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
  292. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
  293. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
  294. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
  295. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
  296. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
  297. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
  298. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
  299. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
  300. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
  301. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
  302. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
  303. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
  304. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
  305. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
  306. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
  307. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
  308. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
  309. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
  310. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
  311. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
  312. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
  313. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
  314. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
  315. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
  316. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
  317. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
  318. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
  319. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
  320. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
  321. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
  322. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
  323. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
  324. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
  325. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
  326. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
  327. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
  328. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
  329. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
  330. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
  331. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
  332. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
  333. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
  334. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
  335. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
  336. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
  337. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
  338. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
  339. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
  340. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
  341. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
  342. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
  343. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
  344. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
  345. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
  346. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
  347. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
  348. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
  349. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
  350. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
  351. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
  352. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
  353. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
  354. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
  355. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
  356. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
  357. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
  358. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
  359. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
  360. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
  361. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_agent_cli_correctness.py +0 -0
  362. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_agent_dispatch_audit.py +0 -0
  363. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_agent_frontmatter.py +0 -0
  364. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_artifact_schemas.py +0 -0
  365. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_bump_version.py +0 -0
  366. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_compaction_offload_integration.py +0 -0
  367. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_decomposition.py +0 -0
  368. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_dependency_graph.py +0 -0
  369. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_diagnostics.py +0 -0
  370. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_digest_schema.py +0 -0
  371. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_file_copier.py +0 -0
  372. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_hook_patterns.py +0 -0
  373. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_init_import_graph.py +0 -0
  374. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_intent_detector.py +0 -0
  375. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
  376. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_jinja2_dep.py +0 -0
  377. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_locking.py +0 -0
  378. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_managed_file_copier.py +0 -0
  379. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_map_orchestrator.py +0 -0
  380. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_map_step_runner.py +0 -0
  381. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_map_token_meter.py +0 -0
  382. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_map_utils_sanitize.py +0 -0
  383. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_mapify_cli.py +0 -0
  384. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_memory_capture.py +0 -0
  385. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_memory_finalize.py +0 -0
  386. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_memory_integration.py +0 -0
  387. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_memory_recall.py +0 -0
  388. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_memory_review_fixes.py +0 -0
  389. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_minimality_report.py +0 -0
  390. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_post_compact_context.py +0 -0
  391. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_prompt_layering.py +0 -0
  392. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_pyyaml_dep.py +0 -0
  393. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_ralph_hooks.py +0 -0
  394. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_ralph_state.py +0 -0
  395. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_repo_insight.py +0 -0
  396. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_research_eval.py +0 -0
  397. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_schemas.py +0 -0
  398. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skill_ir.py +0 -0
  399. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills.py +0 -0
  400. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_consistency.py +0 -0
  401. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_aggregator.py +0 -0
  402. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_apply.py +0 -0
  403. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_cli_optimize.py +0 -0
  404. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
  405. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
  406. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_fixtures.py +0 -0
  407. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_optimizer.py +0 -0
  408. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
  409. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_proposer.py +0 -0
  410. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_runner.py +0 -0
  411. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_schema.py +0 -0
  412. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_skills_eval_viewer.py +0 -0
  413. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_sofa_client.py +0 -0
  414. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_sofa_search.py +0 -0
  415. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_template_render.py +0 -0
  416. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_token_budget.py +0 -0
  417. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_tool_output_offload.py +0 -0
  418. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_validate_dependencies.py +0 -0
  419. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_validate_spec_citations.py +0 -0
  420. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_verification_recorder.py +0 -0
  421. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_workflow_context_injector.py +0 -0
  422. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_workflow_finalizer.py +0 -0
  423. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_workflow_gate.py +0 -0
  424. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_workflow_logger.py +0 -0
  425. {mapify_cli-3.19.0 → mapify_cli-3.20.0}/tests/test_workflow_state.py +0 -0
@@ -86,7 +86,7 @@ documented per event in the official Claude Code docs.
86
86
 
87
87
  ## Hook inventory
88
88
 
89
- All 15 hooks (14 `.py` + `end-of-turn.sh`) are classified against the
89
+ All 16 hooks (15 `.py` + `end-of-turn.sh`) are classified against the
90
90
  `MAP_INVOKED_BY` recursion-guard contract. **REQUIRE_GUARD** hooks early-exit
91
91
  when MAP spawns a nested subprocess; **FORBID_GUARD** hooks must always fire
92
92
  and may not carry the guard. Full contract and per-hook rationale:
@@ -107,6 +107,7 @@ classification is enforced by `scripts/lint-hooks.py` (in `make lint` /
107
107
  | `pre-compact-save-transcript.py` | `PreCompact` | No | REQUIRE_GUARD | Save full conversation transcript |
108
108
  | `detect-clarification-triggers.py` | `UserPromptSubmit` | No | REQUIRE_GUARD | Detect "ask if unclear" + async/durability language |
109
109
  | `end-of-turn.sh` | `Stop` | No | REQUIRE_GUARD | Auto-fix lint/format silently |
110
+ | `scrub-internal-ids.py` | `Stop` | No | REQUIRE_GUARD | On `WORKFLOW_COMPLETE`, strip leaked `ST-`/`AC-`/`VC-`/`INV-`/`HC-` IDs from run-changed code and commit the cleanup (gated, runs once) |
110
111
  | `map-memory-capture.py` | `Stop` | No | REQUIRE_GUARD | Append per-turn scratch WAL record (cross-session memory) |
111
112
  | `map-memory-endmark.py` | `SessionEnd` | No | REQUIRE_GUARD | Best-effort 'ended' marker for the session WAL |
112
113
  | `map-memory-finalize.py` | `SessionStart` | No | REQUIRE_GUARD | Finalize prior dirty session scratches into digests (claude -p) |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mapify-cli
3
- Version: 3.19.0
3
+ Version: 3.20.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mapify-cli"
3
- version = "3.19.0"
3
+ version = "3.20.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.19.0"
26
+ __version__ = "3.20.0"
27
27
 
28
28
  import os
29
29
  import subprocess
@@ -122,6 +122,12 @@ class MapConfig:
122
122
  # .map/config.yaml. When enabled, the map-so-search skill is available.
123
123
  sofa_enabled: bool = False
124
124
 
125
+ # Strip MAP-internal workflow IDs (ST-/AC-/VC-/INV-/HC-) from run-changed
126
+ # code at workflow completion (Stop hook `scrub-internal-ids.py`). On by
127
+ # default; set `scrub_internal_ids: false` in .map/config.yaml to opt out
128
+ # and keep the IDs the framework wrote into comments/strings/test names.
129
+ scrub_internal_ids: bool = True
130
+
125
131
 
126
132
  def load_map_config(project_path: Path) -> MapConfig:
127
133
  """Load MAP config from .map/config.yaml with fallback to defaults.
@@ -384,6 +390,11 @@ minimality: lite
384
390
  # Stack Overflow for Agents (SOFA) integration — opt-in, off by default.
385
391
  # Enable via `mapify init --sofa` or uncomment the line below.
386
392
  # sofa.enabled: false
393
+
394
+ # Strip MAP-internal workflow IDs (ST-/AC-/VC-/INV-/HC-) from the code a run
395
+ # changed, at workflow completion (Stop hook). On by default; uncomment and set
396
+ # to false to keep the IDs the framework wrote into comments/strings/test names.
397
+ # scrub_internal_ids: true
387
398
  """
388
399
 
389
400
 
@@ -776,6 +776,7 @@ Follow this protocol exactly — do not infer "how seniors write" or add stylist
776
776
  4. **Intent comments**: Add a one-line `# Intent: <why>` comment above any non-obvious logic block. Do NOT comment obvious code.
777
777
  5. **Performance**: Clarity first, optimize only if proven necessary.
778
778
  6. **Imports**: Group by stdlib → third-party → local. One blank line between groups.
779
+ 7. **No internal workflow IDs in comments or strings**: NEVER write MAP-internal workflow identifiers — subtask `ST-001`, acceptance criteria `AC-3`, verification criteria `VC1`, invariants `INV-7`, hard constraints `HC-1` — into shipped code comments or string literals. They are workflow scaffolding, not user-facing documentation. State the *reason* without the ID (`# enforce single-writer invariant`, not `# INV-7 single writer`). The one exception is the transient `test_vc<n>_*` test-naming aid described above: keep it during the run — the framework strips the `vc<n>` segment from shipped tests automatically at completion.
779
780
 
780
781
  ## Error Handling Patterns
781
782
 
@@ -86,7 +86,7 @@ documented per event in the official Claude Code docs.
86
86
 
87
87
  ## Hook inventory
88
88
 
89
- All 15 hooks (14 `.py` + `end-of-turn.sh`) are classified against the
89
+ All 16 hooks (15 `.py` + `end-of-turn.sh`) are classified against the
90
90
  `MAP_INVOKED_BY` recursion-guard contract. **REQUIRE_GUARD** hooks early-exit
91
91
  when MAP spawns a nested subprocess; **FORBID_GUARD** hooks must always fire
92
92
  and may not carry the guard. Full contract and per-hook rationale:
@@ -107,6 +107,7 @@ classification is enforced by `scripts/lint-hooks.py` (in `make lint` /
107
107
  | `pre-compact-save-transcript.py` | `PreCompact` | No | REQUIRE_GUARD | Save full conversation transcript |
108
108
  | `detect-clarification-triggers.py` | `UserPromptSubmit` | No | REQUIRE_GUARD | Detect "ask if unclear" + async/durability language |
109
109
  | `end-of-turn.sh` | `Stop` | No | REQUIRE_GUARD | Auto-fix lint/format silently |
110
+ | `scrub-internal-ids.py` | `Stop` | No | REQUIRE_GUARD | On `WORKFLOW_COMPLETE`, strip leaked `ST-`/`AC-`/`VC-`/`INV-`/`HC-` IDs from run-changed code and commit the cleanup (gated, runs once) |
110
111
  | `map-memory-capture.py` | `Stop` | No | REQUIRE_GUARD | Append per-turn scratch WAL record (cross-session memory) |
111
112
  | `map-memory-endmark.py` | `SessionEnd` | No | REQUIRE_GUARD | Best-effort 'ended' marker for the session WAL |
112
113
  | `map-memory-finalize.py` | `SessionStart` | No | REQUIRE_GUARD | Finalize prior dirty session scratches into digests (claude -p) |
@@ -0,0 +1,173 @@
1
+ #!/usr/bin/env python3
2
+ """Strip MAP-internal workflow IDs from shipped code — Stop hook.
3
+
4
+ Runs when the main agent finishes a turn (Stop event). It is a thin, strictly
5
+ gated wrapper: the deterministic work lives in ``.map/scripts/scrub_internal_ids
6
+ .py`` (stdlib-only, importable-free, identical in this repo and installed
7
+ projects — same split as ``map-token-meter`` / ``map_step_runner``).
8
+
9
+ Why a Stop hook and not a skill step: the executor must not depend on the agent
10
+ remembering to call a command at close. The harness fires Stop deterministically;
11
+ the hook decides for itself whether the run is done.
12
+
13
+ Gating (no-op in ~all turns):
14
+ 1. ``MAP_INVOKED_BY`` set -> exit (don't run inside a sub-agent).
15
+ 2. no ``.map/<branch>/step_state.json`` OR ``workflow_status`` is not
16
+ ``WORKFLOW_COMPLETE`` -> exit (run not finished).
17
+ 3. marker ``.map/<branch>/.scrub_done`` present -> exit (already ran once).
18
+ 4. ``scrub_internal_ids: false`` in ``.map/config.yaml`` -> exit (opt-out).
19
+
20
+ When it does run: calls the engine in ``clean`` mode, commits the resulting
21
+ working-tree changes as a dedicated ``chore(map): strip internal workflow IDs``
22
+ commit (never amends), and writes the marker so it fires exactly once.
23
+
24
+ Synchronous by design (justified exception to the async-hook rule): the scrub
25
+ must finish and commit before the run is considered done; a detached run would
26
+ race the close/PR and could land after it. The work is fast — scoped to the
27
+ run's git diff, like ``end-of-turn.sh``.
28
+
29
+ Exit codes: always 0. The scrub is advisory and must never block a turn.
30
+ """
31
+ from __future__ import annotations
32
+
33
+ import json
34
+ import os
35
+ import re
36
+ import subprocess
37
+ import sys
38
+ from pathlib import Path
39
+ from typing import NoReturn
40
+
41
+ PROJECT_DIR = Path(os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
42
+ ENGINE = PROJECT_DIR / ".map" / "scripts" / "scrub_internal_ids.py"
43
+
44
+
45
+ def _silent() -> NoReturn:
46
+ sys.stdout.write("{}")
47
+ sys.exit(0)
48
+
49
+
50
+ def _sanitize_branch(branch: str) -> str:
51
+ sanitized = branch.replace("/", "-")
52
+ sanitized = re.sub(r"[^a-zA-Z0-9_.-]", "-", sanitized)
53
+ sanitized = re.sub(r"-+", "-", sanitized).strip("-")
54
+ if ".." in sanitized or sanitized.startswith("."):
55
+ return "default"
56
+ return sanitized or "default"
57
+
58
+
59
+ def _get_branch() -> str:
60
+ try:
61
+ result = subprocess.run(
62
+ ["git", "rev-parse", "--abbrev-ref", "HEAD"],
63
+ capture_output=True, text=True, cwd=PROJECT_DIR, timeout=2,
64
+ )
65
+ if result.returncode == 0:
66
+ return _sanitize_branch(result.stdout.strip())
67
+ except Exception:
68
+ pass
69
+ return "default"
70
+
71
+
72
+ def _scrub_enabled(branch_dir: Path) -> bool:
73
+ """Honor the ``scrub_internal_ids`` opt-out in .map/config.yaml (default on).
74
+
75
+ Minimal stdlib parse — PyYAML is not guaranteed in installed projects.
76
+ """
77
+ config = PROJECT_DIR / ".map" / "config.yaml"
78
+ if not config.exists():
79
+ return True
80
+ try:
81
+ text = config.read_text(encoding="utf-8")
82
+ except OSError:
83
+ return True
84
+ m = re.search(r"^\s*scrub[._]internal_ids\s*:\s*(\S+)", text, re.MULTILINE)
85
+ if m and m.group(1).strip().lower() in ("false", "no", "off", "0"):
86
+ return False
87
+ return True
88
+
89
+
90
+ def main() -> None:
91
+ if os.environ.get("MAP_INVOKED_BY"):
92
+ sys.exit(0)
93
+ # Stop payload is read defensively but not required.
94
+ try:
95
+ json.load(sys.stdin)
96
+ except (json.JSONDecodeError, ValueError):
97
+ pass
98
+
99
+ branch = _get_branch()
100
+ branch_dir = PROJECT_DIR / ".map" / branch
101
+ state_file = branch_dir / "step_state.json"
102
+ if not state_file.exists():
103
+ _silent()
104
+ try:
105
+ state = json.loads(state_file.read_text(encoding="utf-8"))
106
+ except (json.JSONDecodeError, OSError):
107
+ _silent()
108
+
109
+ status = str(state.get("workflow_status") or "").strip().upper()
110
+ if status != "WORKFLOW_COMPLETE":
111
+ _silent()
112
+
113
+ marker = branch_dir / ".scrub_done"
114
+ if marker.exists():
115
+ _silent()
116
+ if not _scrub_enabled(branch_dir):
117
+ marker.write_text("disabled\n", encoding="utf-8")
118
+ _silent()
119
+ if not ENGINE.exists():
120
+ _silent()
121
+
122
+ # Run the engine. MAP_INVOKED_BY guards any nested hook from re-entering.
123
+ env = {**os.environ, "MAP_INVOKED_BY": "scrub-internal-ids"}
124
+ try:
125
+ proc = subprocess.run(
126
+ [sys.executable, str(ENGINE), "clean", "--branch", branch],
127
+ capture_output=True, text=True, cwd=PROJECT_DIR, env=env, timeout=120,
128
+ )
129
+ except (OSError, subprocess.SubprocessError):
130
+ _silent()
131
+
132
+ report = {}
133
+ try:
134
+ report = json.loads(proc.stdout)
135
+ except (json.JSONDecodeError, ValueError):
136
+ report = {}
137
+
138
+ modified = report.get("files_modified") or []
139
+ if modified:
140
+ try:
141
+ subprocess.run(["git", "add", "--", *modified], cwd=PROJECT_DIR,
142
+ env=env, capture_output=True, text=True, timeout=15)
143
+ subprocess.run(
144
+ ["git", "commit", "-m", "chore(map): strip internal workflow IDs"],
145
+ cwd=PROJECT_DIR, env=env, capture_output=True, text=True, timeout=30,
146
+ )
147
+ except (OSError, subprocess.SubprocessError):
148
+ pass # leave the cleaned working tree in place; never block
149
+
150
+ # Mark done so the scrub fires exactly once for this completed run.
151
+ try:
152
+ marker.write_text(
153
+ json.dumps({
154
+ "files_modified": modified,
155
+ "tokens_removed": report.get("tokens_removed", 0),
156
+ "tests_renamed": report.get("tests_renamed", []),
157
+ "residual": report.get("residual", []),
158
+ }) + "\n",
159
+ encoding="utf-8",
160
+ )
161
+ except OSError:
162
+ pass
163
+
164
+ if report.get("residual"):
165
+ sys.stderr.write(
166
+ "[scrub-internal-ids] could not auto-remove some internal IDs; "
167
+ f"see {marker} (residual list).\n"
168
+ )
169
+ _silent()
170
+
171
+
172
+ if __name__ == "__main__":
173
+ main()