mapify-cli 3.13.1__tar.gz → 3.14.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.13.1 → mapify_cli-3.14.0}/PKG-INFO +3 -3
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/README.md +2 -2
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/pyproject.toml +1 -1
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/__init__.py +1 -1
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/safety-guardrails.py +26 -6
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py +74 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-review/SKILL.md +10 -1
- mapify_cli-3.14.0/src/mapify_cli/templates/skills/map-review/review-reference.md +69 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/safety-guardrails.py.jinja +26 -6
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/map_step_runner.py.jinja +74 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-review/SKILL.md.jinja +10 -1
- mapify_cli-3.14.0/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +69 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_map_step_runner.py +33 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills.py +59 -0
- mapify_cli-3.13.1/src/mapify_cli/templates/skills/map-review/review-reference.md +0 -43
- mapify_cli-3.13.1/src/mapify_cli/templates_src/skills/map-review/review-reference.md.jinja +0 -43
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/.claude/hooks/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/.claude/skills/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/.gitignore +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/LICENSE +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/_locking.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/cli_ui.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/config/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/config/mcp.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/config/project_config.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/config/settings.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/agent_generator.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/codex_copier.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/file_copier.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/managed_file_copier.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/providers.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/delivery/template_renderer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/dependency_graph.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/intent_detector.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/memory/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/memory/capture.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/memory/digest_schema.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/memory/finalize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/memory/recall.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/ralph_state.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/repo_insight.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/schemas.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skill_ir.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/aggregator.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/apply_patcher.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/assertions.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/description_optimizer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/dispatcher.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/eval_schema.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/proposer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/runner.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/skills_eval/viewer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/.gitignore +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/CLAUDE.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/actor.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/debate-arbiter.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/documentation-reviewer.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/evaluator.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/final-verifier.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/monitor.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/predictor.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/reflector.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/research-agent.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/synthesizer.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/agents/task-decomposer.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/AGENTS.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/agents/decomposer.toml +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/agents/monitor.toml +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/agents/researcher.toml +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/config.toml +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/hooks/workflow-gate.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/hooks.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-efficient/efficient-reference.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/codex/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/context-meter.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/detect-clarification-triggers.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/end-of-turn.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/map-memory-capture.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/map-memory-endmark.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/map-memory-finalize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/map-memory-recall.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/map-token-meter.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/post-compact-context.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/pre-compact-save-transcript.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/ralph-context-pruner.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/ralph-iteration-logger.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/workflow-context-injector.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/hooks/workflow-gate.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/diagnostics.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/map_orchestrator.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/map_utils.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/sofa_client.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/validate_spec_citations.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/analyze.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/handlers/common.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/handlers/go.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/handlers/python.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/handlers/rust.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/static-analysis/handlers/typescript.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/ralph-loop-config.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/bash-guidelines.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/decomposition-examples.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/escalation-matrix.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/hook-patterns.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/host-paths.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/map-json-output-contracts.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/map-output-examples.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/map-xml-prompt-envelopes.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/mcp-usage-examples.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/step-state-schema.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/references/workflow-state-schema.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/rules/learned/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/settings.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-check/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-check/check-reference.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-debug/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-efficient/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-efficient/efficient-reference.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-explain/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-fast/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-learn/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-learn/templates/example-rules.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-unconditional.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-learn/templates/rules-with-paths.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-memory-now/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-plan/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-plan/plan-reference.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-release/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-resume/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-resume/resume-reference.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-skill-eval/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-so-search/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-so-search/scripts/sofa_search.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/scripts/check-complete.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/scripts/get-plan-path.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/scripts/init-session.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/scripts/show-focus.sh +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/templates/findings.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/templates/iteration_history.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/templates/progress.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-state/templates/task_plan.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-task/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-tdd/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/map-tokenreport/SKILL.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/skills/skill-rules.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/workflow-rules.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/.gitignore.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/CLAUDE.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/actor.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/debate-arbiter.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/documentation-reviewer.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/evaluator.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/final-verifier.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/monitor.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/predictor.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/reflector.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/research-agent.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/synthesizer.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/agents/task-decomposer.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/AGENTS.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/agents/decomposer.toml.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/agents/monitor.toml.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/agents/researcher.toml.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/config.toml.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/hooks/workflow-gate.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/hooks.json.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-efficient/efficient-reference.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/codex/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/README.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/context-meter.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/detect-clarification-triggers.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/end-of-turn.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/map-memory-capture.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/map-memory-endmark.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/map-memory-finalize.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/map-memory-recall.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/map-token-meter.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/post-compact-context.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/pre-compact-save-transcript.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/ralph-context-pruner.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/ralph-iteration-logger.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/workflow-context-injector.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/hooks/workflow-gate.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/diagnostics.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/map_orchestrator.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/map_utils.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/sofa_client.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/scripts/validate_spec_citations.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/analyze.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/common.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/go.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/python.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/rust.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/map/static-analysis/handlers/typescript.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/ralph-loop-config.json.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/bash-guidelines.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/decomposition-examples.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/escalation-matrix.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/hook-patterns.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/host-paths.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/map-json-output-contracts.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/map-output-examples.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/map-xml-prompt-envelopes.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/mcp-usage-examples.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/step-state-schema.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/references/workflow-state-schema.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/rules/learned/README.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/settings.json.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/README.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-check/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-check/check-reference.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-debug/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-efficient/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-efficient/efficient-reference.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-explain/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-fast/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-learn/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-learn/templates/example-rules.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-unconditional.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-learn/templates/rules-with-paths.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-memory-now/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-plan/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-plan/plan-reference.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-release/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-resume/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-resume/resume-reference.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-skill-eval/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-so-search/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-so-search/scripts/sofa_search.py.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/scripts/check-complete.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/scripts/get-plan-path.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/scripts/init-session.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/scripts/show-focus.sh.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/templates/findings.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/templates/iteration_history.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/templates/progress.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-state/templates/task_plan.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-task/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-tdd/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/map-tokenreport/SKILL.md.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/skills/skill-rules.json.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates_src/workflow-rules.json.jinja +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/token_budget.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/tools/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/tools/validate_dependencies.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/verification_recorder.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/workflow_finalizer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/workflow_logger.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/workflow_state.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/conftest.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/fixtures/claude/escalation-matrix.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/fixtures/codex/config.toml +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/hooks/test_detect_clarification_triggers.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/hooks/test_end_of_turn.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/hooks/test_hook_inventory_smoke.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/hooks/test_safety_guardrails.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/code_review.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/plan_handoff.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/spec.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/step_state_initialized.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/step_state_plan_complete.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/task_plan.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/fixtures/verification_summary.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/test_e2e_artifact_contracts.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/integration/test_e2e_claude_sdk.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/README.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_check_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_debug_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_debug_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_efficient_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_explain_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_fast_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_learn_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_memory_now_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_plan_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_release_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_resume_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_review_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_skill_eval_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_state_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_task_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_tdd_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/map_tokenreport_optimize_eval_set.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/src/utils.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_blocker/repo/tests/test_compute.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/src/calc.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/hidden/test_calc_full.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/src/calc.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_calc_vague/repo/tests/test_calc_basic.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/config.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/src/utils.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_pressure/repo/tests/test_price.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/config.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/src/utils.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_scope_trap/repo/tests/test_utils.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/src/semver.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver/repo/tests/test_semver.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/src/semver.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_vague/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/hidden/test_semver_full.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/manifest.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/blueprint.json +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/.map/main/task_plan_main.md +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/__init__.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/src/semver.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/fixtures/whole_skill/map_task_semver_weakgate/repo/tests/test_semver_basic.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/skills_eval/whole_skill/spike_runner.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_agent_cli_correctness.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_agent_frontmatter.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_artifact_schemas.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_bump_version.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_decomposition.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_dependency_graph.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_diagnostics.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_digest_schema.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_file_copier.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_hook_patterns.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_init_import_graph.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_intent_detector.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_inv1_no_anthropic_optimize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_jinja2_dep.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_locking.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_managed_file_copier.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_map_orchestrator.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_map_token_meter.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_map_utils_sanitize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_mapify_cli.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_memory_capture.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_memory_finalize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_memory_integration.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_memory_recall.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_memory_review_fixes.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_post_compact_context.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_ralph_hooks.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_ralph_state.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_repo_insight.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_schemas.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skill_ir.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_consistency.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_aggregator.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_apply.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_cli_optimize.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_dispatcher_env.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_dispatcher_timeout.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_fixtures.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_optimizer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_optimizer_isolation.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_proposer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_runner.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_schema.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_skills_eval_viewer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_sofa_client.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_sofa_search.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_template_render.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_token_budget.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_validate_dependencies.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_validate_spec_citations.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_verification_recorder.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_workflow_context_injector.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_workflow_finalizer.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_workflow_gate.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/tests/test_workflow_logger.py +0 -0
- {mapify_cli-3.13.1 → mapify_cli-3.14.0}/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.14.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
|
|
@@ -201,7 +201,7 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
|
|
|
201
201
|
- **Daily-driver speed** — optimized for repeated use, not occasional demo workflows. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
|
|
202
202
|
- **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early instead of surprising reviewers later.
|
|
203
203
|
- **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
|
|
204
|
-
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
204
|
+
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch. With `minimality` enabled, review also runs an advisory what-to-delete lens for over-engineering cuts.
|
|
205
205
|
- **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
|
|
206
206
|
|
|
207
207
|
<details>
|
|
@@ -249,7 +249,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
|
|
|
249
249
|
minimality: lite # new installs default to lite; existing repos without the key stay off
|
|
250
250
|
```
|
|
251
251
|
|
|
252
|
-
Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work.
|
|
252
|
+
Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work. `/map-review` also adds an advisory what-to-delete lens when minimality is not `off`; its `net: -N` estimate is informational, not a gate.
|
|
253
253
|
|
|
254
254
|
**Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
|
|
255
255
|
|
|
@@ -157,7 +157,7 @@ These flows maintain branch-scoped artifacts under `.map/<branch>/` — `bluepri
|
|
|
157
157
|
- **Daily-driver speed** — optimized for repeated use, not occasional demo workflows. Structured enough to prevent chaos, lightweight enough to keep token and time cost under control.
|
|
158
158
|
- **Reviewable diffs** — `/map-plan` and `/map-efficient` require per-subtask size, concern, and constraint metadata, then validate `blueprint.json` *before* implementation, so oversized or mixed-concern plans fail early instead of surprising reviewers later.
|
|
159
159
|
- **Gates that check the plan, not vibes** — `/map-check` and `/map-review` validate against the spec, tests, and diff instead of asking whether code "looks fine".
|
|
160
|
-
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch.
|
|
160
|
+
- **Clean-room review** — `/map-review` auto-bundles spec, plan, tests, verification, and coverage evidence into a single durable input (`.map/<branch>/review-bundle.json`); `--detached` opens a read-only worktree for inspection without touching your branch. With `minimality` enabled, review also runs an advisory what-to-delete lens for over-engineering cuts.
|
|
161
161
|
- **Project memory** — `/map-learn` turns hard-won fixes and gotchas into reusable context, so the next session doesn't relearn them.
|
|
162
162
|
|
|
163
163
|
<details>
|
|
@@ -205,7 +205,7 @@ MAP is inspired by the [MAP cognitive architecture](https://github.com/Shanka123
|
|
|
205
205
|
minimality: lite # new installs default to lite; existing repos without the key stay off
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
-
Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work.
|
|
208
|
+
Allowed values: `off`, `lite`, `full`, `ultra`. Phase 1 ships conservative `lite` defaults: Actor prefers the fewest moving parts, Monitor blocks scope drift only when it affects required behavior, and Evaluator scores simplicity without letting it hide missing required work. `/map-review` also adds an advisory what-to-delete lens when minimality is not `off`; its `net: -N` estimate is informational, not a gate.
|
|
209
209
|
|
|
210
210
|
**Context-compression policy** (controls the `/compact` nudge; default `never` — opt-in):
|
|
211
211
|
|
|
@@ -14,9 +14,7 @@ Exit codes:
|
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
|
-
import re
|
|
18
17
|
import sys
|
|
19
|
-
from pathlib import Path
|
|
20
18
|
|
|
21
19
|
# =============================================================================
|
|
22
20
|
# Default constants (overridable via .map/config.yaml → safe_path_prefixes)
|
|
@@ -36,6 +34,19 @@ _DEFAULT_DANGEROUS_FILE_PATTERNS = [
|
|
|
36
34
|
r"tokens?\.(json|ya?ml|toml|txt)$", # token files, not any file with "token" in path
|
|
37
35
|
]
|
|
38
36
|
|
|
37
|
+
_DEFAULT_DANGEROUS_FILE_MARKERS = (
|
|
38
|
+
".env",
|
|
39
|
+
"credential",
|
|
40
|
+
"private",
|
|
41
|
+
"key",
|
|
42
|
+
".pem",
|
|
43
|
+
"secret",
|
|
44
|
+
"id_rsa",
|
|
45
|
+
"id_ed25519",
|
|
46
|
+
"password",
|
|
47
|
+
"token",
|
|
48
|
+
)
|
|
49
|
+
|
|
39
50
|
# Dangerous bash command patterns
|
|
40
51
|
_DEFAULT_DANGEROUS_COMMANDS = [
|
|
41
52
|
# Block `rm -rf /` (bare root), `rm -rf /etc`, `rm -rf /home/user`, etc.,
|
|
@@ -81,14 +92,14 @@ def _load_config_overrides() -> dict:
|
|
|
81
92
|
Reads safe_path_prefixes from project config to allow customization.
|
|
82
93
|
Falls back to defaults when config is missing or unreadable.
|
|
83
94
|
"""
|
|
84
|
-
project_dir =
|
|
85
|
-
config_path = project_dir
|
|
86
|
-
if not
|
|
95
|
+
project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
96
|
+
config_path = os.path.join(project_dir, ".map", "config.yaml")
|
|
97
|
+
if not os.path.exists(config_path):
|
|
87
98
|
return {}
|
|
88
99
|
try:
|
|
89
100
|
import yaml # type: ignore[import-untyped]
|
|
90
101
|
|
|
91
|
-
with open(config_path) as f:
|
|
102
|
+
with open(config_path, encoding="utf-8") as f:
|
|
92
103
|
data = yaml.safe_load(f)
|
|
93
104
|
return data if isinstance(data, dict) else {}
|
|
94
105
|
except Exception:
|
|
@@ -121,6 +132,13 @@ def check_file_safety(path: str) -> tuple[bool, str]:
|
|
|
121
132
|
|
|
122
133
|
# Check dangerous patterns
|
|
123
134
|
path_lower = path.lower()
|
|
135
|
+
if DANGEROUS_FILE_PATTERNS == _DEFAULT_DANGEROUS_FILE_PATTERNS and not any(
|
|
136
|
+
marker in path_lower for marker in _DEFAULT_DANGEROUS_FILE_MARKERS
|
|
137
|
+
):
|
|
138
|
+
return True, ""
|
|
139
|
+
|
|
140
|
+
import re
|
|
141
|
+
|
|
124
142
|
for pattern in DANGEROUS_FILE_PATTERNS:
|
|
125
143
|
if re.search(pattern, path_lower, re.IGNORECASE):
|
|
126
144
|
return (
|
|
@@ -136,6 +154,8 @@ def check_command_safety(command: str) -> tuple[bool, str]:
|
|
|
136
154
|
if not command:
|
|
137
155
|
return True, ""
|
|
138
156
|
|
|
157
|
+
import re
|
|
158
|
+
|
|
139
159
|
for pattern in DANGEROUS_COMMANDS:
|
|
140
160
|
if re.search(pattern, command, re.IGNORECASE):
|
|
141
161
|
return False, f"Blocked: Dangerous command pattern detected: {pattern}"
|
{mapify_cli-3.13.1 → mapify_cli-3.14.0}/src/mapify_cli/templates/map/scripts/map_step_runner.py
RENAMED
|
@@ -5116,6 +5116,68 @@ def _render_review_prompt(
|
|
|
5116
5116
|
)
|
|
5117
5117
|
|
|
5118
5118
|
|
|
5119
|
+
def _render_complexity_lens_prompt(
|
|
5120
|
+
review_bundle: str,
|
|
5121
|
+
git_diff: str,
|
|
5122
|
+
minimality_level: str,
|
|
5123
|
+
) -> str:
|
|
5124
|
+
"""Return the advisory `/map-review` what-to-delete lens prompt."""
|
|
5125
|
+
return "\n\n".join(
|
|
5126
|
+
[
|
|
5127
|
+
"\n".join(
|
|
5128
|
+
[
|
|
5129
|
+
"<documents>",
|
|
5130
|
+
" <document source='.map/<branch>/review-bundle.md' priority='primary'>",
|
|
5131
|
+
" <document_content>",
|
|
5132
|
+
review_bundle,
|
|
5133
|
+
" </document_content>",
|
|
5134
|
+
" </document>",
|
|
5135
|
+
" <document source='git diff' priority='secondary'>",
|
|
5136
|
+
" <document_content>",
|
|
5137
|
+
git_diff,
|
|
5138
|
+
" </document_content>",
|
|
5139
|
+
" </document>",
|
|
5140
|
+
"</documents>",
|
|
5141
|
+
]
|
|
5142
|
+
),
|
|
5143
|
+
(
|
|
5144
|
+
"<task>\n"
|
|
5145
|
+
"Run the MAP complexity-only what-to-delete lens. "
|
|
5146
|
+
f"Project minimality is {minimality_level}; this lens is disabled when minimality is off.\n"
|
|
5147
|
+
"</task>"
|
|
5148
|
+
),
|
|
5149
|
+
(
|
|
5150
|
+
"<workflow_policy>\n"
|
|
5151
|
+
"This is advisory-only calibration. Do not gate PROCEED/REVISE/BLOCK on `net: -N`, "
|
|
5152
|
+
"do not create correctness/security/performance findings here, and never feed this output "
|
|
5153
|
+
"into Actor retry context. Normal Monitor/Evaluator review owns blockers.\n"
|
|
5154
|
+
"</workflow_policy>"
|
|
5155
|
+
),
|
|
5156
|
+
(
|
|
5157
|
+
"<instructions>\n"
|
|
5158
|
+
"Hunt only over-engineering introduced by the current diff. Use exactly these tags:\n"
|
|
5159
|
+
"- delete: dead code, unused flexibility, speculative feature; replacement is nothing.\n"
|
|
5160
|
+
"- stdlib: hand-rolled behavior the standard library ships; name the function.\n"
|
|
5161
|
+
"- native: dependency or code doing what the platform already does; name the feature.\n"
|
|
5162
|
+
"- yagni: abstraction with one implementation, config nobody sets, or layer with one caller.\n"
|
|
5163
|
+
"- shrink: same logic in fewer clear lines; show the shorter form.\n"
|
|
5164
|
+
"Boundaries: complexity only. Correctness bugs, security holes, and performance issues belong "
|
|
5165
|
+
"to normal review, not this lens. A single smoke test or assert-based self-check is the minimum; "
|
|
5166
|
+
"never flag it for deletion. Sample and verify any `map:simplification:` marker claim; the marker "
|
|
5167
|
+
"is evidence, not an exemption.\n"
|
|
5168
|
+
"</instructions>"
|
|
5169
|
+
),
|
|
5170
|
+
(
|
|
5171
|
+
"<expected_output>\n"
|
|
5172
|
+
"Return plain text only. If cuts exist, write one line per finding exactly as: "
|
|
5173
|
+
"`L<line>: <tag> <what>. <replacement>.` End with exactly: `net: -<N> lines possible.` "
|
|
5174
|
+
"If nothing should be cut, return exactly: `Lean already. Ship.`\n"
|
|
5175
|
+
"</expected_output>"
|
|
5176
|
+
),
|
|
5177
|
+
]
|
|
5178
|
+
)
|
|
5179
|
+
|
|
5180
|
+
|
|
5119
5181
|
def _budget_review_prompt(
|
|
5120
5182
|
spec: dict[str, str],
|
|
5121
5183
|
review_bundle: str,
|
|
@@ -5153,6 +5215,7 @@ def build_review_prompts(
|
|
|
5153
5215
|
else _read_review_bundle_markdown(branch_name)
|
|
5154
5216
|
)
|
|
5155
5217
|
git_diff = git_diff_text if git_diff_text is not None else _read_git_diff_for_review()
|
|
5218
|
+
minimality = _load_minimality_level(Path.cwd())
|
|
5156
5219
|
|
|
5157
5220
|
prompts: dict[str, dict[str, object]] = {}
|
|
5158
5221
|
for role, spec in REVIEW_PROMPT_SPECS.items():
|
|
@@ -5167,10 +5230,21 @@ def build_review_prompts(
|
|
|
5167
5230
|
"description": spec["description"],
|
|
5168
5231
|
**prompt_result,
|
|
5169
5232
|
}
|
|
5233
|
+
if minimality != "off":
|
|
5234
|
+
prompts["complexity_lens"] = {
|
|
5235
|
+
"subagent_type": "evaluator",
|
|
5236
|
+
"description": "Find deletable complexity",
|
|
5237
|
+
"prompt": _render_complexity_lens_prompt(review_bundle, git_diff, minimality),
|
|
5238
|
+
"estimated_tokens": 0,
|
|
5239
|
+
"budget_tokens": budget,
|
|
5240
|
+
"truncated": False,
|
|
5241
|
+
"clipped_sections": [],
|
|
5242
|
+
}
|
|
5170
5243
|
|
|
5171
5244
|
return {
|
|
5172
5245
|
"status": "success",
|
|
5173
5246
|
"branch": branch_name,
|
|
5247
|
+
"minimality": minimality,
|
|
5174
5248
|
"budget_tokens": budget,
|
|
5175
5249
|
"budget_env": REVIEW_PROMPT_BUDGET_ENV,
|
|
5176
5250
|
"prompts": prompts,
|
|
@@ -22,7 +22,7 @@ parallel_tool_policy: single_review_fanout
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
- Use deeper reasoning for verdicts, risk ranking, section tradeoffs, and contradictory reviewer evidence.
|
|
25
|
-
- Use exactly one parallel reviewer fan-out after bundle preparation: Monitor, Predictor, and
|
|
25
|
+
- Use exactly one parallel reviewer fan-out after bundle preparation: Monitor, Predictor, Evaluator, and the optional complexity lens may run together because they inspect the same review input independently.
|
|
26
26
|
- Wait for all reviewer agents before section presentation. Do not parallelize interactive decisions, ordering comparisons that share state, or review-bundle writes.
|
|
27
27
|
|
|
28
28
|
## Flags
|
|
@@ -287,6 +287,8 @@ REVIEW_PROMPTS_JSON=$(python3 .map/scripts/map_step_runner.py build_review_promp
|
|
|
287
287
|
MONITOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["monitor"]["prompt"])')
|
|
288
288
|
PREDICTOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["predictor"]["prompt"])')
|
|
289
289
|
EVALUATOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["evaluator"]["prompt"])')
|
|
290
|
+
COMPLEXITY_LENS_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; data=json.load(sys.stdin); print(data.get("prompts",{}).get("complexity_lens",{}).get("prompt", ""))')
|
|
291
|
+
COMPLEXITY_LENS_ENABLED=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; data=json.load(sys.stdin); print("true" if data.get("prompts",{}).get("complexity_lens") else "false")')
|
|
290
292
|
```
|
|
291
293
|
|
|
292
294
|
Use the extracted prompt variables as the Task prompts. Keep reviewer task calls below the bundle and prompt-builder commands.
|
|
@@ -295,10 +297,13 @@ Use the extracted prompt variables as the Task prompts. Keep reviewer task calls
|
|
|
295
297
|
Task(subagent_type="monitor", description="Review diff for correctness", prompt=MONITOR_PROMPT)
|
|
296
298
|
Task(subagent_type="predictor", description="Predict integration risk", prompt=PREDICTOR_PROMPT)
|
|
297
299
|
Task(subagent_type="evaluator", description="Score review quality", prompt=EVALUATOR_PROMPT)
|
|
300
|
+
If COMPLEXITY_LENS_ENABLED=true: Task(subagent_type="evaluator", description="Find deletable complexity", prompt=COMPLEXITY_LENS_PROMPT)
|
|
298
301
|
```
|
|
299
302
|
|
|
300
303
|
Reviewer prompts reference `review-bundle.json`, `review-bundle.md`, the raw diff as secondary context, and the expected output schema.
|
|
301
304
|
|
|
305
|
+
When enabled (`minimality != off`), the complexity lens is advisory only. It lists over-engineering as `delete:`, `stdlib:`, `native:`, `yagni:`, or `shrink:` findings, ends with `net: -<N> lines possible.` or `Lean already. Ship.`, samples `map:simplification:` marker claims, and never feeds Actor retries or verdict gates.
|
|
306
|
+
|
|
302
307
|
### Step A.2b: Truncated-response gate (MANDATORY — post-fan-out, pre-verification)
|
|
303
308
|
|
|
304
309
|
After each reviewer returns, validate its output via
|
|
@@ -315,6 +320,8 @@ Role → `--agent` kind for the truncation check:
|
|
|
315
320
|
- predictor reviewer → `--agent predictor`
|
|
316
321
|
- evaluator reviewer → `--agent evaluator`
|
|
317
322
|
|
|
323
|
+
The optional complexity lens returns plain text, not JSON. Do not run the JSON truncation gate on it; if it is empty or visibly cut off, rerun only that lens prompt once.
|
|
324
|
+
|
|
318
325
|
### Step A.3: Verification gate (MANDATORY before any presentation)
|
|
319
326
|
|
|
320
327
|
For EVERY Monitor / Predictor finding, verify BEFORE listing it as a
|
|
@@ -373,6 +380,8 @@ Focus on design boundaries, hidden coupling, state lifecycle, hard/soft constrai
|
|
|
373
380
|
|
|
374
381
|
Focus on clarity, duplication, error handling, maintainability, and fit with existing patterns.
|
|
375
382
|
|
|
383
|
+
If the complexity lens ran, show its raw "what to delete" lines after Code Quality as advisory-only calibration. Do not turn `net: -N` into a REVISE/BLOCK condition.
|
|
384
|
+
|
|
376
385
|
### Section: Tests
|
|
377
386
|
|
|
378
387
|
Focus on changed behavior, failure modes, fixtures, and whether tests prove the contract rather than the implementation.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# /map-review Supporting Reference
|
|
2
|
+
|
|
3
|
+
This file contains lower-frequency review details. Keep `SKILL.md` focused on the active review sequence.
|
|
4
|
+
|
|
5
|
+
## Section Rubrics
|
|
6
|
+
|
|
7
|
+
- Architecture: boundaries, lifecycle, coupling, public API behavior, stage consumption.
|
|
8
|
+
- Code Quality: simplicity, naming, duplication, error handling, maintainability.
|
|
9
|
+
- Tests: changed behavior, failure cases, fixtures, coverage of acceptance tags.
|
|
10
|
+
- Performance: hot paths, large artifacts, prompt budgets, avoid speculative micro-optimizations.
|
|
11
|
+
|
|
12
|
+
## Compare Orderings
|
|
13
|
+
|
|
14
|
+
When `--compare-orderings` is set, collect one run with `ordering_label='default'`, collect one with `ordering_label='reverse'`, aggregate with `compare-review-runs`, then persist with `record-review-ordering`. Treat verdict drift as review evidence.
|
|
15
|
+
|
|
16
|
+
## What-To-Delete Lens
|
|
17
|
+
|
|
18
|
+
When `.map/config.yaml` sets `minimality` to `lite`, `full`, or `ultra`, `build_review_prompts` emits an additional advisory `complexity_lens` prompt. It is deliberately not emitted for `minimality: off` or missing config.
|
|
19
|
+
|
|
20
|
+
The lens hunts only over-engineering in the current diff and reports one line per finding:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
L<line>: <tag> <what>. <replacement>.
|
|
24
|
+
net: -<N> lines possible.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Allowed tags:
|
|
28
|
+
- `delete:` dead code, unused flexibility, or speculative feature; replacement is nothing.
|
|
29
|
+
- `stdlib:` hand-rolled behavior the standard library already ships; name the function.
|
|
30
|
+
- `native:` dependency or code doing what the platform already does; name the feature.
|
|
31
|
+
- `yagni:` abstraction with one implementation, config nobody sets, or a layer with one caller.
|
|
32
|
+
- `shrink:` same logic in fewer clear lines; show the shorter form.
|
|
33
|
+
|
|
34
|
+
If nothing should be cut, the entire output is:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
Lean already. Ship.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Boundaries: complexity only. Correctness, security, and performance findings stay in the normal Monitor/Evaluator pass. A single smoke test or assert-based self-check is the minimum and must not be flagged for deletion. The lens samples and verifies `map:simplification:` marker claims; the marker is evidence, not an exemption. `net: -N` is post-hoc and advisory only: do not feed it into Actor retry context, do not use it for PROCEED/REVISE/BLOCK, and do not let it incentivize deleting necessary code.
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
Plain review:
|
|
45
|
+
```text
|
|
46
|
+
/map-review correctness first
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Detached review:
|
|
50
|
+
```text
|
|
51
|
+
/map-review --detached
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
CI review:
|
|
55
|
+
```text
|
|
56
|
+
/map-review --ci
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Ordering drift check:
|
|
60
|
+
```text
|
|
61
|
+
/map-review --compare-orderings
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Troubleshooting
|
|
65
|
+
|
|
66
|
+
- Detached prep unavailable: continue from the in-place review bundle; do not mutate the source branch.
|
|
67
|
+
- Missing bundle: rerun `create_review_bundle` before agents.
|
|
68
|
+
- Prompt clipping: inspect `.map/<branch>/token_budget.json`, then raise `MAP_REVIEW_PROMPT_BUDGET_TOKENS` only when the bundle evidence is actually missing.
|
|
69
|
+
- Monitor invalid: treat as hard stop and record `REVISE` or `BLOCK`.
|
|
@@ -14,9 +14,7 @@ Exit codes:
|
|
|
14
14
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
|
-
import re
|
|
18
17
|
import sys
|
|
19
|
-
from pathlib import Path
|
|
20
18
|
|
|
21
19
|
# =============================================================================
|
|
22
20
|
# Default constants (overridable via .map/config.yaml → safe_path_prefixes)
|
|
@@ -36,6 +34,19 @@ _DEFAULT_DANGEROUS_FILE_PATTERNS = [
|
|
|
36
34
|
r"tokens?\.(json|ya?ml|toml|txt)$", # token files, not any file with "token" in path
|
|
37
35
|
]
|
|
38
36
|
|
|
37
|
+
_DEFAULT_DANGEROUS_FILE_MARKERS = (
|
|
38
|
+
".env",
|
|
39
|
+
"credential",
|
|
40
|
+
"private",
|
|
41
|
+
"key",
|
|
42
|
+
".pem",
|
|
43
|
+
"secret",
|
|
44
|
+
"id_rsa",
|
|
45
|
+
"id_ed25519",
|
|
46
|
+
"password",
|
|
47
|
+
"token",
|
|
48
|
+
)
|
|
49
|
+
|
|
39
50
|
# Dangerous bash command patterns
|
|
40
51
|
_DEFAULT_DANGEROUS_COMMANDS = [
|
|
41
52
|
# Block `rm -rf /` (bare root), `rm -rf /etc`, `rm -rf /home/user`, etc.,
|
|
@@ -81,14 +92,14 @@ def _load_config_overrides() -> dict:
|
|
|
81
92
|
Reads safe_path_prefixes from project config to allow customization.
|
|
82
93
|
Falls back to defaults when config is missing or unreadable.
|
|
83
94
|
"""
|
|
84
|
-
project_dir =
|
|
85
|
-
config_path = project_dir
|
|
86
|
-
if not
|
|
95
|
+
project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
96
|
+
config_path = os.path.join(project_dir, ".map", "config.yaml")
|
|
97
|
+
if not os.path.exists(config_path):
|
|
87
98
|
return {}
|
|
88
99
|
try:
|
|
89
100
|
import yaml # type: ignore[import-untyped]
|
|
90
101
|
|
|
91
|
-
with open(config_path) as f:
|
|
102
|
+
with open(config_path, encoding="utf-8") as f:
|
|
92
103
|
data = yaml.safe_load(f)
|
|
93
104
|
return data if isinstance(data, dict) else {}
|
|
94
105
|
except Exception:
|
|
@@ -121,6 +132,13 @@ def check_file_safety(path: str) -> tuple[bool, str]:
|
|
|
121
132
|
|
|
122
133
|
# Check dangerous patterns
|
|
123
134
|
path_lower = path.lower()
|
|
135
|
+
if DANGEROUS_FILE_PATTERNS == _DEFAULT_DANGEROUS_FILE_PATTERNS and not any(
|
|
136
|
+
marker in path_lower for marker in _DEFAULT_DANGEROUS_FILE_MARKERS
|
|
137
|
+
):
|
|
138
|
+
return True, ""
|
|
139
|
+
|
|
140
|
+
import re
|
|
141
|
+
|
|
124
142
|
for pattern in DANGEROUS_FILE_PATTERNS:
|
|
125
143
|
if re.search(pattern, path_lower, re.IGNORECASE):
|
|
126
144
|
return (
|
|
@@ -136,6 +154,8 @@ def check_command_safety(command: str) -> tuple[bool, str]:
|
|
|
136
154
|
if not command:
|
|
137
155
|
return True, ""
|
|
138
156
|
|
|
157
|
+
import re
|
|
158
|
+
|
|
139
159
|
for pattern in DANGEROUS_COMMANDS:
|
|
140
160
|
if re.search(pattern, command, re.IGNORECASE):
|
|
141
161
|
return False, f"Blocked: Dangerous command pattern detected: {pattern}"
|
|
@@ -5116,6 +5116,68 @@ def _render_review_prompt(
|
|
|
5116
5116
|
)
|
|
5117
5117
|
|
|
5118
5118
|
|
|
5119
|
+
def _render_complexity_lens_prompt(
|
|
5120
|
+
review_bundle: str,
|
|
5121
|
+
git_diff: str,
|
|
5122
|
+
minimality_level: str,
|
|
5123
|
+
) -> str:
|
|
5124
|
+
"""Return the advisory `/map-review` what-to-delete lens prompt."""
|
|
5125
|
+
return "\n\n".join(
|
|
5126
|
+
[
|
|
5127
|
+
"\n".join(
|
|
5128
|
+
[
|
|
5129
|
+
"<documents>",
|
|
5130
|
+
" <document source='.map/<branch>/review-bundle.md' priority='primary'>",
|
|
5131
|
+
" <document_content>",
|
|
5132
|
+
review_bundle,
|
|
5133
|
+
" </document_content>",
|
|
5134
|
+
" </document>",
|
|
5135
|
+
" <document source='git diff' priority='secondary'>",
|
|
5136
|
+
" <document_content>",
|
|
5137
|
+
git_diff,
|
|
5138
|
+
" </document_content>",
|
|
5139
|
+
" </document>",
|
|
5140
|
+
"</documents>",
|
|
5141
|
+
]
|
|
5142
|
+
),
|
|
5143
|
+
(
|
|
5144
|
+
"<task>\n"
|
|
5145
|
+
"Run the MAP complexity-only what-to-delete lens. "
|
|
5146
|
+
f"Project minimality is {minimality_level}; this lens is disabled when minimality is off.\n"
|
|
5147
|
+
"</task>"
|
|
5148
|
+
),
|
|
5149
|
+
(
|
|
5150
|
+
"<workflow_policy>\n"
|
|
5151
|
+
"This is advisory-only calibration. Do not gate PROCEED/REVISE/BLOCK on `net: -N`, "
|
|
5152
|
+
"do not create correctness/security/performance findings here, and never feed this output "
|
|
5153
|
+
"into Actor retry context. Normal Monitor/Evaluator review owns blockers.\n"
|
|
5154
|
+
"</workflow_policy>"
|
|
5155
|
+
),
|
|
5156
|
+
(
|
|
5157
|
+
"<instructions>\n"
|
|
5158
|
+
"Hunt only over-engineering introduced by the current diff. Use exactly these tags:\n"
|
|
5159
|
+
"- delete: dead code, unused flexibility, speculative feature; replacement is nothing.\n"
|
|
5160
|
+
"- stdlib: hand-rolled behavior the standard library ships; name the function.\n"
|
|
5161
|
+
"- native: dependency or code doing what the platform already does; name the feature.\n"
|
|
5162
|
+
"- yagni: abstraction with one implementation, config nobody sets, or layer with one caller.\n"
|
|
5163
|
+
"- shrink: same logic in fewer clear lines; show the shorter form.\n"
|
|
5164
|
+
"Boundaries: complexity only. Correctness bugs, security holes, and performance issues belong "
|
|
5165
|
+
"to normal review, not this lens. A single smoke test or assert-based self-check is the minimum; "
|
|
5166
|
+
"never flag it for deletion. Sample and verify any `map:simplification:` marker claim; the marker "
|
|
5167
|
+
"is evidence, not an exemption.\n"
|
|
5168
|
+
"</instructions>"
|
|
5169
|
+
),
|
|
5170
|
+
(
|
|
5171
|
+
"<expected_output>\n"
|
|
5172
|
+
"Return plain text only. If cuts exist, write one line per finding exactly as: "
|
|
5173
|
+
"`L<line>: <tag> <what>. <replacement>.` End with exactly: `net: -<N> lines possible.` "
|
|
5174
|
+
"If nothing should be cut, return exactly: `Lean already. Ship.`\n"
|
|
5175
|
+
"</expected_output>"
|
|
5176
|
+
),
|
|
5177
|
+
]
|
|
5178
|
+
)
|
|
5179
|
+
|
|
5180
|
+
|
|
5119
5181
|
def _budget_review_prompt(
|
|
5120
5182
|
spec: dict[str, str],
|
|
5121
5183
|
review_bundle: str,
|
|
@@ -5153,6 +5215,7 @@ def build_review_prompts(
|
|
|
5153
5215
|
else _read_review_bundle_markdown(branch_name)
|
|
5154
5216
|
)
|
|
5155
5217
|
git_diff = git_diff_text if git_diff_text is not None else _read_git_diff_for_review()
|
|
5218
|
+
minimality = _load_minimality_level(Path.cwd())
|
|
5156
5219
|
|
|
5157
5220
|
prompts: dict[str, dict[str, object]] = {}
|
|
5158
5221
|
for role, spec in REVIEW_PROMPT_SPECS.items():
|
|
@@ -5167,10 +5230,21 @@ def build_review_prompts(
|
|
|
5167
5230
|
"description": spec["description"],
|
|
5168
5231
|
**prompt_result,
|
|
5169
5232
|
}
|
|
5233
|
+
if minimality != "off":
|
|
5234
|
+
prompts["complexity_lens"] = {
|
|
5235
|
+
"subagent_type": "evaluator",
|
|
5236
|
+
"description": "Find deletable complexity",
|
|
5237
|
+
"prompt": _render_complexity_lens_prompt(review_bundle, git_diff, minimality),
|
|
5238
|
+
"estimated_tokens": 0,
|
|
5239
|
+
"budget_tokens": budget,
|
|
5240
|
+
"truncated": False,
|
|
5241
|
+
"clipped_sections": [],
|
|
5242
|
+
}
|
|
5170
5243
|
|
|
5171
5244
|
return {
|
|
5172
5245
|
"status": "success",
|
|
5173
5246
|
"branch": branch_name,
|
|
5247
|
+
"minimality": minimality,
|
|
5174
5248
|
"budget_tokens": budget,
|
|
5175
5249
|
"budget_env": REVIEW_PROMPT_BUDGET_ENV,
|
|
5176
5250
|
"prompts": prompts,
|
|
@@ -22,7 +22,7 @@ parallel_tool_policy: single_review_fanout
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
- Use deeper reasoning for verdicts, risk ranking, section tradeoffs, and contradictory reviewer evidence.
|
|
25
|
-
- Use exactly one parallel reviewer fan-out after bundle preparation: Monitor, Predictor, and
|
|
25
|
+
- Use exactly one parallel reviewer fan-out after bundle preparation: Monitor, Predictor, Evaluator, and the optional complexity lens may run together because they inspect the same review input independently.
|
|
26
26
|
- Wait for all reviewer agents before section presentation. Do not parallelize interactive decisions, ordering comparisons that share state, or review-bundle writes.
|
|
27
27
|
|
|
28
28
|
## Flags
|
|
@@ -287,6 +287,8 @@ REVIEW_PROMPTS_JSON=$(python3 .map/scripts/map_step_runner.py build_review_promp
|
|
|
287
287
|
MONITOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["monitor"]["prompt"])')
|
|
288
288
|
PREDICTOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["predictor"]["prompt"])')
|
|
289
289
|
EVALUATOR_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["prompts"]["evaluator"]["prompt"])')
|
|
290
|
+
COMPLEXITY_LENS_PROMPT=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; data=json.load(sys.stdin); print(data.get("prompts",{}).get("complexity_lens",{}).get("prompt", ""))')
|
|
291
|
+
COMPLEXITY_LENS_ENABLED=$(printf '%s' "$REVIEW_PROMPTS_JSON" | python3 -c 'import json,sys; data=json.load(sys.stdin); print("true" if data.get("prompts",{}).get("complexity_lens") else "false")')
|
|
290
292
|
```
|
|
291
293
|
|
|
292
294
|
Use the extracted prompt variables as the Task prompts. Keep reviewer task calls below the bundle and prompt-builder commands.
|
|
@@ -295,10 +297,13 @@ Use the extracted prompt variables as the Task prompts. Keep reviewer task calls
|
|
|
295
297
|
Task(subagent_type="monitor", description="Review diff for correctness", prompt=MONITOR_PROMPT)
|
|
296
298
|
Task(subagent_type="predictor", description="Predict integration risk", prompt=PREDICTOR_PROMPT)
|
|
297
299
|
Task(subagent_type="evaluator", description="Score review quality", prompt=EVALUATOR_PROMPT)
|
|
300
|
+
If COMPLEXITY_LENS_ENABLED=true: Task(subagent_type="evaluator", description="Find deletable complexity", prompt=COMPLEXITY_LENS_PROMPT)
|
|
298
301
|
```
|
|
299
302
|
|
|
300
303
|
Reviewer prompts reference `review-bundle.json`, `review-bundle.md`, the raw diff as secondary context, and the expected output schema.
|
|
301
304
|
|
|
305
|
+
When enabled (`minimality != off`), the complexity lens is advisory only. It lists over-engineering as `delete:`, `stdlib:`, `native:`, `yagni:`, or `shrink:` findings, ends with `net: -<N> lines possible.` or `Lean already. Ship.`, samples `map:simplification:` marker claims, and never feeds Actor retries or verdict gates.
|
|
306
|
+
|
|
302
307
|
### Step A.2b: Truncated-response gate (MANDATORY — post-fan-out, pre-verification)
|
|
303
308
|
|
|
304
309
|
After each reviewer returns, validate its output via
|
|
@@ -315,6 +320,8 @@ Role → `--agent` kind for the truncation check:
|
|
|
315
320
|
- predictor reviewer → `--agent predictor`
|
|
316
321
|
- evaluator reviewer → `--agent evaluator`
|
|
317
322
|
|
|
323
|
+
The optional complexity lens returns plain text, not JSON. Do not run the JSON truncation gate on it; if it is empty or visibly cut off, rerun only that lens prompt once.
|
|
324
|
+
|
|
318
325
|
### Step A.3: Verification gate (MANDATORY before any presentation)
|
|
319
326
|
|
|
320
327
|
For EVERY Monitor / Predictor finding, verify BEFORE listing it as a
|
|
@@ -373,6 +380,8 @@ Focus on design boundaries, hidden coupling, state lifecycle, hard/soft constrai
|
|
|
373
380
|
|
|
374
381
|
Focus on clarity, duplication, error handling, maintainability, and fit with existing patterns.
|
|
375
382
|
|
|
383
|
+
If the complexity lens ran, show its raw "what to delete" lines after Code Quality as advisory-only calibration. Do not turn `net: -N` into a REVISE/BLOCK condition.
|
|
384
|
+
|
|
376
385
|
### Section: Tests
|
|
377
386
|
|
|
378
387
|
Focus on changed behavior, failure modes, fixtures, and whether tests prove the contract rather than the implementation.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# /map-review Supporting Reference
|
|
2
|
+
|
|
3
|
+
This file contains lower-frequency review details. Keep `SKILL.md` focused on the active review sequence.
|
|
4
|
+
|
|
5
|
+
## Section Rubrics
|
|
6
|
+
|
|
7
|
+
- Architecture: boundaries, lifecycle, coupling, public API behavior, stage consumption.
|
|
8
|
+
- Code Quality: simplicity, naming, duplication, error handling, maintainability.
|
|
9
|
+
- Tests: changed behavior, failure cases, fixtures, coverage of acceptance tags.
|
|
10
|
+
- Performance: hot paths, large artifacts, prompt budgets, avoid speculative micro-optimizations.
|
|
11
|
+
|
|
12
|
+
## Compare Orderings
|
|
13
|
+
|
|
14
|
+
When `--compare-orderings` is set, collect one run with `ordering_label='default'`, collect one with `ordering_label='reverse'`, aggregate with `compare-review-runs`, then persist with `record-review-ordering`. Treat verdict drift as review evidence.
|
|
15
|
+
|
|
16
|
+
## What-To-Delete Lens
|
|
17
|
+
|
|
18
|
+
When `.map/config.yaml` sets `minimality` to `lite`, `full`, or `ultra`, `build_review_prompts` emits an additional advisory `complexity_lens` prompt. It is deliberately not emitted for `minimality: off` or missing config.
|
|
19
|
+
|
|
20
|
+
The lens hunts only over-engineering in the current diff and reports one line per finding:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
L<line>: <tag> <what>. <replacement>.
|
|
24
|
+
net: -<N> lines possible.
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Allowed tags:
|
|
28
|
+
- `delete:` dead code, unused flexibility, or speculative feature; replacement is nothing.
|
|
29
|
+
- `stdlib:` hand-rolled behavior the standard library already ships; name the function.
|
|
30
|
+
- `native:` dependency or code doing what the platform already does; name the feature.
|
|
31
|
+
- `yagni:` abstraction with one implementation, config nobody sets, or a layer with one caller.
|
|
32
|
+
- `shrink:` same logic in fewer clear lines; show the shorter form.
|
|
33
|
+
|
|
34
|
+
If nothing should be cut, the entire output is:
|
|
35
|
+
|
|
36
|
+
```text
|
|
37
|
+
Lean already. Ship.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Boundaries: complexity only. Correctness, security, and performance findings stay in the normal Monitor/Evaluator pass. A single smoke test or assert-based self-check is the minimum and must not be flagged for deletion. The lens samples and verifies `map:simplification:` marker claims; the marker is evidence, not an exemption. `net: -N` is post-hoc and advisory only: do not feed it into Actor retry context, do not use it for PROCEED/REVISE/BLOCK, and do not let it incentivize deleting necessary code.
|
|
41
|
+
|
|
42
|
+
## Examples
|
|
43
|
+
|
|
44
|
+
Plain review:
|
|
45
|
+
```text
|
|
46
|
+
/map-review correctness first
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Detached review:
|
|
50
|
+
```text
|
|
51
|
+
/map-review --detached
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
CI review:
|
|
55
|
+
```text
|
|
56
|
+
/map-review --ci
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Ordering drift check:
|
|
60
|
+
```text
|
|
61
|
+
/map-review --compare-orderings
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Troubleshooting
|
|
65
|
+
|
|
66
|
+
- Detached prep unavailable: continue from the in-place review bundle; do not mutate the source branch.
|
|
67
|
+
- Missing bundle: rerun `create_review_bundle` before agents.
|
|
68
|
+
- Prompt clipping: inspect `.map/<branch>/token_budget.json`, then raise `MAP_REVIEW_PROMPT_BUDGET_TOKENS` only when the bundle evidence is actually missing.
|
|
69
|
+
- Monitor invalid: treat as hard stop and record `REVISE` or `BLOCK`.
|