mapify-cli 3.21.0__tar.gz → 3.22.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.21.0 → mapify_cli-3.22.0}/PKG-INFO +2 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/README.md +1 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/pyproject.toml +1 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/__init__.py +503 -1
- mapify_cli-3.22.0/src/mapify_cli/boundary_quality_report.py +306 -0
- mapify_cli-3.22.0/src/mapify_cli/code_map.py +291 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/config/project_config.py +17 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/__init__.py +10 -0
- mapify_cli-3.22.0/src/mapify_cli/delivery/domain_skill.py +264 -0
- mapify_cli-3.22.0/src/mapify_cli/delivery/governance_report.py +612 -0
- mapify_cli-3.22.0/src/mapify_cli/install_manifest.py +653 -0
- mapify_cli-3.22.0/src/mapify_cli/minimality_eval.py +549 -0
- mapify_cli-3.22.0/src/mapify_cli/research_eval_compare.py +407 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/monitor.md +44 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +64 -32
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +9 -4
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +48 -3
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/workflow-gate.py +64 -32
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +199 -40
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +389 -4
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +1 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +150 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +44 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +64 -32
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +9 -4
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +48 -3
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +64 -32
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +199 -40
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +389 -4
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +1 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +150 -1
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/hooks/test_safety_guardrails.py +58 -0
- mapify_cli-3.22.0/tests/test_approval_hold.py +569 -0
- mapify_cli-3.22.0/tests/test_boundary_quality_report.py +456 -0
- mapify_cli-3.22.0/tests/test_code_map.py +460 -0
- mapify_cli-3.22.0/tests/test_domain_skill.py +371 -0
- mapify_cli-3.22.0/tests/test_governance_attack_fixtures.py +571 -0
- mapify_cli-3.22.0/tests/test_governance_report.py +487 -0
- mapify_cli-3.22.0/tests/test_install_manifest.py +891 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_map_orchestrator.py +428 -8
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_map_step_runner.py +26 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_mapify_cli.py +4 -2
- mapify_cli-3.22.0/tests/test_minimality_eval.py +341 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_project_config.py +187 -0
- mapify_cli-3.22.0/tests/test_research_eval_compare.py +402 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills.py +4 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_workflow_context_injector.py +69 -22
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_workflow_gate.py +171 -27
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/.claude/hooks/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/.claude/skills/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/.gitignore +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/LICENSE +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/_locking.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/cli_ui.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/config/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/config/mcp.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/config/settings.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/file_copier.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/providers.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/dependency_graph.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/intent_detector.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/memory/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/memory/capture.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/memory/digest_schema.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/memory/finalize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/memory/recall.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/minimality_report.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/parallelism_observability.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/ralph_state.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/repo_insight.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/research_eval.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/schemas.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skill_ir.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/runner.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/.gitignore +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/actor.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/agents/evaluator.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/agents/predictor.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/config.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-review/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-review/adversarial-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-review/review-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/codex/skills/map-understand/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-statusline.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/hooks/scrub-internal-ids.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/scrub_internal_ids.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/settings.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-review/adversarial-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/map-understand/SKILL.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/agents/evaluator.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/agents/predictor.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-review/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-review/adversarial-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-review/review-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/codex/skills/map-understand/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-statusline.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/hooks/scrub-internal-ids.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/scrub_internal_ids.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-review/adversarial-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/map-understand/SKILL.md.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/token_budget.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/tool_output_offload.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/tools/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/verification_recorder.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/workflow_finalizer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/workflow_logger.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/src/mapify_cli/workflow_state.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/_fake_task_tool.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/conftest.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/fixtures/codex/config.toml +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/fixtures/wave_blueprints.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/hooks/test_end_of_turn.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/hooks/test_scrub_internal_ids_hook.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/code_review.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/plan_handoff.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/spec.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/task_plan.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/fixtures/verification_summary.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/README.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_agent_cli_correctness.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_agent_dispatch_audit.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_agent_frontmatter.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_artifact_schemas.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_bump_version.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_compaction_offload_integration.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_concurrent_dispatch_harness.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_cross_ai_config.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_decomposition.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_dependency_graph.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_diagnostics.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_digest_schema.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_file_copier.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_hook_patterns.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_init_import_graph.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_intent_detector.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_jinja2_dep.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_locking.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_managed_file_copier.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_map_token_meter.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_map_utils_sanitize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_memory_capture.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_memory_finalize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_memory_integration.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_memory_recall.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_memory_review_fixes.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_minimality_report.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_parallelism_observability.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_post_compact_context.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_prompt_layering.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_pyyaml_dep.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_ralph_hooks.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_ralph_state.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_repo_insight.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_research_eval.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_schemas.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_scrub_internal_ids.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skill_ir.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_consistency.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_aggregator.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_apply.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_cli_optimize.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_fixtures.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_optimizer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_proposer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_runner.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_schema.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_skills_eval_viewer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_slice5b_leak_guards.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_sofa_client.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_sofa_search.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_statusline.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_template_render.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_token_budget.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_tool_output_offload.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_validate_dependencies.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_validate_spec_citations.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_verification_recorder.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_wave_eval_harness.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_wave_fixtures.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_wave_parallel_harness.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_workflow_finalizer.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_workflow_logger.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_workflow_state.py +0 -0
- {mapify_cli-3.21.0 → mapify_cli-3.22.0}/tests/test_worktree_isolation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mapify-cli
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.22.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
|
|
@@ -291,6 +291,7 @@ mapify init . --no-autonomy # remove the autonomy posture
|
|
|
291
291
|
|-------|-------------|
|
|
292
292
|
| [Installation](docs/INSTALL.md) | All install methods, PATH setup, troubleshooting |
|
|
293
293
|
| [Usage Guide](docs/USAGE.md) | Workflows, examples, cost optimization, playbook |
|
|
294
|
+
| [Prompt Library](docs/PROMPT_LIBRARY.md) | Copyable prompt recipes by SDLC phase and role |
|
|
294
295
|
| [Architecture](docs/ARCHITECTURE.md) | Agents, MCP integration, customization |
|
|
295
296
|
| [Platform Spec](docs/MAP_PLATFORM_SPEC.md) | Platform refactor roadmap, codebase analysis |
|
|
296
297
|
|
|
@@ -246,6 +246,7 @@ mapify init . --no-autonomy # remove the autonomy posture
|
|
|
246
246
|
|-------|-------------|
|
|
247
247
|
| [Installation](docs/INSTALL.md) | All install methods, PATH setup, troubleshooting |
|
|
248
248
|
| [Usage Guide](docs/USAGE.md) | Workflows, examples, cost optimization, playbook |
|
|
249
|
+
| [Prompt Library](docs/PROMPT_LIBRARY.md) | Copyable prompt recipes by SDLC phase and role |
|
|
249
250
|
| [Architecture](docs/ARCHITECTURE.md) | Agents, MCP integration, customization |
|
|
250
251
|
| [Platform Spec](docs/MAP_PLATFORM_SPEC.md) | Platform refactor roadmap, codebase analysis |
|
|
251
252
|
|
|
@@ -23,7 +23,7 @@ Or install globally:
|
|
|
23
23
|
mapify check
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
__version__ = "3.
|
|
26
|
+
__version__ = "3.22.0"
|
|
27
27
|
|
|
28
28
|
import os
|
|
29
29
|
import subprocess
|
|
@@ -152,6 +152,27 @@ research_eval_app = typer.Typer(
|
|
|
152
152
|
|
|
153
153
|
app.add_typer(research_eval_app, name="research-eval")
|
|
154
154
|
|
|
155
|
+
code_map_app = typer.Typer(
|
|
156
|
+
name="code-map",
|
|
157
|
+
help="Structural code-map provider for MAP research (Python AST fallback).",
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
app.add_typer(code_map_app, name="code-map")
|
|
161
|
+
|
|
162
|
+
domain_skill_app = typer.Typer(
|
|
163
|
+
name="domain-skill",
|
|
164
|
+
help="Bootstrap a project-local domain/reference skill for Claude Code.",
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
app.add_typer(domain_skill_app, name="domain-skill")
|
|
168
|
+
|
|
169
|
+
governance_app = typer.Typer(
|
|
170
|
+
name="governance",
|
|
171
|
+
help="Inventory and audit MAP behavior-shaping assets installed in a project.",
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
app.add_typer(governance_app, name="governance")
|
|
175
|
+
|
|
155
176
|
|
|
156
177
|
def version_callback(value: bool):
|
|
157
178
|
"""Callback to show version and exit."""
|
|
@@ -1003,6 +1024,22 @@ def init(
|
|
|
1003
1024
|
else:
|
|
1004
1025
|
tracker.error("git", "failed")
|
|
1005
1026
|
|
|
1027
|
+
# Write install manifest (.map/mapify.lock.json) — scan-based, after all files
|
|
1028
|
+
# have been installed by both providers.
|
|
1029
|
+
tracker.add("manifest", "Write install manifest")
|
|
1030
|
+
tracker.start("manifest")
|
|
1031
|
+
try:
|
|
1032
|
+
from mapify_cli.install_manifest import build_manifest, write_manifest
|
|
1033
|
+
|
|
1034
|
+
manifest = build_manifest(project_path, provider, __version__)
|
|
1035
|
+
manifest_path = write_manifest(project_path, manifest)
|
|
1036
|
+
tracker.complete(
|
|
1037
|
+
"manifest",
|
|
1038
|
+
f"{len(manifest.entries)} entries → {manifest_path.relative_to(project_path)}",
|
|
1039
|
+
)
|
|
1040
|
+
except Exception as _manifest_exc:
|
|
1041
|
+
tracker.error("manifest", f"skipped: {_manifest_exc}")
|
|
1042
|
+
|
|
1006
1043
|
tracker.add("finalize", "Finalize")
|
|
1007
1044
|
tracker.complete("finalize", "project ready")
|
|
1008
1045
|
|
|
@@ -1571,6 +1608,160 @@ def upgrade():
|
|
|
1571
1608
|
)
|
|
1572
1609
|
|
|
1573
1610
|
|
|
1611
|
+
@app.command("check-installed")
|
|
1612
|
+
def check_installed(
|
|
1613
|
+
project_path: Optional[Path] = typer.Argument(
|
|
1614
|
+
None,
|
|
1615
|
+
help="Project root directory (defaults to current directory).",
|
|
1616
|
+
),
|
|
1617
|
+
) -> None:
|
|
1618
|
+
"""Compare installed MAP files against .map/mapify.lock.json.
|
|
1619
|
+
|
|
1620
|
+
Reports missing files (in manifest but absent from disk), orphaned files
|
|
1621
|
+
(MAP-managed on disk but not recorded in the manifest), and drifted files
|
|
1622
|
+
(template hash differs from the manifest record).
|
|
1623
|
+
|
|
1624
|
+
Exit codes: 0 = all ok, 1 = issues found, 2 = no manifest.
|
|
1625
|
+
"""
|
|
1626
|
+
from mapify_cli.install_manifest import check_installed as _check_installed
|
|
1627
|
+
from mapify_cli.install_manifest import read_manifest
|
|
1628
|
+
|
|
1629
|
+
target = project_path or Path.cwd()
|
|
1630
|
+
|
|
1631
|
+
manifest = read_manifest(target)
|
|
1632
|
+
if manifest is None:
|
|
1633
|
+
console.print(
|
|
1634
|
+
f"[yellow]No install manifest found at {target / '.map' / 'mapify.lock.json'}[/yellow]"
|
|
1635
|
+
)
|
|
1636
|
+
console.print(
|
|
1637
|
+
"[dim]Run [cyan]mapify init .[/cyan] to generate the manifest.[/dim]"
|
|
1638
|
+
)
|
|
1639
|
+
raise typer.Exit(2)
|
|
1640
|
+
|
|
1641
|
+
console.print(
|
|
1642
|
+
f"[bold]MAP install manifest[/bold] — provider: [cyan]{manifest.provider}[/cyan], "
|
|
1643
|
+
f"version: [cyan]{manifest.mapify_version}[/cyan], "
|
|
1644
|
+
f"installed: [dim]{manifest.installed_at}[/dim]"
|
|
1645
|
+
)
|
|
1646
|
+
console.print(f"[dim]{len(manifest.entries)} entries recorded[/dim]")
|
|
1647
|
+
console.print()
|
|
1648
|
+
|
|
1649
|
+
result = _check_installed(target)
|
|
1650
|
+
|
|
1651
|
+
has_issues = False
|
|
1652
|
+
|
|
1653
|
+
if result.missing:
|
|
1654
|
+
has_issues = True
|
|
1655
|
+
console.print(f"[red]Missing ({len(result.missing)} files):[/red]")
|
|
1656
|
+
for path in result.missing:
|
|
1657
|
+
console.print(f" [red]✗[/red] {path}")
|
|
1658
|
+
|
|
1659
|
+
if result.orphaned:
|
|
1660
|
+
has_issues = True
|
|
1661
|
+
console.print(f"[yellow]Orphaned ({len(result.orphaned)} files):[/yellow]")
|
|
1662
|
+
for path in result.orphaned:
|
|
1663
|
+
console.print(f" [yellow]?[/yellow] {path}")
|
|
1664
|
+
|
|
1665
|
+
if result.drifted:
|
|
1666
|
+
has_issues = True
|
|
1667
|
+
console.print(f"[yellow]Drifted ({len(result.drifted)} files):[/yellow]")
|
|
1668
|
+
for path in result.drifted:
|
|
1669
|
+
console.print(f" [yellow]~[/yellow] {path}")
|
|
1670
|
+
|
|
1671
|
+
if result.ok and not has_issues:
|
|
1672
|
+
console.print(
|
|
1673
|
+
f"[green]✅ All {len(result.ok)} managed files match the manifest.[/green]"
|
|
1674
|
+
)
|
|
1675
|
+
elif not has_issues:
|
|
1676
|
+
console.print("[green]✅ No issues found.[/green]")
|
|
1677
|
+
else:
|
|
1678
|
+
console.print()
|
|
1679
|
+
console.print(
|
|
1680
|
+
"[dim]Run [cyan]mapify init . --force[/cyan] to refresh managed files.[/dim]"
|
|
1681
|
+
)
|
|
1682
|
+
raise typer.Exit(1)
|
|
1683
|
+
|
|
1684
|
+
|
|
1685
|
+
@app.command()
|
|
1686
|
+
def uninstall(
|
|
1687
|
+
project_path: Optional[Path] = typer.Argument(
|
|
1688
|
+
None,
|
|
1689
|
+
help="Project root directory (defaults to current directory).",
|
|
1690
|
+
),
|
|
1691
|
+
yes: bool = typer.Option(
|
|
1692
|
+
False,
|
|
1693
|
+
"--yes",
|
|
1694
|
+
"-y",
|
|
1695
|
+
help="Skip confirmation prompt.",
|
|
1696
|
+
),
|
|
1697
|
+
) -> None:
|
|
1698
|
+
"""Remove MAP-owned config entries from provider config files.
|
|
1699
|
+
|
|
1700
|
+
Reads .map/mapify.lock.json and removes only the config-merge entries
|
|
1701
|
+
MAP injected (MCP server keys in .mcp.json, the MAP statusline in
|
|
1702
|
+
settings.local.json). User-modified or user-owned entries are
|
|
1703
|
+
preserved. Installed files (.claude/, .map/scripts/, etc.) are
|
|
1704
|
+
NOT removed by this command.
|
|
1705
|
+
|
|
1706
|
+
Exit codes: 0 = ok / nothing to remove, 1 = error, 2 = no manifest.
|
|
1707
|
+
"""
|
|
1708
|
+
from mapify_cli.install_manifest import read_manifest, reconcile_config
|
|
1709
|
+
|
|
1710
|
+
target = project_path or Path.cwd()
|
|
1711
|
+
|
|
1712
|
+
manifest = read_manifest(target)
|
|
1713
|
+
if manifest is None:
|
|
1714
|
+
console.print(
|
|
1715
|
+
f"[yellow]No install manifest found at "
|
|
1716
|
+
f"{target / '.map' / 'mapify.lock.json'}[/yellow]"
|
|
1717
|
+
)
|
|
1718
|
+
console.print("[dim]Run [cyan]mapify init .[/cyan] to generate the manifest.[/dim]")
|
|
1719
|
+
raise typer.Exit(2)
|
|
1720
|
+
|
|
1721
|
+
if not manifest.config_entries:
|
|
1722
|
+
console.print("[green]No MAP-owned config entries in the manifest.[/green]")
|
|
1723
|
+
return
|
|
1724
|
+
|
|
1725
|
+
console.print(
|
|
1726
|
+
f"[bold]MAP config entries to remove[/bold] "
|
|
1727
|
+
f"(provider: [cyan]{manifest.provider}[/cyan]):"
|
|
1728
|
+
)
|
|
1729
|
+
for entry in manifest.config_entries:
|
|
1730
|
+
console.print(f" [dim]{entry.file}[/dim] [cyan]{entry.key_path}[/cyan]")
|
|
1731
|
+
|
|
1732
|
+
console.print()
|
|
1733
|
+
if not yes:
|
|
1734
|
+
confirm = typer.confirm(
|
|
1735
|
+
"Remove these MAP-owned config entries?",
|
|
1736
|
+
default=False,
|
|
1737
|
+
)
|
|
1738
|
+
if not confirm:
|
|
1739
|
+
console.print("[dim]Aborted.[/dim]")
|
|
1740
|
+
return
|
|
1741
|
+
|
|
1742
|
+
result = reconcile_config(target)
|
|
1743
|
+
|
|
1744
|
+
if result.removed:
|
|
1745
|
+
console.print(f"[green]Removed ({len(result.removed)}):[/green]")
|
|
1746
|
+
for label in result.removed:
|
|
1747
|
+
console.print(f" [green]✓[/green] {label}")
|
|
1748
|
+
|
|
1749
|
+
if result.skipped:
|
|
1750
|
+
console.print(
|
|
1751
|
+
f"[yellow]Skipped ({len(result.skipped)}) — user-modified, preserved:[/yellow]"
|
|
1752
|
+
)
|
|
1753
|
+
for label in result.skipped:
|
|
1754
|
+
console.print(f" [yellow]~[/yellow] {label}")
|
|
1755
|
+
|
|
1756
|
+
if result.missing:
|
|
1757
|
+
console.print(f"[dim]Already absent ({len(result.missing)}):[/dim]")
|
|
1758
|
+
for label in result.missing:
|
|
1759
|
+
console.print(f" [dim]-[/dim] {label}")
|
|
1760
|
+
|
|
1761
|
+
if not result.removed and not result.skipped and not result.missing:
|
|
1762
|
+
console.print("[dim]Nothing to do.[/dim]")
|
|
1763
|
+
|
|
1764
|
+
|
|
1574
1765
|
# Research localization eval commands
|
|
1575
1766
|
|
|
1576
1767
|
|
|
@@ -1678,6 +1869,127 @@ def research_eval_score(
|
|
|
1678
1869
|
raise typer.Exit(1)
|
|
1679
1870
|
|
|
1680
1871
|
|
|
1872
|
+
@research_eval_app.command("compare")
|
|
1873
|
+
def research_eval_compare(
|
|
1874
|
+
baseline_file: Path = typer.Argument(
|
|
1875
|
+
...,
|
|
1876
|
+
help="ResearchEvidence JSON/text from the baseline discovery arm (e.g. glob_grep)",
|
|
1877
|
+
),
|
|
1878
|
+
treatment_file: Path = typer.Argument(
|
|
1879
|
+
...,
|
|
1880
|
+
help="ResearchEvidence JSON/text from the treatment discovery arm (e.g. structural-map)",
|
|
1881
|
+
),
|
|
1882
|
+
expected_file: Path = typer.Argument(
|
|
1883
|
+
...,
|
|
1884
|
+
help="JSON list, or object with expected_locations, of target file ranges",
|
|
1885
|
+
),
|
|
1886
|
+
baseline_name: str = typer.Option(
|
|
1887
|
+
"baseline",
|
|
1888
|
+
"--baseline-name",
|
|
1889
|
+
help="Display name for the baseline arm",
|
|
1890
|
+
),
|
|
1891
|
+
treatment_name: str = typer.Option(
|
|
1892
|
+
"treatment",
|
|
1893
|
+
"--treatment-name",
|
|
1894
|
+
help="Display name for the treatment arm",
|
|
1895
|
+
),
|
|
1896
|
+
repo_root: Optional[Path] = typer.Option(
|
|
1897
|
+
None,
|
|
1898
|
+
"--repo-root",
|
|
1899
|
+
help="Fixture repository root for path existence (stale detection) and line validation",
|
|
1900
|
+
),
|
|
1901
|
+
min_treatment_file_f1: float = typer.Option(
|
|
1902
|
+
0.0,
|
|
1903
|
+
"--min-file-f1",
|
|
1904
|
+
min=0.0,
|
|
1905
|
+
max=1.0,
|
|
1906
|
+
help="Hard quality floor on treatment file-level F1 (token-only wins are not enough)",
|
|
1907
|
+
),
|
|
1908
|
+
min_treatment_line_f1: float = typer.Option(
|
|
1909
|
+
0.0,
|
|
1910
|
+
"--min-line-f1",
|
|
1911
|
+
min=0.0,
|
|
1912
|
+
max=1.0,
|
|
1913
|
+
help="Hard quality floor on treatment line-level F1",
|
|
1914
|
+
),
|
|
1915
|
+
max_stale_regression: int = typer.Option(
|
|
1916
|
+
0,
|
|
1917
|
+
"--max-stale-regression",
|
|
1918
|
+
min=0,
|
|
1919
|
+
help="Max allowed increase in stale/missing-file locations for treatment vs baseline",
|
|
1920
|
+
),
|
|
1921
|
+
overbroad_line_threshold: int = typer.Option(
|
|
1922
|
+
50,
|
|
1923
|
+
"--overbroad-line-threshold",
|
|
1924
|
+
min=1,
|
|
1925
|
+
help="Locations with span above this are counted as over-broad",
|
|
1926
|
+
),
|
|
1927
|
+
no_warn_regression: bool = typer.Option(
|
|
1928
|
+
False,
|
|
1929
|
+
"--no-warn-regression",
|
|
1930
|
+
help="Suppress quality-regression warnings (treatment vs baseline delta)",
|
|
1931
|
+
),
|
|
1932
|
+
out: Optional[Path] = typer.Option(
|
|
1933
|
+
None,
|
|
1934
|
+
"--out",
|
|
1935
|
+
help="Write JSON report to this file (default: stdout only)",
|
|
1936
|
+
),
|
|
1937
|
+
) -> None:
|
|
1938
|
+
"""Compare two ResearchEvidence discovery arms (baseline vs treatment).
|
|
1939
|
+
|
|
1940
|
+
Scores quality (precision/recall/F1) and exploration-cost metrics
|
|
1941
|
+
(location_count, stale_count, overbroad_count) separately so token/LOC
|
|
1942
|
+
reduction cannot mask lower evidence quality.
|
|
1943
|
+
|
|
1944
|
+
Exit codes:
|
|
1945
|
+
0 - Treatment meets all hard quality floors and stale-regression limits
|
|
1946
|
+
1 - Hard failure: quality floor not met or stale regression exceeded
|
|
1947
|
+
2 - Input files are missing or malformed
|
|
1948
|
+
"""
|
|
1949
|
+
import json
|
|
1950
|
+
|
|
1951
|
+
from mapify_cli.research_eval_compare import compare_research_files
|
|
1952
|
+
|
|
1953
|
+
for label, path in [
|
|
1954
|
+
("baseline", baseline_file),
|
|
1955
|
+
("treatment", treatment_file),
|
|
1956
|
+
("expected", expected_file),
|
|
1957
|
+
]:
|
|
1958
|
+
if not path.is_file():
|
|
1959
|
+
console.print(f"[bold red]Error:[/bold red] {label} file not found: {path}")
|
|
1960
|
+
raise typer.Exit(2)
|
|
1961
|
+
|
|
1962
|
+
root = repo_root.resolve() if repo_root else None
|
|
1963
|
+
try:
|
|
1964
|
+
report = compare_research_files(
|
|
1965
|
+
baseline_file,
|
|
1966
|
+
treatment_file,
|
|
1967
|
+
expected_file,
|
|
1968
|
+
baseline_name=baseline_name,
|
|
1969
|
+
treatment_name=treatment_name,
|
|
1970
|
+
repo_root=root,
|
|
1971
|
+
overbroad_line_threshold=overbroad_line_threshold,
|
|
1972
|
+
min_treatment_file_f1=min_treatment_file_f1,
|
|
1973
|
+
min_treatment_line_f1=min_treatment_line_f1,
|
|
1974
|
+
max_stale_regression=max_stale_regression,
|
|
1975
|
+
warn_on_quality_regression=not no_warn_regression,
|
|
1976
|
+
)
|
|
1977
|
+
except (OSError, ValueError) as exc:
|
|
1978
|
+
console.print(f"[bold red]Error:[/bold red] {exc}")
|
|
1979
|
+
raise typer.Exit(2)
|
|
1980
|
+
|
|
1981
|
+
payload = report.as_dict()
|
|
1982
|
+
output_json = json.dumps(payload, indent=2, sort_keys=True)
|
|
1983
|
+
print(output_json)
|
|
1984
|
+
|
|
1985
|
+
if out is not None:
|
|
1986
|
+
out.parent.mkdir(parents=True, exist_ok=True)
|
|
1987
|
+
out.write_text(output_json + "\n", encoding="utf-8")
|
|
1988
|
+
|
|
1989
|
+
if not report.passed:
|
|
1990
|
+
raise typer.Exit(1)
|
|
1991
|
+
|
|
1992
|
+
|
|
1681
1993
|
# Skill-eval commands
|
|
1682
1994
|
|
|
1683
1995
|
|
|
@@ -2116,3 +2428,193 @@ def main():
|
|
|
2116
2428
|
|
|
2117
2429
|
if __name__ == "__main__":
|
|
2118
2430
|
main()
|
|
2431
|
+
|
|
2432
|
+
|
|
2433
|
+
# ---------------------------------------------------------------------------
|
|
2434
|
+
# Code-map commands
|
|
2435
|
+
# ---------------------------------------------------------------------------
|
|
2436
|
+
|
|
2437
|
+
|
|
2438
|
+
@code_map_app.command("query")
|
|
2439
|
+
def code_map_query(
|
|
2440
|
+
query: str = typer.Argument(..., help="Symbol name or keyword to search for."),
|
|
2441
|
+
repo_root: Path = typer.Option(
|
|
2442
|
+
Path("."),
|
|
2443
|
+
"--repo-root",
|
|
2444
|
+
"-r",
|
|
2445
|
+
help="Root of the repository to index (default: current directory).",
|
|
2446
|
+
),
|
|
2447
|
+
max_results: int = typer.Option(
|
|
2448
|
+
5,
|
|
2449
|
+
"--max-results",
|
|
2450
|
+
"-n",
|
|
2451
|
+
min=1,
|
|
2452
|
+
max=20,
|
|
2453
|
+
help="Maximum number of locations to return (default 5).",
|
|
2454
|
+
),
|
|
2455
|
+
out: Optional[Path] = typer.Option(
|
|
2456
|
+
None,
|
|
2457
|
+
"--out",
|
|
2458
|
+
help="Write ResearchEvidence JSON to this file (default: stdout only).",
|
|
2459
|
+
),
|
|
2460
|
+
) -> None:
|
|
2461
|
+
"""Query the structural code map for a symbol and emit ResearchEvidence JSON.
|
|
2462
|
+
|
|
2463
|
+
Scans all Python files under REPO_ROOT using AST parsing (no external
|
|
2464
|
+
dependencies required) and returns matching symbol locations compatible
|
|
2465
|
+
with the existing ResearchEvidence contract.
|
|
2466
|
+
|
|
2467
|
+
Exit codes:
|
|
2468
|
+
0 - One or more matching locations found.
|
|
2469
|
+
1 - No matches found, empty index, or error.
|
|
2470
|
+
"""
|
|
2471
|
+
from mapify_cli.code_map import query_code_map
|
|
2472
|
+
|
|
2473
|
+
result = query_code_map(query, repo_root.resolve(), max_results=max_results)
|
|
2474
|
+
evidence = result.as_research_evidence()
|
|
2475
|
+
|
|
2476
|
+
print(evidence)
|
|
2477
|
+
|
|
2478
|
+
if out is not None:
|
|
2479
|
+
out.parent.mkdir(parents=True, exist_ok=True)
|
|
2480
|
+
out.write_text(evidence + "\n", encoding="utf-8")
|
|
2481
|
+
|
|
2482
|
+
if result.status not in ("ok",):
|
|
2483
|
+
raise typer.Exit(1)
|
|
2484
|
+
|
|
2485
|
+
|
|
2486
|
+
# ---------------------------------------------------------------------------
|
|
2487
|
+
# Domain-skill commands
|
|
2488
|
+
# ---------------------------------------------------------------------------
|
|
2489
|
+
|
|
2490
|
+
|
|
2491
|
+
@domain_skill_app.command("init")
|
|
2492
|
+
def domain_skill_init(
|
|
2493
|
+
project_path: Optional[str] = typer.Argument(
|
|
2494
|
+
None,
|
|
2495
|
+
help="Project directory to bootstrap the domain skill in (default: current directory)",
|
|
2496
|
+
),
|
|
2497
|
+
name: Optional[str] = typer.Option(
|
|
2498
|
+
None,
|
|
2499
|
+
"--name",
|
|
2500
|
+
help="Skill name in kebab-case (default: <project-name>-domain)",
|
|
2501
|
+
),
|
|
2502
|
+
overwrite: bool = typer.Option(
|
|
2503
|
+
False,
|
|
2504
|
+
"--overwrite",
|
|
2505
|
+
help="Overwrite an existing domain skill file",
|
|
2506
|
+
),
|
|
2507
|
+
) -> None:
|
|
2508
|
+
"""Bootstrap a project-local domain/reference skill.
|
|
2509
|
+
|
|
2510
|
+
Scans README.md, pyproject.toml, package.json, go.mod, and Makefile to
|
|
2511
|
+
extract factual content. Missing facts become explicit placeholders for you
|
|
2512
|
+
to fill. No content is fabricated, and secrets are never read or emitted.
|
|
2513
|
+
|
|
2514
|
+
The generated .claude/skills/<name>/SKILL.md is yours — it is not a
|
|
2515
|
+
MAP-managed shipped template and will not be overwritten by mapify init.
|
|
2516
|
+
|
|
2517
|
+
This differs from /map-learn: this skill provides day-one project context
|
|
2518
|
+
before any workflow runs; /map-learn captures lessons after a run completes.
|
|
2519
|
+
|
|
2520
|
+
Examples:
|
|
2521
|
+
|
|
2522
|
+
mapify domain-skill init
|
|
2523
|
+
|
|
2524
|
+
mapify domain-skill init . --name myproject-domain
|
|
2525
|
+
|
|
2526
|
+
mapify domain-skill init /path/to/project --overwrite
|
|
2527
|
+
"""
|
|
2528
|
+
from mapify_cli.delivery.domain_skill import create_domain_skill
|
|
2529
|
+
|
|
2530
|
+
target = Path(project_path) if project_path else Path.cwd()
|
|
2531
|
+
if not target.exists():
|
|
2532
|
+
console.print(f"[red]Error:[/red] Path does not exist: {target}")
|
|
2533
|
+
raise typer.Exit(1)
|
|
2534
|
+
|
|
2535
|
+
skill_file, created = create_domain_skill(target, skill_name=name, overwrite=overwrite)
|
|
2536
|
+
|
|
2537
|
+
rel = skill_file.relative_to(target)
|
|
2538
|
+
if created:
|
|
2539
|
+
console.print(f"[green]Created[/green] {rel}")
|
|
2540
|
+
console.print(
|
|
2541
|
+
"[dim]Edit the file and replace placeholders with real project facts.[/dim]"
|
|
2542
|
+
)
|
|
2543
|
+
console.print(
|
|
2544
|
+
"[dim]Do not commit secrets, tokens, passwords, or API keys into this file.[/dim]"
|
|
2545
|
+
)
|
|
2546
|
+
else:
|
|
2547
|
+
console.print(
|
|
2548
|
+
f"[yellow]Skipped:[/yellow] {rel} already exists"
|
|
2549
|
+
" (use --overwrite to replace)"
|
|
2550
|
+
)
|
|
2551
|
+
|
|
2552
|
+
|
|
2553
|
+
# ---------------------------------------------------------------------------
|
|
2554
|
+
# Governance commands
|
|
2555
|
+
# ---------------------------------------------------------------------------
|
|
2556
|
+
|
|
2557
|
+
|
|
2558
|
+
@governance_app.command("report")
|
|
2559
|
+
def governance_report(
|
|
2560
|
+
project_path: Optional[str] = typer.Argument(
|
|
2561
|
+
None,
|
|
2562
|
+
help="Project directory to audit (default: current directory)",
|
|
2563
|
+
),
|
|
2564
|
+
output_json: bool = typer.Option(
|
|
2565
|
+
False,
|
|
2566
|
+
"--json",
|
|
2567
|
+
help="Output the report as JSON instead of Markdown",
|
|
2568
|
+
),
|
|
2569
|
+
out: Optional[str] = typer.Option(
|
|
2570
|
+
None,
|
|
2571
|
+
"--out",
|
|
2572
|
+
help="Write the report to a file instead of stdout",
|
|
2573
|
+
),
|
|
2574
|
+
) -> None:
|
|
2575
|
+
"""Generate a governance report for MAP behavior-shaping assets.
|
|
2576
|
+
|
|
2577
|
+
Inventories installed skills, hooks, references, and learned rules in the
|
|
2578
|
+
.claude/ directory and classifies each asset under six governance categories:
|
|
2579
|
+
Charter, Policy, Context, Harness, Oversight, Learning.
|
|
2580
|
+
|
|
2581
|
+
Distinguishes enforced controls (runtime hooks) from prompt-only guidance
|
|
2582
|
+
(skills, references, learned rules) and lists governance gaps where
|
|
2583
|
+
policy claims rely solely on prompt text without a backing harness control.
|
|
2584
|
+
|
|
2585
|
+
Examples:
|
|
2586
|
+
|
|
2587
|
+
mapify governance report
|
|
2588
|
+
|
|
2589
|
+
mapify governance report /path/to/project
|
|
2590
|
+
|
|
2591
|
+
mapify governance report --json --out .map/governance.json
|
|
2592
|
+
"""
|
|
2593
|
+
from mapify_cli.delivery.governance_report import build_governance_report
|
|
2594
|
+
|
|
2595
|
+
target = Path(project_path) if project_path else Path.cwd()
|
|
2596
|
+
if not target.exists():
|
|
2597
|
+
console.print(f"[red]Error:[/red] Path does not exist: {target}")
|
|
2598
|
+
raise typer.Exit(1)
|
|
2599
|
+
|
|
2600
|
+
report = build_governance_report(target)
|
|
2601
|
+
|
|
2602
|
+
if not report.assets:
|
|
2603
|
+
console.print(
|
|
2604
|
+
f"[yellow]No MAP assets found[/yellow] in {target} — "
|
|
2605
|
+
"run 'mapify init' first to install the MAP framework."
|
|
2606
|
+
)
|
|
2607
|
+
raise typer.Exit(1)
|
|
2608
|
+
|
|
2609
|
+
content = report.as_json() if output_json else report.as_markdown()
|
|
2610
|
+
|
|
2611
|
+
if out is not None:
|
|
2612
|
+
out_path = Path(out)
|
|
2613
|
+
out_path.parent.mkdir(parents=True, exist_ok=True)
|
|
2614
|
+
out_path.write_text(content, encoding="utf-8")
|
|
2615
|
+
console.print(f"[green]Written[/green] {out_path}")
|
|
2616
|
+
elif output_json:
|
|
2617
|
+
# Bypass Rich to avoid ANSI escape codes in JSON output
|
|
2618
|
+
typer.echo(content)
|
|
2619
|
+
else:
|
|
2620
|
+
console.print(content)
|