mapify-cli 3.11.0__tar.gz → 3.12.1__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.11.0 → mapify_cli-3.12.1}/PKG-INFO +1 -1
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/pyproject.toml +1 -1
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/__init__.py +95 -101
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/managed_file_copier.py +38 -38
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_managed_file_copier.py +23 -13
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_mapify_cli.py +145 -38
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/.claude/hooks/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/.claude/skills/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/.gitignore +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/_locking.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/cli_ui.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/config/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/config/mcp.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/config/project_config.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/config/settings.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/agent_generator.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/codex_copier.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/file_copier.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/providers.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/delivery/template_renderer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/dependency_graph.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/intent_detector.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/memory/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/memory/capture.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/memory/digest_schema.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/memory/finalize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/memory/recall.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/ralph_state.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/repo_insight.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/schemas.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skill_ir.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/aggregator.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/assertions.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/proposer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/runner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/skills_eval/viewer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/.gitignore +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/CLAUDE.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/actor.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/debate-arbiter.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/evaluator.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/monitor.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/predictor.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/reflector.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/research-agent.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/synthesizer.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/config.toml +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/hooks.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/safety-guardrails.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/hooks/workflow-gate.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/map_step_runner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/host-paths.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/rules/learned/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/settings.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates/workflow-rules.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/token_budget.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/tools/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/tools/validate_dependencies.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/verification_recorder.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/workflow_finalizer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/workflow_logger.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/src/mapify_cli/workflow_state.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/conftest.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/fixtures/claude/escalation-matrix.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/fixtures/codex/config.toml +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/hooks/test_detect_clarification_triggers.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/hooks/test_end_of_turn.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/hooks/test_hook_inventory_smoke.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/hooks/test_safety_guardrails.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/code_review.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/plan_handoff.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/spec.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/step_state_initialized.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/task_plan.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/fixtures/verification_summary.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/test_e2e_artifact_contracts.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/integration/test_e2e_claude_sdk.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/README.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_agent_cli_correctness.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_agent_frontmatter.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_artifact_schemas.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_decomposition.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_dependency_graph.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_diagnostics.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_digest_schema.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_file_copier.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_hook_patterns.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_init_import_graph.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_intent_detector.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_inv1_no_anthropic_optimize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_jinja2_dep.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_locking.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_map_orchestrator.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_map_step_runner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_map_token_meter.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_map_utils_sanitize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_memory_capture.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_memory_finalize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_memory_integration.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_memory_recall.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_memory_review_fixes.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_post_compact_context.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_ralph_hooks.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_ralph_state.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_repo_insight.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_schemas.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skill_ir.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_consistency.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_aggregator.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_apply.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_cli_optimize.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_dispatcher_env.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_fixtures.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_optimizer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_optimizer_isolation.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_proposer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_runner.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_schema.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_skills_eval_viewer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_sofa_client.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_sofa_search.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_template_render.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_token_budget.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_validate_dependencies.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_validate_spec_citations.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_verification_recorder.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_workflow_context_injector.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_workflow_finalizer.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_workflow_gate.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_workflow_logger.py +0 -0
- {mapify_cli-3.11.0 → mapify_cli-3.12.1}/tests/test_workflow_state.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mapify-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.12.1
|
|
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
|
|
@@ -23,7 +23,7 @@ Or install globally:
|
|
|
23
23
|
mapify check
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
__version__ = "3.
|
|
26
|
+
__version__ = "3.12.1"
|
|
27
27
|
|
|
28
28
|
import os
|
|
29
29
|
import subprocess
|
|
@@ -70,12 +70,12 @@ from mapify_cli.delivery import (
|
|
|
70
70
|
create_evaluator_content as create_evaluator_content,
|
|
71
71
|
create_reflector_content as create_reflector_content,
|
|
72
72
|
create_documentation_reviewer_content as create_documentation_reviewer_content,
|
|
73
|
-
create_agent_files,
|
|
74
|
-
create_reference_files,
|
|
75
|
-
create_command_files,
|
|
76
|
-
create_skill_files,
|
|
77
|
-
create_hook_files,
|
|
78
|
-
create_config_files,
|
|
73
|
+
create_agent_files as create_agent_files,
|
|
74
|
+
create_reference_files as create_reference_files,
|
|
75
|
+
create_command_files as create_command_files,
|
|
76
|
+
create_skill_files as create_skill_files,
|
|
77
|
+
create_hook_files as create_hook_files,
|
|
78
|
+
create_config_files as create_config_files,
|
|
79
79
|
create_commands_dir as create_commands_dir,
|
|
80
80
|
)
|
|
81
81
|
from mapify_cli.config import (
|
|
@@ -1259,32 +1259,62 @@ def doctor(debug: bool = typer.Option(False, "--debug", help="Enable debug loggi
|
|
|
1259
1259
|
console.print(f" • {path_name}")
|
|
1260
1260
|
|
|
1261
1261
|
|
|
1262
|
+
def _mapify_install_kind() -> str:
|
|
1263
|
+
"""Classify how this mapify CLI is installed.
|
|
1264
|
+
|
|
1265
|
+
Returns one of:
|
|
1266
|
+
- ``"uv-tool"``: installed via ``uv tool install`` (self-upgradeable with uv)
|
|
1267
|
+
- ``"pip"``: installed into a regular/virtualenv site-packages (pip -U)
|
|
1268
|
+
- ``"source"``: running from a source checkout / editable install
|
|
1269
|
+
(self-upgrade disabled — the user owns the tree)
|
|
1270
|
+
"""
|
|
1271
|
+
pkg = str(Path(__file__).resolve()).replace("\\", "/")
|
|
1272
|
+
if "/uv/tools/" in pkg:
|
|
1273
|
+
return "uv-tool"
|
|
1274
|
+
if "/site-packages/" in pkg or "/dist-packages/" in pkg:
|
|
1275
|
+
return "pip"
|
|
1276
|
+
return "source"
|
|
1277
|
+
|
|
1278
|
+
|
|
1279
|
+
def _self_upgrade_command(kind: str) -> Optional[List[str]]:
|
|
1280
|
+
"""Return the argv that upgrades mapify-cli for ``kind``, or None if unknown."""
|
|
1281
|
+
if kind == "uv-tool":
|
|
1282
|
+
uv = shutil.which("uv")
|
|
1283
|
+
return [uv, "tool", "upgrade", "mapify-cli"] if uv else None
|
|
1284
|
+
if kind == "pip":
|
|
1285
|
+
return [sys.executable, "-m", "pip", "install", "--upgrade", "mapify-cli"]
|
|
1286
|
+
return None
|
|
1287
|
+
|
|
1288
|
+
|
|
1289
|
+
def _run_self_upgrade(cmd: List[str]) -> int:
|
|
1290
|
+
"""Run the self-upgrade command, streaming its output. Returns the exit code.
|
|
1291
|
+
|
|
1292
|
+
Returns ``127`` when the executable is not found. Isolated into its own
|
|
1293
|
+
function so tests can stub the subprocess invocation without patching the
|
|
1294
|
+
module-level ``subprocess`` used by many other commands.
|
|
1295
|
+
"""
|
|
1296
|
+
try:
|
|
1297
|
+
return subprocess.run(cmd, check=False).returncode
|
|
1298
|
+
except FileNotFoundError:
|
|
1299
|
+
return 127
|
|
1300
|
+
|
|
1301
|
+
|
|
1262
1302
|
@app.command()
|
|
1263
1303
|
def upgrade():
|
|
1264
|
-
"""Upgrade
|
|
1265
|
-
show_banner()
|
|
1266
|
-
project_path = Path.cwd()
|
|
1267
|
-
|
|
1268
|
-
if not is_map_initialized(project_path):
|
|
1269
|
-
console.print(
|
|
1270
|
-
"[yellow]MAP Framework not initialized in this directory.[/yellow]"
|
|
1271
|
-
)
|
|
1272
|
-
console.print("Run: [cyan]mapify init .[/cyan]")
|
|
1273
|
-
raise typer.Exit(0)
|
|
1304
|
+
"""Upgrade the mapify CLI itself to the latest released version.
|
|
1274
1305
|
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
raise typer.Exit(0)
|
|
1306
|
+
This refreshes the installed ``mapify-cli`` package (the tool), not the
|
|
1307
|
+
files inside a project. After upgrading, run ``mapify init . --force`` to
|
|
1308
|
+
refresh a project's shipped MAP files with the new templates.
|
|
1309
|
+
"""
|
|
1310
|
+
show_banner()
|
|
1281
1311
|
|
|
1282
|
-
console.print("[cyan]Checking for
|
|
1312
|
+
console.print("[cyan]Checking for the latest release...[/cyan]")
|
|
1283
1313
|
latest_release = get_latest_release("azalio", "map-framework")
|
|
1284
|
-
latest_version = None
|
|
1314
|
+
latest_version: Optional[str] = None
|
|
1285
1315
|
|
|
1286
1316
|
if latest_release and latest_release.get("tag_name"):
|
|
1287
|
-
latest_version = latest_release["tag_name"].lstrip("v")
|
|
1317
|
+
latest_version = str(latest_release["tag_name"]).lstrip("v")
|
|
1288
1318
|
if parse_version(latest_version) > parse_version(__version__):
|
|
1289
1319
|
console.print(
|
|
1290
1320
|
f"[yellow]New version available:[/yellow] {latest_version} "
|
|
@@ -1294,97 +1324,61 @@ def upgrade():
|
|
|
1294
1324
|
console.print(f"Release: [cyan]{latest_release['html_url']}[/cyan]")
|
|
1295
1325
|
else:
|
|
1296
1326
|
console.print(
|
|
1297
|
-
f"[green]
|
|
1327
|
+
f"[green]Already on the latest release ({__version__}).[/green]"
|
|
1298
1328
|
)
|
|
1329
|
+
console.print("[dim]Nothing to upgrade.[/dim]")
|
|
1330
|
+
raise typer.Exit(0)
|
|
1299
1331
|
else:
|
|
1300
1332
|
console.print(
|
|
1301
|
-
"[dim]Could not fetch release metadata;
|
|
1333
|
+
"[dim]Could not fetch release metadata; attempting upgrade anyway.[/dim]"
|
|
1302
1334
|
)
|
|
1303
1335
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
# Track drift across all file types
|
|
1307
|
-
from mapify_cli.delivery.managed_file_copier import DriftReport
|
|
1308
|
-
|
|
1309
|
-
drift_report = DriftReport()
|
|
1336
|
+
kind = _mapify_install_kind()
|
|
1310
1337
|
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
tracker.start("commands")
|
|
1323
|
-
command_count = create_command_files(project_path, drift_report)
|
|
1324
|
-
tracker.complete("commands", f"{command_count} files")
|
|
1325
|
-
|
|
1326
|
-
tracker.add("skills", "Refresh skills")
|
|
1327
|
-
tracker.start("skills")
|
|
1328
|
-
skill_count = create_skill_files(project_path)
|
|
1329
|
-
tracker.complete("skills", f"{skill_count} folders")
|
|
1330
|
-
|
|
1331
|
-
tracker.add("references", "Refresh reference files")
|
|
1332
|
-
tracker.start("references")
|
|
1333
|
-
ref_count = create_reference_files(project_path, drift_report)
|
|
1334
|
-
tracker.complete("references", f"{ref_count} files")
|
|
1335
|
-
|
|
1336
|
-
tracker.add("hooks", "Refresh shared hooks")
|
|
1337
|
-
tracker.start("hooks")
|
|
1338
|
-
hook_count = create_hook_files(project_path, drift_report)
|
|
1339
|
-
tracker.complete("hooks", f"{hook_count} files")
|
|
1340
|
-
|
|
1341
|
-
tracker.add("configs", "Refresh config files")
|
|
1342
|
-
tracker.start("configs")
|
|
1343
|
-
config_count = create_config_files(project_path, drift_report)
|
|
1344
|
-
tracker.complete("configs", f"{config_count} files")
|
|
1345
|
-
|
|
1346
|
-
tracker.add("permissions", "Merge local approvals")
|
|
1347
|
-
tracker.start("permissions")
|
|
1348
|
-
create_or_merge_project_settings_local(project_path)
|
|
1349
|
-
tracker.complete("permissions", "settings.local.json updated")
|
|
1338
|
+
if kind == "source":
|
|
1339
|
+
source_root = Path(__file__).resolve().parents[2]
|
|
1340
|
+
console.print(
|
|
1341
|
+
"[yellow]Running from a source checkout — self-upgrade is disabled.[/yellow]"
|
|
1342
|
+
)
|
|
1343
|
+
console.print(f"[dim]Source: {source_root}[/dim]")
|
|
1344
|
+
console.print(
|
|
1345
|
+
"[dim]Update with [cyan]git pull[/cyan] "
|
|
1346
|
+
"(then re-install the tool if needed).[/dim]"
|
|
1347
|
+
)
|
|
1348
|
+
raise typer.Exit(0)
|
|
1350
1349
|
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1350
|
+
cmd = _self_upgrade_command(kind)
|
|
1351
|
+
if cmd is None:
|
|
1352
|
+
console.print(
|
|
1353
|
+
"[red]Could not determine how to upgrade mapify automatically.[/red]"
|
|
1354
|
+
)
|
|
1355
|
+
console.print(
|
|
1356
|
+
"Upgrade manually: [cyan]uv tool upgrade mapify-cli[/cyan] "
|
|
1357
|
+
"or [cyan]pip install --upgrade mapify-cli[/cyan]"
|
|
1358
|
+
)
|
|
1359
|
+
raise typer.Exit(1)
|
|
1356
1360
|
|
|
1357
1361
|
console.print()
|
|
1358
|
-
console.print(
|
|
1362
|
+
console.print(f"[cyan]Upgrading mapify-cli...[/cyan] [dim]({' '.join(cmd)})[/dim]")
|
|
1363
|
+
exit_code = _run_self_upgrade(cmd)
|
|
1359
1364
|
|
|
1360
|
-
|
|
1361
|
-
if drift_report.has_drift:
|
|
1365
|
+
if exit_code != 0:
|
|
1362
1366
|
console.print()
|
|
1363
1367
|
console.print(
|
|
1364
|
-
f"[
|
|
1365
|
-
)
|
|
1366
|
-
for r in drift_report.drifted_files:
|
|
1367
|
-
try:
|
|
1368
|
-
rel = r.dest.relative_to(project_path)
|
|
1369
|
-
except ValueError:
|
|
1370
|
-
rel = r.dest
|
|
1371
|
-
backup_note = ""
|
|
1372
|
-
if r.backed_up and r.backup_path:
|
|
1373
|
-
try:
|
|
1374
|
-
backup_rel = r.backup_path.relative_to(project_path)
|
|
1375
|
-
except ValueError:
|
|
1376
|
-
backup_rel = r.backup_path
|
|
1377
|
-
backup_note = f" → backup: [cyan]{backup_rel}[/cyan]"
|
|
1378
|
-
console.print(f" [yellow]•[/yellow] {rel}{backup_note}")
|
|
1379
|
-
console.print(
|
|
1380
|
-
"[dim]Your changes were backed up to .bak files. "
|
|
1381
|
-
"Review and re-apply any customizations if needed.[/dim]"
|
|
1368
|
+
f"[red]Upgrade command failed (exit {exit_code}).[/red] Run it manually:"
|
|
1382
1369
|
)
|
|
1370
|
+
console.print(f" [cyan]{' '.join(cmd)}[/cyan]")
|
|
1371
|
+
raise typer.Exit(1)
|
|
1383
1372
|
|
|
1373
|
+
target = latest_version or "the latest release"
|
|
1384
1374
|
console.print()
|
|
1385
|
-
console.print("[bold green]Upgrade complete.[/bold green]")
|
|
1386
1375
|
console.print(
|
|
1387
|
-
"[
|
|
1376
|
+
f"[bold green]mapify upgraded[/bold green] (was {__version__}, now {target})."
|
|
1377
|
+
)
|
|
1378
|
+
console.print("[dim]Confirm with [cyan]mapify --version[/cyan].[/dim]")
|
|
1379
|
+
console.print(
|
|
1380
|
+
"[dim]To refresh this project's MAP files with the new templates, run "
|
|
1381
|
+
"[cyan]mapify init . --force[/cyan].[/dim]"
|
|
1388
1382
|
)
|
|
1389
1383
|
|
|
1390
1384
|
|
|
@@ -49,6 +49,7 @@ class CopyResult:
|
|
|
49
49
|
backup_path: Optional[Path] = None
|
|
50
50
|
reason: str = ""
|
|
51
51
|
first_install: bool = False
|
|
52
|
+
migrated: bool = False
|
|
52
53
|
|
|
53
54
|
|
|
54
55
|
@dataclass
|
|
@@ -754,50 +755,49 @@ def copy_managed_file(
|
|
|
754
755
|
return result
|
|
755
756
|
|
|
756
757
|
if fence_result.state == "no_fence":
|
|
757
|
-
# INV-T / D10:
|
|
758
|
-
#
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
#
|
|
758
|
+
# INV-T / D10: legacy unfenced install (metadata present, no fence markers).
|
|
759
|
+
# Silently upgrade it to the fenced layout — exactly what a fresh install
|
|
760
|
+
# writes (Case A). Legacy unfenced files were fully managed (no user tail),
|
|
761
|
+
# so the entire body becomes the managed region inside the fence.
|
|
762
|
+
#
|
|
763
|
+
# This migration is one-time and invisible by design: once the fence is
|
|
764
|
+
# written, the next copy_managed_file() run finds state == "found" and takes
|
|
765
|
+
# the normal merge path, so this branch never fires for that file again.
|
|
766
|
+
# We deliberately emit NO per-file notice — a routine, self-healing upgrade
|
|
767
|
+
# should not flood stderr with alarming lines on every `mapify init`.
|
|
766
768
|
stored_hash = existing_meta.get("template_hash", "")
|
|
767
769
|
_, clean_dest = extract_metadata(dest_content, ext)
|
|
768
770
|
current_hash = compute_hash(clean_dest)
|
|
769
771
|
|
|
770
772
|
result = CopyResult(src=src, dest=dest)
|
|
771
|
-
result.
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
result.success = False
|
|
781
|
-
result.reason += f" write failed: {exc}"
|
|
782
|
-
else:
|
|
783
|
-
# Drift or unknown hash → backup + overwrite fully managed
|
|
784
|
-
if stored_hash:
|
|
785
|
-
result.drifted = True
|
|
786
|
-
ts = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S")
|
|
787
|
-
backup_path = dest.with_suffix(f"{dest.suffix}.{ts}.bak")
|
|
788
|
-
try:
|
|
789
|
-
shutil.copy2(dest, backup_path)
|
|
790
|
-
result.backed_up = True
|
|
791
|
-
result.backup_path = backup_path
|
|
792
|
-
except OSError:
|
|
793
|
-
result.reason += " (backup failed)"
|
|
794
|
-
final_text = injected
|
|
773
|
+
result.migrated = True
|
|
774
|
+
result.reason = "upgraded legacy unfenced file to fenced layout"
|
|
775
|
+
|
|
776
|
+
# Back up only when the user modified the previously fully-managed body
|
|
777
|
+
# (hash drift), mirroring the fenced-merge drift-backup behavior.
|
|
778
|
+
if stored_hash and current_hash != stored_hash:
|
|
779
|
+
result.drifted = True
|
|
780
|
+
ts = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S")
|
|
781
|
+
backup_path = dest.with_suffix(f"{dest.suffix}.{ts}.bak")
|
|
795
782
|
try:
|
|
796
|
-
|
|
797
|
-
result.
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
result.reason +=
|
|
783
|
+
shutil.copy2(dest, backup_path)
|
|
784
|
+
result.backed_up = True
|
|
785
|
+
result.backup_path = backup_path
|
|
786
|
+
except OSError:
|
|
787
|
+
result.reason += " (backup failed)"
|
|
788
|
+
|
|
789
|
+
final_text = _build_fenced_content(
|
|
790
|
+
metadata_line=meta_prefix.rstrip("\n"),
|
|
791
|
+
start_token=start_token,
|
|
792
|
+
end_token=end_token,
|
|
793
|
+
managed_body=body_after_meta,
|
|
794
|
+
)
|
|
795
|
+
try:
|
|
796
|
+
_atomic_write(dest, final_text)
|
|
797
|
+
result.success = True
|
|
798
|
+
except OSError as exc:
|
|
799
|
+
result.success = False
|
|
800
|
+
result.reason = f"write failed: {exc}"
|
|
801
801
|
|
|
802
802
|
return result
|
|
803
803
|
|
|
@@ -608,43 +608,53 @@ class TestFenceAwareMerge:
|
|
|
608
608
|
|
|
609
609
|
# ------------------------------------------------------------------ VC3
|
|
610
610
|
@pytest.mark.parametrize("ext,start_tok,end_tok", _FENCE_FORMATS)
|
|
611
|
-
def
|
|
611
|
+
def test_vc3_legacy_unfenced_upgraded_to_fenced_silently(
|
|
612
612
|
self, tmp_path, ext: str, start_tok: str, end_tok: str, capsys: pytest.CaptureFixture[str]
|
|
613
613
|
) -> None:
|
|
614
|
-
"""VC3 [INV-T]:
|
|
614
|
+
"""VC3 [INV-T]: legacy unfenced file (metadata, no fence) is silently upgraded
|
|
615
|
+
to the fenced layout — fence markers added, no alarming per-file stderr output,
|
|
616
|
+
and the migration is one-time (idempotent on re-copy)."""
|
|
615
617
|
src_body = _src_body_for(ext)
|
|
616
618
|
src = tmp_path / f"tmpl{ext}"
|
|
617
619
|
src.write_text(src_body, encoding="utf-8")
|
|
618
620
|
dest = tmp_path / f"dest{ext}"
|
|
619
621
|
|
|
620
|
-
# Simulate a
|
|
622
|
+
# Simulate a legacy install: inject metadata but NO fence
|
|
621
623
|
template_hash = compute_hash(src_body)
|
|
622
624
|
phase_b_content = inject_metadata(src_body, ext, "1.0.0", template_hash)
|
|
623
625
|
dest.write_text(phase_b_content, encoding="utf-8")
|
|
624
626
|
|
|
625
|
-
# Re-copy
|
|
627
|
+
# Re-copy: migration should complete by adding the fence
|
|
626
628
|
r = copy_managed_file(src, dest, "1.1.0")
|
|
627
|
-
assert r.success, f"
|
|
629
|
+
assert r.success, f"legacy → fenced migration failed: {r.reason}"
|
|
630
|
+
assert r.migrated, "result must flag the one-time legacy → fenced migration"
|
|
628
631
|
|
|
629
|
-
# Must have written something (fully managed — no fence added on Phase B migration;
|
|
630
|
-
# fence only comes with a full re-install via `mapify init`)
|
|
631
|
-
del start_tok, end_tok # Phase B path doesn't add fence tokens by design
|
|
632
632
|
content = dest.read_text(encoding="utf-8")
|
|
633
|
-
assert "MAP-MANAGED" in content, "Metadata must be present after
|
|
633
|
+
assert "MAP-MANAGED" in content, "Metadata must be present after migration"
|
|
634
|
+
# The migration must now write the fence markers (the whole point of the fix).
|
|
635
|
+
assert start_tok in content, f"start fence {start_tok!r} missing after migration"
|
|
636
|
+
assert end_tok in content, f"end fence {end_tok!r} missing after migration"
|
|
634
637
|
# Check key lines of the managed body are present (shebang may be reordered)
|
|
635
638
|
for line in src_body.splitlines():
|
|
636
639
|
stripped = line.strip()
|
|
637
640
|
if stripped and not stripped.startswith("#!"):
|
|
638
641
|
assert stripped in content, (
|
|
639
|
-
f"Body line {stripped!r} missing from
|
|
642
|
+
f"Body line {stripped!r} missing from migrated content"
|
|
640
643
|
)
|
|
641
644
|
|
|
642
|
-
#
|
|
645
|
+
# No alarming per-file notice should reach stderr — the upgrade is silent.
|
|
643
646
|
stderr_out = capsys.readouterr().err
|
|
644
|
-
assert "MIGRATION" in stderr_out
|
|
645
|
-
f"
|
|
647
|
+
assert "MIGRATION" not in stderr_out and "Phase B" not in stderr_out, (
|
|
648
|
+
f"legacy upgrade must be silent; got stderr: {stderr_out!r}"
|
|
646
649
|
)
|
|
647
650
|
|
|
651
|
+
# Idempotent: a second copy now finds a proper fence (state == 'found'),
|
|
652
|
+
# so it takes the normal merge path and does NOT re-migrate.
|
|
653
|
+
r2 = copy_managed_file(src, dest, "1.1.0")
|
|
654
|
+
assert r2.success
|
|
655
|
+
assert not r2.migrated, "migration must be one-time, not repeated on every copy"
|
|
656
|
+
assert capsys.readouterr().err == "", "re-copy of a fenced file must be silent"
|
|
657
|
+
|
|
648
658
|
# ------------------------------------------------------------------ VC4
|
|
649
659
|
@pytest.mark.parametrize("ext,start_tok,end_tok", _FENCE_FORMATS)
|
|
650
660
|
def test_vc4_deleted_fence_user_owned_not_overwritten(
|