mapify-cli 3.32.0__tar.gz → 3.33.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.
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/PKG-INFO +17 -5
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/README.md +16 -4
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/pyproject.toml +1 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/__init__.py +1 -1
- mapify_cli-3.33.0/src/mapify_cli/skills_eval/apply_patcher.py +277 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/monitor.md +21 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/monitor.toml +34 -2
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/end-of-turn.sh +11 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +83 -2
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +54 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +71 -23
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +3 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-learn/SKILL.md +5 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-memory-now/SKILL.md +8 -8
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-resume/SKILL.md +8 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-resume/resume-reference.md +83 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-review/SKILL.md +6 -7
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-review/review-reference.md +16 -10
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-skill-eval/SKILL.md +1 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +11 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/workflow-gate.py +87 -3
- mapify_cli-3.33.0/src/mapify_cli/templates/map/scripts/map_interruption.py +981 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +221 -6
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +691 -256
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +5 -5
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +123 -18
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +1 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +8 -8
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +8 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +83 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +6 -5
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +16 -10
- mapify_cli-3.33.0/src/mapify_cli/templates_src/_partials/monitor-review-context.md.jinja +19 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/_partials/serial-blocker-repair.md.jinja +49 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/_partials/stale-attribution-recovery.md.jinja +30 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +2 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +15 -2
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +83 -2
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-check/check-reference.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-debug/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-learn/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-learn/templates/example-rules.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-learn/templates/rules-unconditional.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-learn/templates/rules-with-paths.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-memory-now/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-plan/plan-reference.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-prd-review/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-resume/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-resume/resume-reference.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-skill-eval/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-so-search/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-so-search/scripts/sofa_search.py.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/scripts/check-complete.sh.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/scripts/get-plan-path.sh.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/scripts/init-session.sh.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/scripts/show-focus.sh.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/templates/findings.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/templates/iteration_history.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/templates/progress.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-state/templates/task_plan.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-task/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-tdd/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-tokenreport/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +1 -0
- mapify_cli-3.33.0/src/mapify_cli/templates_src/codex/skills/map-upgrade/SKILL.md.jinja +1 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +11 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +87 -3
- mapify_cli-3.33.0/src/mapify_cli/templates_src/map/scripts/map_interruption.py.jinja +981 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +221 -6
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +691 -256
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +18 -12
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-check/check-reference.md.jinja +7 -6
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-debug/SKILL.md.jinja +76 -36
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +364 -110
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +373 -113
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +125 -35
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-fast/SKILL.md.jinja +35 -16
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-learn/SKILL.md.jinja +94 -57
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-learn/templates/example-rules.md.jinja +2 -1
- mapify_cli-3.33.0/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +6 -0
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-learn/templates/rules-with-paths.md.jinja +2 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +35 -25
- mapify_cli-3.33.0/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +1175 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +5 -4
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-prd-review/SKILL.md.jinja +88 -46
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +28 -14
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +36 -26
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +6 -9
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +16 -10
- mapify_cli-3.33.0/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +201 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +11 -9
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +3 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +20 -14
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/scripts/check-complete.sh.jinja +3 -2
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +6 -4
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/scripts/init-session.sh.jinja +6 -4
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/scripts/show-focus.sh.jinja +14 -8
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/templates/findings.md.jinja +10 -5
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/templates/iteration_history.md.jinja +1 -0
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/templates/progress.md.jinja +1 -0
- {mapify_cli-3.32.0/src/mapify_cli/templates_src/codex → mapify_cli-3.33.0/src/mapify_cli/templates_src}/skills/map-state/templates/task_plan.md.jinja +1 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +42 -35
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +62 -38
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +25 -19
- mapify_cli-3.33.0/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +174 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-upgrade/SKILL.md.jinja +3 -1
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/hooks/test_end_of_turn.py +99 -0
- mapify_cli-3.33.0/tests/test_agent_cli_correctness.py +168 -0
- mapify_cli-3.33.0/tests/test_map_interruption.py +559 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_map_orchestrator.py +483 -3
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_map_step_runner.py +279 -8
- mapify_cli-3.33.0/tests/test_mutation_path_normalization.py +281 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_python_version_requirement.py +17 -2
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_release_ci_gates.py +30 -0
- mapify_cli-3.33.0/tests/test_repair_attribution.py +876 -0
- mapify_cli-3.33.0/tests/test_repair_workflow_gate.py +171 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills.py +334 -25
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_apply.py +276 -0
- mapify_cli-3.32.0/src/mapify_cli/skills_eval/apply_patcher.py +0 -238
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -309
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +0 -357
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -351
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -280
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-learn/templates/rules-unconditional.md.jinja +0 -5
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-memory-now/SKILL.md.jinja +0 -136
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -839
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-plan/plan-reference.md.jinja +0 -226
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-prd-review/SKILL.md.jinja +0 -204
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-resume/SKILL.md.jinja +0 -294
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-resume/resume-reference.md.jinja +0 -218
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-skill-eval/SKILL.md.jinja +0 -178
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-so-search/SKILL.md.jinja +0 -122
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-so-search/scripts/sofa_search.py.jinja +0 -573
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-state/SKILL.md.jinja +0 -217
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-state/scripts/get-plan-path.sh.jinja +0 -40
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-task/SKILL.md.jinja +0 -295
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-tdd/SKILL.md.jinja +0 -536
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-tokenreport/SKILL.md.jinja +0 -245
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +0 -113
- mapify_cli-3.32.0/src/mapify_cli/templates_src/codex/skills/map-upgrade/SKILL.md.jinja +0 -5
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -70
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -405
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -190
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -404
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -19
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -5
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -10
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +0 -511
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -181
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -68
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -78
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -62
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -62
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -93
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -75
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -70
- mapify_cli-3.32.0/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +0 -129
- mapify_cli-3.32.0/tests/test_agent_cli_correctness.py +0 -91
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/.claude/hooks/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/.claude/skills/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/.gitignore +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/LICENSE +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/__main__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/_locking.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/_python_guard.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/auto_update.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/boundary_quality_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/cli_ui.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/code_map.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/codex_exec.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/config/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/config/mcp.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/config/project_config.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/config/settings.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/domain_skill.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/file_copier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/governance_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/providers.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/dependency_graph.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/grace_eval/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/grace_eval/schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/grace_eval/sweep.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/install_manifest.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/intent_detector.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/memory/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/memory/capture.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/memory/digest_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/memory/finalize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/memory/recall.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/minimality_eval.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/minimality_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/parallelism_observability.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/provider_registry.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/python_runtime.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/ralph_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/repo_insight.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/research_eval.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/research_eval_compare.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/schemas.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/scope_classifier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skill_ir.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/bundle.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/dispatcher.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/eval_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/gates.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/judge.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/repeated.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/trajectory/seeding.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/.gitignore +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/actor.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/actor.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/documentation-reviewer.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/evaluator.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/final-verifier.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/predictor.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/reflector.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/config.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/context-meter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/detect-clarification-triggers.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-memory-capture.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-memory-endmark.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-memory-recall.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-memory-session.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-stop.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/map-token-meter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/post-compact-context.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/pre-compact-save-transcript.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/ralph-context-pruner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/ralph-iteration-logger.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/safety-guardrails.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/scrub-internal-ids.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/workflow-context-injector.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/references/map-json-output-contracts.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/references/map-output-examples.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/references/map-xml-prompt-envelopes.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-architecture/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-auto/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-auto/auto-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-check/check-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-debug/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-learn/templates/example-rules.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-learn/templates/rules-unconditional.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-learn/templates/rules-with-paths.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-plan/plan-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-prd-review/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-release/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-release/release-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-review/adversarial-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-so-search/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-so-search/scripts/sofa_search.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/scripts/check-complete.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/scripts/get-plan-path.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/scripts/init-session.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/scripts/show-focus.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/templates/findings.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/templates/iteration_history.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/templates/progress.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-state/templates/task_plan.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-task/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-tdd/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-tokenreport/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-upgrade/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-wayfind/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/skills/map-wayfind/wayfind-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-statusline.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/scrub-internal-ids.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/classify_scope.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/scrub_internal_ids.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/scripts/wayfind_runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/settings.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-architecture/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-auto/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-auto/auto-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-prd-review/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-release/release-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-review/adversarial-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-understand/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-upgrade/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-wayfind/SKILL.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/map-wayfind/wayfind-reference.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/_partials/apply-patch-paths.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/_partials/auto-update-preflight.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/_partials/codex-memory-hook-wrapper.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/_partials/manual-upgrade-flow.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/_partials/python-version-guard.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/actor.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/documentation-reviewer.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/evaluator.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/final-verifier.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/predictor.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/reflector.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/context-meter.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/detect-clarification-triggers.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/end-of-turn.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-memory-capture.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-memory-endmark.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-memory-recall.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-memory-session.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-stop.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/map-token-meter.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/post-compact-context.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/pre-compact-save-transcript.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/ralph-context-pruner.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/ralph-iteration-logger.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/safety-guardrails.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/scrub-internal-ids.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks/workflow-context-injector.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/references/map-json-output-contracts.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/references/map-output-examples.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/references/map-xml-prompt-envelopes.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-architecture/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-auto/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-auto/auto-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-release/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-release/release-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-review/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-review/adversarial-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-review/review-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-wayfind/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/codex/skills/map-wayfind/wayfind-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-statusline.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/scrub-internal-ids.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/classify_scope.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/scrub_internal_ids.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/scripts/wayfind_runner.py.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-architecture/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-auto/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-auto/auto-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-release/release-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-review/adversarial-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-wayfind/SKILL.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/map-wayfind/wayfind-reference.md.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/token_budget.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/tool_output_offload.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/tools/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/update_install.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/update_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/update_versions.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/verification_recorder.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/workflow_finalizer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/workflow_logger.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/workflow_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/_fake_task_tool.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/conftest.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/fixtures/codex/config.toml +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/fixtures/wave_blueprints.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/hooks/test_safety_guardrails.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/hooks/test_scrub_internal_ids_hook.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/code_review.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/plan_handoff.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/spec.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/task_plan.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/fixtures/verification_summary.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/README.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/hidden/test_kvparse_full.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/src/kvparse.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_false_success/repo/tests/test_kvparse_basic.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_agent_dispatch_audit.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_agent_frontmatter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_agent_memory.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_approval_hold.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_artifact_schemas.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_auto_update.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_boundary_quality_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_bump_version.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_classify_scope_script.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_code_map.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_codex_map_review_live.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_compaction_offload_integration.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_concurrent_dispatch_harness.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_context_usefulness.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_cross_ai_config.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_decomposition.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_dependency_graph.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_diagnostics.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_digest_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_domain_skill.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_file_copier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_governance_attack_fixtures.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_governance_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_grace_eval_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_grace_eval_sweep.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_hook_patterns.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_init_import_graph.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_install_manifest.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_intent_detector.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_jinja2_dep.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_locking.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_managed_file_copier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_map_auto.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_map_token_meter.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_map_utils_sanitize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_mapify_cli.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_memory_capture.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_memory_finalize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_memory_integration.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_memory_recall.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_memory_review_fixes.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_minimality_eval.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_minimality_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_parallelism_observability.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_post_compact_context.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_preset_commands.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_project_config.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_prompt_layering.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_prompt_profile_commands.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_pyyaml_dep.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_ralph_hooks.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_ralph_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_repo_insight.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_research_eval.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_research_eval_compare.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_review_verdict_ledger.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_schemas.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_scope_classifier.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_scrub_internal_ids.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_settings_deny_globs.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_shell_json_pipes.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skill_ir.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_consistency.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_aggregator.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_cli_optimize.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_fixtures.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_optimizer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_proposer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_bundle.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_cli.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_gates.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_judge.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_repeated.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_report.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_trajectory_schema.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_skills_eval_viewer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_slice5b_leak_guards.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_sofa_client.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_sofa_search.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_statusline.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_template_render.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_token_budget.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_tool_output_offload.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_update_install.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_update_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_update_versions.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_validate_dependencies.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_validate_spec_citations.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_verification_recorder.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wave_eval_harness.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wave_fixtures.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wave_parallel_harness.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wayfind_install.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wayfind_research.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_wayfind_runner.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_workflow_context_injector.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_workflow_finalizer.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_workflow_gate.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_workflow_logger.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_workflow_state.py +0 -0
- {mapify_cli-3.32.0 → mapify_cli-3.33.0}/tests/test_worktree_isolation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: mapify-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.33.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
|
|
@@ -72,6 +72,10 @@ Common failure modes MAP eliminates:
|
|
|
72
72
|
|
|
73
73
|
MAP moves engineering judgment earlier: write down the behavior, split the work into small contracts, verify each stage, review against the spec, and save lessons for the next run.
|
|
74
74
|
|
|
75
|
+
Skill maintainers can use `mapify skill-eval optimize <skill> --provider claude|codex --apply`
|
|
76
|
+
to update only the selected provider's description in the shared template source;
|
|
77
|
+
the opposite provider stays unchanged ([details](docs/USAGE.md#skill-description-optimization)).
|
|
78
|
+
|
|
75
79
|
## Quick Start
|
|
76
80
|
|
|
77
81
|
<p align="center">
|
|
@@ -91,10 +95,16 @@ Requires Python 3.11+, and `python3` on your `PATH` must be that interpreter —
|
|
|
91
95
|
installed hooks and `.map/scripts/` runners execute through a `#!/usr/bin/env
|
|
92
96
|
python3` shebang, not through the interpreter that ran `mapify`. `mapify init`
|
|
93
97
|
checks it up front and tells you what to fix ([details](docs/INSTALL.md#why-python3-on-path-matters)).
|
|
98
|
+
For Go projects requiring build tags, set `checks.go.tags: integration,netgo` in
|
|
99
|
+
`.map/config.yaml` for the Stop hook's build check ([configuration](docs/USAGE.md#end-of-turnsh-stop)).
|
|
94
100
|
|
|
95
101
|
**2. Initialize your project**
|
|
96
102
|
|
|
97
|
-
Claude Code is the default provider
|
|
103
|
+
Claude Code is the default provider. Cross-AI review compares explicit host and
|
|
104
|
+
reviewer adapter vendors; same-vendor or unknown provenance is not labeled
|
|
105
|
+
independent ([details](docs/USAGE.md#cross-ai-peer-review---cross-ai-runtime)).
|
|
106
|
+
|
|
107
|
+
Claude Code:
|
|
98
108
|
|
|
99
109
|
```bash
|
|
100
110
|
cd your-project
|
|
@@ -211,19 +221,21 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
|
|
|
211
221
|
- **Daily-driver speed** — optimized for repeated use, not occasional demos. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
|
|
212
222
|
- **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early.
|
|
213
223
|
- **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
|
|
214
|
-
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
224
|
+
- **Clean-room review** — `/map-review` auto-bundles available spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); standalone external-PR review needs no Actor blueprint. `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
215
225
|
- **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
|
|
216
226
|
|
|
217
227
|
<details>
|
|
218
228
|
<summary><b>More under the hood</b> — calibrated effort, mutation boundaries, token budgets, retry quarantine, run-health diagnostics, skill IR audit</summary>
|
|
219
229
|
|
|
220
230
|
- **Calibrated workflow effort** — each shipped slash skill declares a `thinking_policy` and `parallel_tool_policy`, so lightweight commands stay direct while planning, review, and release workflows reserve deeper reasoning and parallel fan-out for the stages that benefit.
|
|
221
|
-
- **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it.
|
|
231
|
+
- **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it. With `worktree.isolation: off`, Actor write checks inspect main even when a recovery worktree remains on disk.
|
|
232
|
+
- **Live isolation dispatch gate** — before concurrent Actor fan-out, `auto` isolation falls back to sequential on dirty or unsupported checkouts; `required` isolation stops dispatch instead. Wave guidance forwards the live decision and warning.
|
|
222
233
|
- **Context-first prompt envelopes** — high-context prompts wrap branch artifacts in XML-style `<documents>`, then state the `<task>` and `<expected_output>`, so specs, diffs, logs, and schemas stay separated for the model.
|
|
223
234
|
- **Contract-sized subtasks** — blueprints require `expected_diff_size`, `concern_type`, `one_logical_step`, `hard_constraints`, `soft_constraints`, and `coverage_map`. Hard constraints must be owned in `coverage_map` and cited in the owning subtask.
|
|
224
235
|
- **Token budget and research ROI reports** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json`, while `token_accounting.json` and `/map-tokenreport` separate research-agent/researcher cost from Actor/Monitor cost.
|
|
225
236
|
- **Clean retry quarantine** — after repeated Monitor rejection, write-capable workflows switch the next attempt into clean-retry mode using `.map/<branch>/retry_quarantine.json` instead of raw failed-session context.
|
|
226
|
-
- **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
|
|
237
|
+
- **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`. All runner subcommands support read-only `--help` / `-h`; for example, `python3 .map/scripts/map_step_runner.py write_run_health_report --help`.
|
|
238
|
+
- **Lossless serial blocker repair** — independently approved repairs run in a private checkout with their own Monitor and full gate, preserving the paused task's phase, results, retries and dirty files. Concurrent waves and overlapping repair paths fail closed; see [the repair protocol](docs/USAGE.md#independent-serial-blocker-repair).
|
|
227
239
|
- **Compact recovery surface** — `/map-resume` keeps the active recovery flow short and moves low-frequency notes to `resume-reference.md`, so recovery after `/clear` or context exhaustion gives the next checkpoint action without loading the whole appendix.
|
|
228
240
|
- **Skill IR audit** — release checks lower shipped Claude and Codex `SKILL.md` files into a typed `SkillIR`, verify content hashes, catch unsupported frontmatter, reject missing supporting-file links, and block injection-like instructions before `mapify init` copies surfaces into user repos.
|
|
229
241
|
|
|
@@ -27,6 +27,10 @@ Common failure modes MAP eliminates:
|
|
|
27
27
|
|
|
28
28
|
MAP moves engineering judgment earlier: write down the behavior, split the work into small contracts, verify each stage, review against the spec, and save lessons for the next run.
|
|
29
29
|
|
|
30
|
+
Skill maintainers can use `mapify skill-eval optimize <skill> --provider claude|codex --apply`
|
|
31
|
+
to update only the selected provider's description in the shared template source;
|
|
32
|
+
the opposite provider stays unchanged ([details](docs/USAGE.md#skill-description-optimization)).
|
|
33
|
+
|
|
30
34
|
## Quick Start
|
|
31
35
|
|
|
32
36
|
<p align="center">
|
|
@@ -46,10 +50,16 @@ Requires Python 3.11+, and `python3` on your `PATH` must be that interpreter —
|
|
|
46
50
|
installed hooks and `.map/scripts/` runners execute through a `#!/usr/bin/env
|
|
47
51
|
python3` shebang, not through the interpreter that ran `mapify`. `mapify init`
|
|
48
52
|
checks it up front and tells you what to fix ([details](docs/INSTALL.md#why-python3-on-path-matters)).
|
|
53
|
+
For Go projects requiring build tags, set `checks.go.tags: integration,netgo` in
|
|
54
|
+
`.map/config.yaml` for the Stop hook's build check ([configuration](docs/USAGE.md#end-of-turnsh-stop)).
|
|
49
55
|
|
|
50
56
|
**2. Initialize your project**
|
|
51
57
|
|
|
52
|
-
Claude Code is the default provider
|
|
58
|
+
Claude Code is the default provider. Cross-AI review compares explicit host and
|
|
59
|
+
reviewer adapter vendors; same-vendor or unknown provenance is not labeled
|
|
60
|
+
independent ([details](docs/USAGE.md#cross-ai-peer-review---cross-ai-runtime)).
|
|
61
|
+
|
|
62
|
+
Claude Code:
|
|
53
63
|
|
|
54
64
|
```bash
|
|
55
65
|
cd your-project
|
|
@@ -166,19 +176,21 @@ The DevOpsConf 2026 case study applies this process to a production Kubernetes P
|
|
|
166
176
|
- **Daily-driver speed** — optimized for repeated use, not occasional demos. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
|
|
167
177
|
- **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early.
|
|
168
178
|
- **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
|
|
169
|
-
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
179
|
+
- **Clean-room review** — `/map-review` auto-bundles available spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); standalone external-PR review needs no Actor blueprint. `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
170
180
|
- **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
|
|
171
181
|
|
|
172
182
|
<details>
|
|
173
183
|
<summary><b>More under the hood</b> — calibrated effort, mutation boundaries, token budgets, retry quarantine, run-health diagnostics, skill IR audit</summary>
|
|
174
184
|
|
|
175
185
|
- **Calibrated workflow effort** — each shipped slash skill declares a `thinking_policy` and `parallel_tool_policy`, so lightweight commands stay direct while planning, review, and release workflows reserve deeper reasoning and parallel fan-out for the stages that benefit.
|
|
176
|
-
- **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it.
|
|
186
|
+
- **Mutation boundary constraints** — write-capable Claude and Codex surfaces tell agents not to edit unrelated files, add or upgrade dependencies, or refactor neighboring code unless the current subtask requires it. With `worktree.isolation: off`, Actor write checks inspect main even when a recovery worktree remains on disk.
|
|
187
|
+
- **Live isolation dispatch gate** — before concurrent Actor fan-out, `auto` isolation falls back to sequential on dirty or unsupported checkouts; `required` isolation stops dispatch instead. Wave guidance forwards the live decision and warning.
|
|
177
188
|
- **Context-first prompt envelopes** — high-context prompts wrap branch artifacts in XML-style `<documents>`, then state the `<task>` and `<expected_output>`, so specs, diffs, logs, and schemas stay separated for the model.
|
|
178
189
|
- **Contract-sized subtasks** — blueprints require `expected_diff_size`, `concern_type`, `one_logical_step`, `hard_constraints`, `soft_constraints`, and `coverage_map`. Hard constraints must be owned in `coverage_map` and cited in the owning subtask.
|
|
179
190
|
- **Token budget and research ROI reports** — Actor and review prompt builders append active-path budget decisions to `.map/<branch>/token_budget.json`, while `token_accounting.json` and `/map-tokenreport` separate research-agent/researcher cost from Actor/Monitor cost.
|
|
180
191
|
- **Clean retry quarantine** — after repeated Monitor rejection, write-capable workflows switch the next attempt into clean-retry mode using `.map/<branch>/retry_quarantine.json` instead of raw failed-session context.
|
|
181
|
-
- **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`.
|
|
192
|
+
- **Run health report** — workflows write `.map/<branch>/run_health_report.json` during closeout: terminal status, step progress, retry counters, artifact presence, hook-injection status, and advisory signals. CI can fail inconsistent closeouts with `python3 .map/scripts/map_step_runner.py validate_run_health_report`. All runner subcommands support read-only `--help` / `-h`; for example, `python3 .map/scripts/map_step_runner.py write_run_health_report --help`.
|
|
193
|
+
- **Lossless serial blocker repair** — independently approved repairs run in a private checkout with their own Monitor and full gate, preserving the paused task's phase, results, retries and dirty files. Concurrent waves and overlapping repair paths fail closed; see [the repair protocol](docs/USAGE.md#independent-serial-blocker-repair).
|
|
182
194
|
- **Compact recovery surface** — `/map-resume` keeps the active recovery flow short and moves low-frequency notes to `resume-reference.md`, so recovery after `/clear` or context exhaustion gives the next checkpoint action without loading the whole appendix.
|
|
183
195
|
- **Skill IR audit** — release checks lower shipped Claude and Codex `SKILL.md` files into a typed `SkillIR`, verify content hashes, catch unsupported frontmatter, reject missing supporting-file links, and block injection-like instructions before `mapify init` copies surfaces into user repos.
|
|
184
196
|
|
|
@@ -23,7 +23,7 @@ Or install globally:
|
|
|
23
23
|
mapify check
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
__version__ = "3.
|
|
26
|
+
__version__ = "3.33.0"
|
|
27
27
|
|
|
28
28
|
# MUST stay the first import: it turns "this interpreter is older than 3.11" into
|
|
29
29
|
# a message that says so, instead of the ImportError raised by `from datetime
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
"""Apply a provider-specific winner without modifying the opposite skill."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import os
|
|
7
|
+
import re
|
|
8
|
+
import shutil
|
|
9
|
+
import stat
|
|
10
|
+
import subprocess
|
|
11
|
+
import tempfile
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
from typing import TypedDict
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class _JournalEntry(TypedDict):
|
|
17
|
+
path: str
|
|
18
|
+
exists: bool
|
|
19
|
+
mode: int
|
|
20
|
+
backup: str
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _plain_description(text: str, winner: str) -> str:
|
|
24
|
+
"""Replace one complete, supported YAML description scalar."""
|
|
25
|
+
if not text.startswith("---\n") or "\n---" not in text:
|
|
26
|
+
raise ValueError("No YAML frontmatter found or no closing '---'")
|
|
27
|
+
end = text.index("\n---", 4)
|
|
28
|
+
lines = text[4:end].splitlines(keepends=True)
|
|
29
|
+
starts = [i for i, line in enumerate(lines) if line.startswith("description:")]
|
|
30
|
+
if len(starts) != 1:
|
|
31
|
+
raise ValueError("Expected exactly one description key")
|
|
32
|
+
i = starts[0]
|
|
33
|
+
scalar = lines[i].split(":", 1)[1].strip()
|
|
34
|
+
if not scalar or scalar.startswith(("[", "{", "&", "*")):
|
|
35
|
+
raise ValueError("Unsupported description scalar")
|
|
36
|
+
j = i + 1
|
|
37
|
+
while j < len(lines) and (not lines[j].strip() or lines[j].startswith((" ", "\t"))):
|
|
38
|
+
j += 1
|
|
39
|
+
if j > i + 1 and scalar not in ("|", "|-", "|+", ">", ">-", ">+"):
|
|
40
|
+
raise ValueError("Unsupported multiline description scalar")
|
|
41
|
+
while j > i + 1 and not lines[j - 1].strip():
|
|
42
|
+
j -= 1
|
|
43
|
+
replacement = "description: |-\n" + "".join(" " + line + "\n" for line in winner.split("\n"))
|
|
44
|
+
header = "".join(lines[:i]) + replacement + "".join(lines[j:])
|
|
45
|
+
return "---\n" + header.rstrip("\n") + text[end:]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def patch_skill_description(skill_md_path: Path, new_description: str) -> None:
|
|
49
|
+
"""Preserved plain YAML API; validate fully before the single write."""
|
|
50
|
+
text = skill_md_path.read_text(encoding="utf-8")
|
|
51
|
+
patched = _plain_description(text, new_description)
|
|
52
|
+
_atomic_bytes(skill_md_path, patched.encode(), stat.S_IMODE(skill_md_path.stat().st_mode))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _provider_description(text: str, winner: str, provider: str) -> str:
|
|
56
|
+
"""Bounded provider-header contract, not a general Jinja source parser."""
|
|
57
|
+
from mapify_cli.delivery.template_renderer import get_environment
|
|
58
|
+
from mapify_cli.skill_ir import parse_frontmatter
|
|
59
|
+
|
|
60
|
+
if not text.startswith("---\n") or "\n---\n" not in text:
|
|
61
|
+
raise ValueError("Unsupported description structure: missing frontmatter")
|
|
62
|
+
header, body = text[4:].split("\n---\n", 1)
|
|
63
|
+
for directive in re.findall(r"\[%.*?%\]", header, flags=re.DOTALL):
|
|
64
|
+
token = directive[2:-2].strip().strip("-").strip()
|
|
65
|
+
if token not in ("else", "endif") and not re.fullmatch(
|
|
66
|
+
r"if PROVIDER == ([\"'])(?:claude|codex)\1|set cmd = \"/\" if PROVIDER == \"claude\" else \"\$\"", token
|
|
67
|
+
):
|
|
68
|
+
raise ValueError(f"Unsupported description directive: {directive}")
|
|
69
|
+
if re.search(r"<%(?!\s*cmd\s*%>)|\[#", header):
|
|
70
|
+
raise ValueError("Unsupported description expression")
|
|
71
|
+
if any(t in winner for t in ("[%", "<%", "[#")) or not winner.strip():
|
|
72
|
+
raise ValueError("Unsupported winner description")
|
|
73
|
+
env = get_environment()
|
|
74
|
+
rendered = env.from_string("---\n" + header + "\n---\n").render(PROVIDER=provider)
|
|
75
|
+
parse_frontmatter(rendered.split("---", 2)[1])
|
|
76
|
+
patched = _plain_description(rendered, winner)
|
|
77
|
+
parsed = parse_frontmatter(patched.split("---", 2)[1])
|
|
78
|
+
if parsed.get("description") != winner:
|
|
79
|
+
raise ValueError("Unsupported description structure: winner did not round-trip")
|
|
80
|
+
opposite = "codex" if provider == "claude" else "claude"
|
|
81
|
+
original_other = env.from_string("---\n" + header + "\n---\n").render(PROVIDER=opposite)
|
|
82
|
+
# Independent provider descriptions have unambiguous scalar spans. Edit
|
|
83
|
+
# only the selected block, retaining every other source byte.
|
|
84
|
+
branches = list(re.finditer(r'\[% if PROVIDER == ([\"\'])(claude|codex)\1 %\]description:', header))
|
|
85
|
+
for branch in branches:
|
|
86
|
+
stop = header.find("[% endif", branch.end())
|
|
87
|
+
alternate = header.find("[% else %]description:", branch.end(), stop)
|
|
88
|
+
if alternate < 0:
|
|
89
|
+
continue
|
|
90
|
+
first = branch.end() - len("description:")
|
|
91
|
+
second = alternate + len("[% else %]")
|
|
92
|
+
start, limit = (first, alternate) if provider == branch.group(2) else (second, stop)
|
|
93
|
+
segment = header[start:limit]
|
|
94
|
+
patched_segment = _plain_description("---\n" + segment + "\n---\n", winner)[4:-5]
|
|
95
|
+
if segment.endswith("\n"):
|
|
96
|
+
patched_segment += "\n"
|
|
97
|
+
candidate_header = header[:start] + patched_segment + header[limit:]
|
|
98
|
+
result = "---\n" + candidate_header + "\n---\n" + body
|
|
99
|
+
if env.from_string("---\n" + candidate_header + "\n---\n").render(PROVIDER=opposite) != original_other:
|
|
100
|
+
raise ValueError("Unsupported conditional description whitespace")
|
|
101
|
+
return result
|
|
102
|
+
binding = '[% set cmd = "/" if PROVIDER == "claude" else "$" -%]'
|
|
103
|
+
combined = ("---\n" + binding + f'[% if PROVIDER == "{provider}" %]'
|
|
104
|
+
+ patched[4:-4] + "[% else %]" + original_other[4:-4] + "[% endif -%]\n---\n")
|
|
105
|
+
if env.from_string(combined).render(PROVIDER=opposite) != original_other:
|
|
106
|
+
raise ValueError("Unsupported description whitespace structure")
|
|
107
|
+
return combined + body
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _atomic_bytes(path: Path, data: bytes, mode: int) -> None:
|
|
111
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
112
|
+
fd, name = tempfile.mkstemp(prefix=".mapify-apply-", dir=path.parent)
|
|
113
|
+
try:
|
|
114
|
+
with os.fdopen(fd, "wb") as stream:
|
|
115
|
+
stream.write(data)
|
|
116
|
+
stream.flush()
|
|
117
|
+
os.fsync(stream.fileno())
|
|
118
|
+
os.chmod(name, mode)
|
|
119
|
+
os.replace(name, path)
|
|
120
|
+
directory_fd = os.open(path.parent, os.O_RDONLY)
|
|
121
|
+
try:
|
|
122
|
+
os.fsync(directory_fd)
|
|
123
|
+
finally:
|
|
124
|
+
os.close(directory_fd)
|
|
125
|
+
finally:
|
|
126
|
+
Path(name).unlink(missing_ok=True)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _recover_transaction(root: Path) -> None:
|
|
130
|
+
journal = root / ".map/skill-eval-apply-transaction"
|
|
131
|
+
manifest = journal / "manifest.json"
|
|
132
|
+
if any(p.is_symlink() for p in (journal, journal.parent, manifest)):
|
|
133
|
+
raise ValueError(f"Unsafe apply recovery journal: {journal}")
|
|
134
|
+
if not manifest.exists():
|
|
135
|
+
return
|
|
136
|
+
entries = json.loads(manifest.read_text(encoding="utf-8"))
|
|
137
|
+
if not (journal / "complete").exists():
|
|
138
|
+
for entry in entries:
|
|
139
|
+
target = root / entry["path"]
|
|
140
|
+
backup = journal / entry["backup"]
|
|
141
|
+
if (not target.resolve().is_relative_to(root.resolve())
|
|
142
|
+
or not backup.resolve().is_relative_to(journal.resolve())
|
|
143
|
+
or any(p.is_symlink() for p in (target, *target.parents, backup))):
|
|
144
|
+
raise ValueError(f"Unsafe recovery path in {manifest}")
|
|
145
|
+
if entry["exists"]:
|
|
146
|
+
_atomic_bytes(target, (journal / entry["backup"]).read_bytes(), entry["mode"])
|
|
147
|
+
else:
|
|
148
|
+
target.unlink(missing_ok=True)
|
|
149
|
+
shutil.rmtree(journal)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def _commit_transaction(root: Path, updates: dict[Path, bytes]) -> list[Path]:
|
|
153
|
+
journal = root / ".map/skill-eval-apply-transaction"
|
|
154
|
+
for path in updates:
|
|
155
|
+
if any(p.is_symlink() for p in (path, *path.parents) if p != root.parent):
|
|
156
|
+
raise ValueError(f"Refusing symlink output: {path}")
|
|
157
|
+
if journal.exists():
|
|
158
|
+
raise ValueError(f"Incomplete apply journal requires inspection: {journal}")
|
|
159
|
+
journal.mkdir(parents=True, exist_ok=False)
|
|
160
|
+
entries: list[_JournalEntry] = []
|
|
161
|
+
for i, (path, data) in enumerate(updates.items()):
|
|
162
|
+
exists = path.exists()
|
|
163
|
+
if exists and path.read_bytes() == data:
|
|
164
|
+
continue
|
|
165
|
+
mode = stat.S_IMODE(path.stat().st_mode) if exists else 0o644
|
|
166
|
+
entry: _JournalEntry = {"path": str(path.relative_to(root)), "exists": exists, "mode": mode, "backup": str(i)}
|
|
167
|
+
if exists:
|
|
168
|
+
_atomic_bytes(journal / str(i), path.read_bytes(), 0o600)
|
|
169
|
+
entries.append(entry)
|
|
170
|
+
_atomic_bytes(journal / "manifest.json", json.dumps(entries).encode(), 0o600)
|
|
171
|
+
fd = os.open(journal, os.O_RDONLY)
|
|
172
|
+
try:
|
|
173
|
+
os.fsync(fd)
|
|
174
|
+
finally:
|
|
175
|
+
os.close(fd)
|
|
176
|
+
try:
|
|
177
|
+
for entry in entries:
|
|
178
|
+
path = root / str(entry["path"])
|
|
179
|
+
_atomic_bytes(path, updates[path], int(entry["mode"]))
|
|
180
|
+
_atomic_bytes(journal / "complete", b"complete", 0o600)
|
|
181
|
+
except BaseException:
|
|
182
|
+
_recover_transaction(root)
|
|
183
|
+
raise
|
|
184
|
+
shutil.rmtree(journal)
|
|
185
|
+
return [root / str(entry["path"]) for entry in entries]
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def apply_optimized_description(
|
|
189
|
+
*, skill: str, winner: str, current_description: str, no_improvement: bool,
|
|
190
|
+
repo_root: Path, stage: bool = True, provider: str = "claude",
|
|
191
|
+
) -> str:
|
|
192
|
+
"""Serialize recovery/promotion across processes using the installer barrier."""
|
|
193
|
+
if no_improvement:
|
|
194
|
+
print("No improvement found: current description already optimal on held-out test")
|
|
195
|
+
return "no_improvement"
|
|
196
|
+
if winner == current_description:
|
|
197
|
+
print("Winner identical to current description; no file changes")
|
|
198
|
+
return "identical"
|
|
199
|
+
from mapify_cli.update_state import installer_process_lock
|
|
200
|
+
|
|
201
|
+
repo_root = repo_root.resolve()
|
|
202
|
+
with installer_process_lock(repo_root, timeout_s=30):
|
|
203
|
+
return _apply_optimized_description(
|
|
204
|
+
skill=skill, winner=winner, current_description=current_description,
|
|
205
|
+
no_improvement=no_improvement, repo_root=repo_root, stage=stage, provider=provider,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _apply_optimized_description(
|
|
210
|
+
*, skill: str, winner: str, current_description: str, no_improvement: bool,
|
|
211
|
+
repo_root: Path, stage: bool = True, provider: str = "claude",
|
|
212
|
+
) -> str:
|
|
213
|
+
"""Render in isolation, then transactionally promote only selected skill files."""
|
|
214
|
+
if no_improvement:
|
|
215
|
+
print("No improvement found: current description already optimal on held-out test")
|
|
216
|
+
return "no_improvement"
|
|
217
|
+
if winner == current_description:
|
|
218
|
+
print("Winner identical to current description; no file changes")
|
|
219
|
+
return "identical"
|
|
220
|
+
if provider not in ("claude", "codex"):
|
|
221
|
+
raise ValueError(f"Unsupported provider: {provider}")
|
|
222
|
+
source_root = (repo_root / "src/mapify_cli/templates_src").resolve()
|
|
223
|
+
jinja = source_root / "skills" / skill / "SKILL.md.jinja"
|
|
224
|
+
if not jinja.resolve().is_relative_to(source_root) or ".git" in jinja.resolve().parts:
|
|
225
|
+
raise ValueError(f"Path safety violation outside templates_src or under .git: {jinja}")
|
|
226
|
+
_recover_transaction(repo_root)
|
|
227
|
+
original = jinja.read_text(encoding="utf-8")
|
|
228
|
+
candidate = _provider_description(original, winner, provider)
|
|
229
|
+
from mapify_cli.delivery.template_renderer import get_environment, render_repo_trees
|
|
230
|
+
|
|
231
|
+
with tempfile.TemporaryDirectory(prefix="mapify-apply-") as tmp:
|
|
232
|
+
sandbox = Path(tmp)
|
|
233
|
+
source = sandbox / "src/mapify_cli/templates_src"
|
|
234
|
+
shutil.copytree(source_root, source)
|
|
235
|
+
target = source / jinja.relative_to(source_root)
|
|
236
|
+
target.write_text(candidate, encoding="utf-8")
|
|
237
|
+
env = get_environment(source)
|
|
238
|
+
name = jinja.relative_to(source_root).as_posix()
|
|
239
|
+
opposite = "codex" if provider == "claude" else "claude"
|
|
240
|
+
before_env = get_environment(source_root)
|
|
241
|
+
if env.get_template(name).render(PROVIDER=opposite) != before_env.get_template(name).render(PROVIDER=opposite):
|
|
242
|
+
raise ValueError("Unsupported description structure: opposite provider changed")
|
|
243
|
+
from mapify_cli.skill_ir import parse_frontmatter
|
|
244
|
+
|
|
245
|
+
selected = env.get_template(name).render(PROVIDER=provider)
|
|
246
|
+
if parse_frontmatter(selected.split("---", 2)[1]).get("description") != winner:
|
|
247
|
+
raise ValueError("Unsupported description structure: selected winner mismatch")
|
|
248
|
+
for runtime in ("claude", "codex"):
|
|
249
|
+
render_repo_trees(runtime, repo_root=sandbox, templates_src_root=source)
|
|
250
|
+
roots = (".claude/skills", "src/mapify_cli/templates/skills") if provider == "claude" else (
|
|
251
|
+
".agents/skills", "src/mapify_cli/templates/codex/skills"
|
|
252
|
+
)
|
|
253
|
+
updates = {jinja: target.read_bytes()}
|
|
254
|
+
for root in roots:
|
|
255
|
+
rel = Path(root) / skill / "SKILL.md"
|
|
256
|
+
rendered_bytes = (sandbox / rel).read_bytes()
|
|
257
|
+
generated_text = rendered_bytes.decode()
|
|
258
|
+
if parse_frontmatter(generated_text.split("---", 2)[1]).get("description") != winner:
|
|
259
|
+
raise ValueError("Unsupported provider source: generated winner differs from common source")
|
|
260
|
+
provider_template = ("codex/" if provider == "codex" else "") + name
|
|
261
|
+
baseline = before_env.get_template(provider_template).render(PROVIDER=provider)
|
|
262
|
+
destination = repo_root / rel
|
|
263
|
+
if destination.exists() and destination.read_bytes() != baseline.encode():
|
|
264
|
+
raise ValueError(f"Refusing modified or stale generated skill: {destination}; preserve your edits and render explicitly first")
|
|
265
|
+
if _plain_description(baseline, winner) != generated_text:
|
|
266
|
+
raise ValueError("Unsupported provider source: non-description generated content changed")
|
|
267
|
+
updates[repo_root / rel] = rendered_bytes
|
|
268
|
+
changed = _commit_transaction(repo_root, updates)
|
|
269
|
+
if stage and changed:
|
|
270
|
+
result = subprocess.run(
|
|
271
|
+
["git", "add", "--", *(str(p.relative_to(repo_root)) for p in changed)],
|
|
272
|
+
cwd=repo_root, capture_output=True, text=True, check=False,
|
|
273
|
+
)
|
|
274
|
+
if result.returncode:
|
|
275
|
+
print(f"Warning: 'git add' failed (exit {result.returncode}): {result.stderr.strip()}")
|
|
276
|
+
print(f"Applied new description for '{skill}'. Note: skill-rules.json description is NOT auto-patched")
|
|
277
|
+
return "applied"
|
|
@@ -40,6 +40,27 @@ You are a **validation agent**, NOT a code editor. Your role:
|
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
43
|
+
## Review context (MANDATORY)
|
|
44
|
+
|
|
45
|
+
- **Actor subtask validation:** When dispatched to validate an Actor subtask,
|
|
46
|
+
enforce its AAG contract and mutation boundary below. Missing or invalid
|
|
47
|
+
blueprint/subtask metadata is a blocking setup error, not a standalone review.
|
|
48
|
+
- **Standalone /map-review:** When dispatched to review a diff/PR using a review
|
|
49
|
+
bundle rather than validate an Actor subtask, assess correctness, security,
|
|
50
|
+
tests, regressions, and any supplied requirements against that diff.
|
|
51
|
+
Do not require an Actor AAG contract, blueprint, or subtask ID, and do not run
|
|
52
|
+
the Actor mutation-boundary command. Missing planning artifacts are context
|
|
53
|
+
limitations, not defects in the reviewed PR. Continue all applicable build,
|
|
54
|
+
test, and quality gates; report concrete defects with source evidence.
|
|
55
|
+
- Never infer standalone review from a missing blueprint. An explicit Actor
|
|
56
|
+
subtask validation assignment takes precedence over generic review wording.
|
|
57
|
+
If the assignment is ambiguous, ask the parent to clarify before a verdict.
|
|
58
|
+
Do not create a synthetic blueprint or reset/migrate workflow state to review.
|
|
59
|
+
|
|
60
|
+
The Actor-specific sequence and rejection rules below (AAG, allowed scope,
|
|
61
|
+
subtask metadata) apply only to Actor subtask validation, not standalone review.
|
|
62
|
+
|
|
63
|
+
|
|
43
64
|
<Monitor_Contract_Verification_v2_9>
|
|
44
65
|
|
|
45
66
|
## Contract-Based Verification Protocol
|
|
@@ -31,6 +31,27 @@ Your output: JSON with valid: true|false and issues[] array.
|
|
|
31
31
|
|
|
32
32
|
---
|
|
33
33
|
|
|
34
|
+
## Review context (MANDATORY)
|
|
35
|
+
|
|
36
|
+
- **Actor subtask validation:** When dispatched to validate an Actor subtask,
|
|
37
|
+
enforce its AAG contract and mutation boundary below. Missing or invalid
|
|
38
|
+
blueprint/subtask metadata is a blocking setup error, not a standalone review.
|
|
39
|
+
- **Standalone /map-review:** When dispatched to review a diff/PR using a review
|
|
40
|
+
bundle rather than validate an Actor subtask, assess correctness, security,
|
|
41
|
+
tests, regressions, and any supplied requirements against that diff.
|
|
42
|
+
Do not require an Actor AAG contract, blueprint, or subtask ID, and do not run
|
|
43
|
+
the Actor mutation-boundary command. Missing planning artifacts are context
|
|
44
|
+
limitations, not defects in the reviewed PR. Continue all applicable build,
|
|
45
|
+
test, and quality gates; report concrete defects with source evidence.
|
|
46
|
+
- Never infer standalone review from a missing blueprint. An explicit Actor
|
|
47
|
+
subtask validation assignment takes precedence over generic review wording.
|
|
48
|
+
If the assignment is ambiguous, ask the parent to clarify before a verdict.
|
|
49
|
+
Do not create a synthetic blueprint or reset/migrate workflow state to review.
|
|
50
|
+
|
|
51
|
+
The Actor-specific sequence and rejection rules below (AAG, allowed scope,
|
|
52
|
+
subtask metadata) apply only to Actor subtask validation, not standalone review.
|
|
53
|
+
|
|
54
|
+
|
|
34
55
|
# Contract-Based Verification Protocol
|
|
35
56
|
|
|
36
57
|
Primary Mission: Verify that Actor's implementation exactly matches the AAG contract
|
|
@@ -52,8 +73,19 @@ Verification sequence (execute in order):
|
|
|
52
73
|
|
|
53
74
|
3. Verify Goal is achieved -- trace code path to confirm the stated outcome
|
|
54
75
|
4. Verify Action is implemented -- check that the specified method/operation exists
|
|
55
|
-
5. Verify
|
|
56
|
-
|
|
76
|
+
5. Verify mutation boundary (MANDATORY): Run
|
|
77
|
+
python3 .map/scripts/map_step_runner.py validate_mutation_boundary <branch> <subtask_id>
|
|
78
|
+
to compare the actual git diff against the subtask's declared affected_files.
|
|
79
|
+
- status="clean" -> continue.
|
|
80
|
+
- status="warning" -> record the unexpected files; do NOT auto-reject.
|
|
81
|
+
The CLI also appends to .map/<branch>/scope-violations.log for audit.
|
|
82
|
+
- status="violation" (MAP_STRICT_SCOPE=1) -> valid: false with the unexpected
|
|
83
|
+
list. The Actor must re-scope.
|
|
84
|
+
- status="error" (missing blueprint, unknown subtask, git failure, not a git
|
|
85
|
+
repo) -> valid: false with the returned message. The CLI exits non-zero;
|
|
86
|
+
repair the setup before re-running Monitor. Never silently skip this gate.
|
|
87
|
+
6. Verify scope -- confirm changes stay within Actor's allowed_scope
|
|
88
|
+
7. Run quality gates below
|
|
57
89
|
|
|
58
90
|
Deterministic REJECT rule:
|
|
59
91
|
If implementation deviates from the AAG contract -> valid: false -- regardless of how
|
|
@@ -65,7 +65,7 @@ import re, sys
|
|
|
65
65
|
key, default = sys.argv[1], sys.argv[2]
|
|
66
66
|
try:
|
|
67
67
|
text = open('.map/config.yaml', encoding='utf-8').read()
|
|
68
|
-
m = re.search(r'
|
|
68
|
+
m = re.search(r'^[ \t]*' + re.escape(key) + r'[ \t]*:[ \t]*(\S+)', text, re.MULTILINE)
|
|
69
69
|
print(m.group(1).strip() if m else default)
|
|
70
70
|
except Exception:
|
|
71
71
|
print(default)
|
|
@@ -281,12 +281,20 @@ if command -v go &>/dev/null && [[ -f "go.mod" ]]; then
|
|
|
281
281
|
# developed on macOS (e.g. projects using cgroups/eBPF/netlink).
|
|
282
282
|
# Example config: checks.go.goos: linux
|
|
283
283
|
_go_goos="${GOOS:-$(_read_map_config_value 'checks.go.goos' '')}"
|
|
284
|
+
# Optional comma-separated build tags; keep the entire value
|
|
285
|
+
# in one argv entry, never evaluate it as shell syntax.
|
|
286
|
+
_go_tags=$(_read_map_config_value 'checks.go.tags' '')
|
|
287
|
+
_go_build_args=(build)
|
|
288
|
+
if [[ -n "$_go_tags" ]]; then
|
|
289
|
+
_go_build_args+=(-tags "$_go_tags")
|
|
290
|
+
fi
|
|
291
|
+
_go_build_args+=(-o /dev/null ./...)
|
|
284
292
|
_go_build_ok=true
|
|
285
293
|
if [[ -n "$_go_goos" ]]; then
|
|
286
|
-
GOOS="$_go_goos" go
|
|
294
|
+
GOOS="$_go_goos" go "${_go_build_args[@]}" 2>/dev/null \
|
|
287
295
|
|| _go_build_ok=false
|
|
288
296
|
else
|
|
289
|
-
go
|
|
297
|
+
go "${_go_build_args[@]}" 2>/dev/null || _go_build_ok=false
|
|
290
298
|
fi
|
|
291
299
|
if [[ "$_go_build_ok" == "false" ]]; then
|
|
292
300
|
add_critical "Go build errors detected (run 'go build ./...' for details)"
|
{mapify_cli-3.32.0 → mapify_cli-3.33.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py
RENAMED
|
@@ -486,6 +486,77 @@ def get_branch_name() -> str:
|
|
|
486
486
|
return "default"
|
|
487
487
|
|
|
488
488
|
|
|
489
|
+
def _has_active_interruption(branch: str) -> bool:
|
|
490
|
+
"""The parent marker suspends writes; only the engine validates its journal."""
|
|
491
|
+
try:
|
|
492
|
+
state = json.loads(
|
|
493
|
+
(PROJECT_DIR / ".map" / branch / "step_state.json").read_text(encoding="utf-8")
|
|
494
|
+
)
|
|
495
|
+
except (OSError, UnicodeError, json.JSONDecodeError):
|
|
496
|
+
state = None # Ordinary corrupt state remains fail-open without repair evidence.
|
|
497
|
+
if isinstance(state, dict) and state.get("active_interruption") is not None:
|
|
498
|
+
return True
|
|
499
|
+
# Intent: durable repair intent still protects the parent after state corruption.
|
|
500
|
+
try:
|
|
501
|
+
for journal in (PROJECT_DIR / ".git/map-repairs").glob("repair-*/journal.json"):
|
|
502
|
+
if not re.fullmatch(r"repair-[0-9a-f]{24}", journal.parent.name):
|
|
503
|
+
continue
|
|
504
|
+
record = json.loads(journal.read_text(encoding="utf-8"))
|
|
505
|
+
if not isinstance(record, dict) or not all(
|
|
506
|
+
isinstance(record.get(key), str) and record[key] for key in ("branch", "stage")
|
|
507
|
+
):
|
|
508
|
+
return True
|
|
509
|
+
if record.get("branch") == branch and record.get("stage") != "done":
|
|
510
|
+
return True
|
|
511
|
+
except (OSError, UnicodeError, json.JSONDecodeError):
|
|
512
|
+
return True
|
|
513
|
+
return False
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def _interruption_allows_bash(command: str) -> bool:
|
|
517
|
+
"""Accept explicit inspection/checks or the canonical runner, not a prefix."""
|
|
518
|
+
# Intent: opaque expansion and compound shell commands cannot prove read-only intent.
|
|
519
|
+
if _bash_write_targets(command) or any(character in command for character in "$`\n\r"):
|
|
520
|
+
return False
|
|
521
|
+
try:
|
|
522
|
+
lexer = shlex.shlex(command, posix=True, punctuation_chars=";&|<>()")
|
|
523
|
+
lexer.whitespace_split = True
|
|
524
|
+
lexer.commenters = ""
|
|
525
|
+
tokens = list(lexer)
|
|
526
|
+
except ValueError:
|
|
527
|
+
return False
|
|
528
|
+
if not tokens or any(token and all(character in ";&|<>()" for character in token)
|
|
529
|
+
for token in tokens):
|
|
530
|
+
return False
|
|
531
|
+
executable, args = tokens[0], tokens[1:]
|
|
532
|
+
if executable in {"python", "python3"}:
|
|
533
|
+
if not args:
|
|
534
|
+
return False
|
|
535
|
+
script = args[0]
|
|
536
|
+
for name in ("map_step_runner.py", "map_orchestrator.py"):
|
|
537
|
+
canonical = Path(".map/scripts") / name
|
|
538
|
+
if script in {str(canonical), str(PROJECT_DIR / canonical)}:
|
|
539
|
+
return len(args) > 1 and args[1] in {
|
|
540
|
+
"begin_repair", "verify_repair", "finish_repair", "repair_status",
|
|
541
|
+
"get_interruption_status",
|
|
542
|
+
}
|
|
543
|
+
return False
|
|
544
|
+
if executable == "git":
|
|
545
|
+
if not args:
|
|
546
|
+
return False
|
|
547
|
+
if args[0] in {"status", "rev-parse", "ls-files"}:
|
|
548
|
+
return not any(arg.startswith("--output") for arg in args)
|
|
549
|
+
if args == ["branch", "--show-current"]:
|
|
550
|
+
return True
|
|
551
|
+
if args[:2] == ["--no-pager", "diff"]:
|
|
552
|
+
options = args[:args.index("--")] if "--" in args else args
|
|
553
|
+
return {"--no-ext-diff", "--no-textconv"}.issubset(options) and not any(
|
|
554
|
+
arg.startswith(("--output", "--ext-diff", "--textconv")) for arg in args
|
|
555
|
+
)
|
|
556
|
+
return False
|
|
557
|
+
return executable in {"cat", "ls", "pwd", "grep", "head", "tail", "wc", "true"}
|
|
558
|
+
|
|
559
|
+
|
|
489
560
|
def _current_phase_is_research(branch: str) -> bool:
|
|
490
561
|
"""Return True iff step_state's current phase is RESEARCH (2.2)."""
|
|
491
562
|
step_file = PROJECT_DIR / ".map" / branch / "step_state.json"
|
|
@@ -866,13 +937,23 @@ def main() -> None:
|
|
|
866
937
|
allow()
|
|
867
938
|
|
|
868
939
|
target_paths = extract_target_file_paths(tool_call)
|
|
940
|
+
branch = get_branch_name()
|
|
941
|
+
interrupted = _has_active_interruption(branch)
|
|
942
|
+
if interrupted:
|
|
943
|
+
if tool_name == "Bash":
|
|
944
|
+
tool_input = tool_call.get("tool_input") or {}
|
|
945
|
+
command = tool_input.get("command") if isinstance(tool_input, dict) else None
|
|
946
|
+
if isinstance(command, str) and _interruption_allows_bash(command):
|
|
947
|
+
allow()
|
|
948
|
+
deny("Workflow suspended for blocker repair: main-checkout Bash writes are denied.")
|
|
949
|
+
if not target_paths or any(not is_exempt_path(p) for p in target_paths):
|
|
950
|
+
deny("Workflow suspended for blocker repair: edit application files in the private checkout.")
|
|
869
951
|
# Opaque Bash (no extractable write target) is not gated — parity with
|
|
870
952
|
# the Claude twin and the known #164 limitation. Denying it fail-closed
|
|
871
953
|
# would also deny the orchestrator's own `VAR=$(...)` captures.
|
|
872
954
|
if tool_name == "Bash" and not target_paths:
|
|
873
955
|
allow()
|
|
874
956
|
|
|
875
|
-
branch = get_branch_name()
|
|
876
957
|
phase_allowed, phase_error = is_editing_phase(branch) # one state read
|
|
877
958
|
if (
|
|
878
959
|
tool_name == "Bash"
|
|
@@ -895,7 +976,7 @@ def main() -> None:
|
|
|
895
976
|
# protected path alongside ordinary ones) denies as a whole — fail
|
|
896
977
|
# closed on any protected target.
|
|
897
978
|
tamper_paths = [p for p in target_paths if is_state_tamper_path(p)]
|
|
898
|
-
if tamper_paths and _is_workflow_active(branch):
|
|
979
|
+
if tamper_paths and (interrupted or _is_workflow_active(branch)):
|
|
899
980
|
attempted = tamper_paths[0]
|
|
900
981
|
try:
|
|
901
982
|
attempted = _to_repo_relative(tamper_paths[0]) or tamper_paths[0]
|