pactkit 2.9.13__tar.gz → 2.10.2__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.
- pactkit-2.10.2/.github/workflows/pactkit.yml +31 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/.gitignore +8 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/.opencode/pactkit.yaml +77 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/CHANGELOG.md +20 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/PKG-INFO +1 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/archive/lessons_archive_202603.md +11 -0
- pactkit-2.10.2/docs/architecture/governance/harness_audit.json +197 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/lessons.md +11 -11
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/rules.md +1 -1
- pactkit-2.10.2/docs/product/archive/archive_202604.md +207 -0
- pactkit-2.10.2/docs/product/context.md +28 -0
- pactkit-2.10.2/docs/specs/BUG-slim-089.md +121 -0
- pactkit-2.10.2/docs/specs/HOTFIX-slim-096.md +24 -0
- pactkit-2.10.2/docs/specs/HOTFIX-slim-099.md +14 -0
- pactkit-2.10.2/docs/specs/STORY-slim-089.md +207 -0
- pactkit-2.10.2/docs/specs/STORY-slim-090.md +202 -0
- pactkit-2.10.2/docs/specs/STORY-slim-091.md +274 -0
- pactkit-2.10.2/docs/specs/STORY-slim-092.md +185 -0
- pactkit-2.10.2/docs/specs/STORY-slim-093.md +270 -0
- pactkit-2.10.2/docs/specs/STORY-slim-094.md +177 -0
- pactkit-2.10.2/docs/specs/STORY-slim-095.md +124 -0
- pactkit-2.10.2/docs/specs/STORY-slim-097.md +156 -0
- pactkit-2.10.2/docs/specs/STORY-slim-098.md +143 -0
- pactkit-2.10.2/docs/specs/STORY-slim-099.md +87 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/pyproject.toml +1 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/__init__.py +1 -1
- pactkit-2.10.2/src/pactkit/audit.py +1296 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/cli.py +46 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/config.py +3 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/generators/deployer.py +55 -8
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/guards.py +25 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/__init__.py +3 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/commands.py +1 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/rules.py +50 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/skills.py +115 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/analyzers/__init__.py +109 -5
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/analyzers/go_analyzer.py +8 -3
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/analyzers/java_analyzer.py +8 -3
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/analyzers/python_analyzer.py +40 -4
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/analyzers/ts_analyzer.py +8 -3
- pactkit-2.10.2/src/pactkit/skills/report.py +993 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/visualize.py +491 -9
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/e2e/cli/test_cli_e2e.py +1 -1
- pactkit-2.10.2/tests/unit/test_audit.py +684 -0
- pactkit-2.10.2/tests/unit/test_blast_radius.py +125 -0
- pactkit-2.10.2/tests/unit/test_bug_slim089_global_claude_md.py +85 -0
- pactkit-2.10.2/tests/unit/test_complexity.py +203 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_config.py +4 -4
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_constitution_sharpening.py +2 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_deployer_plugin.py +1 -1
- pactkit-2.10.2/tests/unit/test_layer_violations.py +180 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_modular_constitution.py +5 -5
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_pdca_slim.py +5 -7
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_prompt_cli_refs.py +1 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_prompt_structural_invariants.py +4 -4
- pactkit-2.10.2/tests/unit/test_report_parser.py +213 -0
- pactkit-2.10.2/tests/unit/test_report_unified.py +157 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_selective_deploy.py +8 -9
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_session_context.py +3 -3
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story040_layered_claude_md.py +6 -7
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story049_community_standards.py +4 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story059_codex_removal.py +1 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story063_prompt_slimming.py +3 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim011_command_rules.py +5 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim021.py +2 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim026.py +1 -1
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim063.py +2 -2
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim077_monorepo_stack.py +2 -1
- pactkit-2.10.2/tests/unit/test_story_slim095.py +88 -0
- pactkit-2.10.2/tests/unit/test_story_slim098_pdca_nudge.py +108 -0
- pactkit-2.10.2/tests/unit/test_story_slim099_act_context_ref.py +45 -0
- pactkit-2.9.13/docs/product/archive/archive_202604.md +0 -90
- pactkit-2.9.13/docs/product/context.md +0 -28
- {pactkit-2.9.13 → pactkit-2.10.2}/.github/workflows/publish.yml +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/AGENTS.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/CODE_OF_CONDUCT.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/CONTRIBUTING.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/LICENSE +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/README.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/SECURITY.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/archive/lessons_archive_202602.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/philosophy.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/assets/logo.png +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/guides/codex-integration-preresearch.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/guides/tool-integration-checklist.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/product/archive/archive_202602.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/product/archive/archive_202603.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/product/friction-log.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/product/prd.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/product/sprint_board.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-001.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-002.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-003.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-004.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-005.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-006.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-007.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-008.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-009.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-010.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-011.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-012.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-013.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-014.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-015.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-016.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-017.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-018.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-019.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-020.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-021.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-022.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-023.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-024.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-025.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-026.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-027.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-028.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-029.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-030.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-031.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-032.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-033.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-034.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-035.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-001.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-002.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-003.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-004.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-005.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/BUG-slim-006.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-023.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-049.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-050.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-051.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-052.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-061.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-062.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-067.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-069.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-070.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-085.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/HOTFIX-slim-087.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-001.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-002.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-003.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-004.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-005.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-006.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-007.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-008.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-009.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-010.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-011.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-012.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-013.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-014.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-015.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-016.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-017.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-018.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-019.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-020.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-021.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-022.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-023.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-024.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-025.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-026.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-027.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-028.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-029.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-030.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-031.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-032.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-033.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-034.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-035.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-036.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-037.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-038.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-039.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-040.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-041.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-042.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-043.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-044.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-045.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-046.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-047.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-048.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-049.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-050.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-051.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-052.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-053.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-054.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-055.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-056.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-057.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-058.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-059.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-060.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-061.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-062.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-063.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-064.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-065.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-069.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-070.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-071.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-072.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-073.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-001.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-005.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-006.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-007.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-009.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-010.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-011.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-012.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-013.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-014.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-015.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-016.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-017.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-018.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-019.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-020.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-021.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-022.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-023.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-024.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-028.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-029.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-030.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-031.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-032.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-033.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-034.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-035.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-036.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-037.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-038.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-039.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-040.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-041.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-042.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-043.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-044.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-045.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-046.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-047.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-048.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-049.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-050.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-051.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-052.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-053.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-054.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-055.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-056.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-057.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-058.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-059.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-060.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-063.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-066.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-067.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-068.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-069.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-070.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-071.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-072.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-073.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-074.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-075.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-076.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-077.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-078.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-079.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-080.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-081.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-082.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-083.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-084.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-086.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/specs/STORY-slim-088.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/BUG-001_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/BUG-002_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-028_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-029_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-031_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-032_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-033_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/docs/test_cases/STORY-slim-034_case.md +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/opencode.json +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/__main__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/backfill.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/cleaners.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/context_gen.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/coverage_gate.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/doctor.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/garden.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/generators/__init__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/generators/adapter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/generators/deploy_base.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/id_generator.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/invariants.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/issue_sync.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/lazy_visualize.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/lessons.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/lint_runner.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/observe.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/profiles.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/agents.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/references.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/prompts/workflows.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/regression.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/schemas.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/scripts.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/sec_scope.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/__init__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/board.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/scaffold.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/skills/spec_linter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/spec_status.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/test_mapper.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/utils.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/src/pactkit/validators.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/conftest.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/e2e/__init__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/e2e/cli/__init__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/agent_parser/agents_dir/researcher.yaml +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/agent_parser/agents_dir/writer.yaml +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/agent_parser/langgraph_app.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/agent_parser/mcp_settings.json +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/api_call_parser/axios_style.tsx +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/api_call_parser/dynamic.tsx +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/fixtures/api_call_parser/page.tsx +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/integration/__init__.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/integration/test_deploy_classic.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_agent_features.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_agent_frontmatter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_agents_enrichment.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_board_bug027.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_board_sections.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug001_skill_path.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug002_plugin_paths.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug003_multi_import.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug004_dead_set.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug005_archive_taskless.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug006_scan_excludes.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug007_stale_trace_refs.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug008_stale_command_refs.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug009_project_config_backfill.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug010_rewrite_yaml.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug011_stale_refs.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug012_call_graph_filter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug013_config_single_source.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug014_version_hygiene.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug017_project_init_playbook.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug018_issue_tracker_verification.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug019_venv_deployment.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug020_claude_md_backup.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug025_release_delegation.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug026_version_sync.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug028_ghost_refs.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug029_stack_detection_fallback.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug030_spec_lint_cli.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug031_docstring_accuracy.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug034_plan_metadata_template.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_021.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_022.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_023.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_024.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim001_env_detection.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim002_instruction_collision.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim003.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim004.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim005.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_bug_slim006.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_check_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_check_extensions_072_073.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_check_playbook_072_073.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_command_frontmatter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_command_visualize_modes.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_config_auto_merge.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_context_gen.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_create_skill.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_cross_flow_matrix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_deploy_base.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_deployer_cleanup.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_design_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_done_gates.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_draw_prompt.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_draw_references.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_drawio_mcp.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_garden.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_home_path_fix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_hotfix_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_init_guard.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_init_playbook_074.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_lang_profiles.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_lessons_rotation_075.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_list_stories.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_mcp_integration.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_model_config.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_monorepo_detect.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_multi_prefix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_observe.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_profiles.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_project_visibility.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_prompt_quality_075.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_prompts_package.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_release.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_release_field.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_release_v110.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_render_prompt.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_review_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_rules_enrichment.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_scaffold.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_scaffold_developer_prefix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_schemas.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_script_extraction.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_skill_structure.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_skills_enrichment.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_slim_deps_088.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_smart_regression.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_sprint_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_stack_references.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_status_command.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_statusline.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story014_release.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story015_ci_lint_gate.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story016_claude_md.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story017_init_claude_md.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story018_arch_staleness.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story019_bailout.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story020_horizon.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story021_rfc.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story022_decision_tree.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story023_test_quality.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story024_native_agent.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story025_ci_pipeline.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story026_issue_tracker.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story027_hooks.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story028_rule_scoping.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story029_doctor.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story030_lint.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story031_git_init_guard.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story032_greenfield_redirect.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story033_config_backfill.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story034_plan_config_refresh.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story035_readme_docs.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story037_regression_fix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story038_call_graph_update.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story039_venv_config.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story042_spec_linter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story043_active_clarify.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story044_consistency_check.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story045_auto_pr.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story046_agent_adapter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story047_enterprise_flags.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story048_worktree_isolation.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story050_doc_only_shortcut.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story051_workflow_streamlining.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story052_conditional_github_release.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story053_impact_regression.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story055_commands.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story055_config.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story055_spec_linter.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story056_commands.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story056_config.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story057_implicit_cleanup.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story058_opencode_extraction.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story058_routing_fix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story060_init_hang.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story061_remove_thinking.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story062_mcp_recommendations.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story064_venv_local_md.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story065_sprint_model.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story072_developer_prefix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim009_lazy_rules.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim010_dry_refactor.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim012_ci.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_clean.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_context.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_guard.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_lazy_viz.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_next_id.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_regression.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_sec_scope.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim014_validators.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim015_doctor.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim016_testmap_lint.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim017.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim018.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim019_plan_subphases.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim020_explore_stall_fix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim022.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim023.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim024.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim025.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim027.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim028.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim029.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim030.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim031.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim032.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim033.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim034.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim035.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim036.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim037.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim038.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim039.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim040.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim041.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim042.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim043.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim044.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim045.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim046.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim047.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim048.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim049.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim051.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim052.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim053.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim054.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim055.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim056.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim060_codex_profile.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim065.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim076_multistack.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim078.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim079.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim080.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim081.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim082.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim083.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_story_slim084.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_tools.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_topology_parsers_066.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_update_task.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_visualize_call_nested.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_visualize_chain_fix.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_visualize_modes.py +0 -0
- {pactkit-2.9.13 → pactkit-2.10.2}/tests/unit/test_visualize_multilang_chain.py +0 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: PactKit CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.11"
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install -e .
|
|
24
|
+
pip install pytest ruff
|
|
25
|
+
pactkit init
|
|
26
|
+
|
|
27
|
+
- name: Lint
|
|
28
|
+
run: ruff check src/ tests/
|
|
29
|
+
|
|
30
|
+
- name: Test
|
|
31
|
+
run: pytest tests/ -v
|
|
@@ -38,9 +38,17 @@ docs/architecture/snapshots/
|
|
|
38
38
|
# Codex CLI local config
|
|
39
39
|
.codex/
|
|
40
40
|
|
|
41
|
+
# GitHub Copilot deployment artifacts (generated by pactkit update)
|
|
42
|
+
.github/
|
|
43
|
+
!.github/workflows/
|
|
44
|
+
|
|
41
45
|
# Plugin deployment artifacts (generated by pactkit update)
|
|
42
46
|
pactkit-plugin/
|
|
43
47
|
|
|
48
|
+
# Office files
|
|
49
|
+
~$*
|
|
50
|
+
*.pptx
|
|
51
|
+
|
|
44
52
|
# Secrets
|
|
45
53
|
.pypirc
|
|
46
54
|
|
|
@@ -2,11 +2,77 @@
|
|
|
2
2
|
# Edit this file to customize which components are deployed.
|
|
3
3
|
# Remove items from a list to disable them. Default: all enabled.
|
|
4
4
|
|
|
5
|
-
version: "2.
|
|
5
|
+
version: "2.10.2"
|
|
6
6
|
stack: python
|
|
7
7
|
root: .
|
|
8
8
|
developer: "slim"
|
|
9
9
|
|
|
10
|
+
# Agents — AI role definitions
|
|
11
|
+
agents:
|
|
12
|
+
- code-explorer
|
|
13
|
+
- product-designer
|
|
14
|
+
- qa-engineer
|
|
15
|
+
- repo-maintainer
|
|
16
|
+
- security-auditor
|
|
17
|
+
- senior-developer
|
|
18
|
+
- system-architect
|
|
19
|
+
- system-medic
|
|
20
|
+
- visual-architect
|
|
21
|
+
|
|
22
|
+
# Commands — PDCA playbooks
|
|
23
|
+
commands:
|
|
24
|
+
- project-act
|
|
25
|
+
- project-check
|
|
26
|
+
- project-clarify
|
|
27
|
+
- project-design
|
|
28
|
+
- project-done
|
|
29
|
+
- project-hotfix
|
|
30
|
+
- project-init
|
|
31
|
+
- project-plan
|
|
32
|
+
- project-pr
|
|
33
|
+
- project-release
|
|
34
|
+
- project-sprint
|
|
35
|
+
|
|
36
|
+
# Skills — tool scripts
|
|
37
|
+
skills:
|
|
38
|
+
- pactkit-analyze
|
|
39
|
+
- pactkit-board
|
|
40
|
+
- pactkit-doctor
|
|
41
|
+
- pactkit-draw
|
|
42
|
+
- pactkit-release
|
|
43
|
+
- pactkit-review
|
|
44
|
+
- pactkit-scaffold
|
|
45
|
+
- pactkit-status
|
|
46
|
+
- pactkit-trace
|
|
47
|
+
- pactkit-visualize
|
|
48
|
+
- pactkit-garden
|
|
49
|
+
- project-act
|
|
50
|
+
- project-check
|
|
51
|
+
- project-clarify
|
|
52
|
+
- project-design
|
|
53
|
+
- project-done
|
|
54
|
+
- project-hotfix
|
|
55
|
+
- project-init
|
|
56
|
+
- project-plan
|
|
57
|
+
- project-pr
|
|
58
|
+
- project-release
|
|
59
|
+
- project-sprint
|
|
60
|
+
- pactkit-audit
|
|
61
|
+
- pactkit-report
|
|
62
|
+
|
|
63
|
+
# Rules — constitution modules
|
|
64
|
+
rules:
|
|
65
|
+
- 01-core-protocol
|
|
66
|
+
- 02-hierarchy-of-truth
|
|
67
|
+
- 03-file-atlas
|
|
68
|
+
- 04-routing-table
|
|
69
|
+
- 05-workflow-conventions
|
|
70
|
+
- 06-mcp-integration
|
|
71
|
+
- 07-shared-protocols
|
|
72
|
+
- 08-architecture-principles
|
|
73
|
+
- 09-sectional-write
|
|
74
|
+
- 11-pdca-nudge
|
|
75
|
+
|
|
10
76
|
# CI/CD — set provider to github or gitlab to generate pipeline config
|
|
11
77
|
ci:
|
|
12
78
|
provider: github
|
|
@@ -46,6 +112,16 @@ regression:
|
|
|
46
112
|
check:
|
|
47
113
|
security_checklist: true
|
|
48
114
|
security_scope_override: none
|
|
115
|
+
pactguard:
|
|
116
|
+
enabled: false
|
|
117
|
+
mode: all
|
|
118
|
+
ruleset: ""
|
|
119
|
+
blocking: false
|
|
120
|
+
observe:
|
|
121
|
+
enabled: false
|
|
122
|
+
sources: auto
|
|
123
|
+
max_console: 100
|
|
124
|
+
max_network: 200
|
|
49
125
|
|
|
50
126
|
# Done — configure commit and lesson quality behavior
|
|
51
127
|
done:
|
|
@@ -4,6 +4,26 @@ All notable changes to PactKit will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/).
|
|
6
6
|
|
|
7
|
+
## [2.10.2] - 2026-04-20
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **PDCA Nudge Protocol** (STORY-slim-098) — AI proactively recommends PDCA commands when free conversation yields actionable conclusions. Trigger matrix maps signals to commands; suppression rules prevent noise.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **Shared Protocols Context.md reference** (STORY-slim-099) — Added missing `Act Phase 4` to the Context.md Canonical Format "Referenced by" line. Ensures context.md reflects Act progress for session continuity.
|
|
14
|
+
- **Semantic version comparison** (HOTFIX-slim-099) — Version mismatch warning now uses tuple comparison instead of string equality, giving correct upgrade/downgrade direction.
|
|
15
|
+
|
|
16
|
+
## [2.10.1] - 2026-04-16
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **Dual-dimension Harness Audit** (STORY-slim-097) — Audit now scores two dimensions: Config (project + global `~/.claude/` config, 50pts) and Code (tests, lint, complexity, git hygiene, 50pts). Score went from 52 to 97/100 for PactKit itself. JSON output includes `dimensions` breakdown field.
|
|
20
|
+
- **Unified HTML Report Dashboard** (STORY-slim-094) — Single `report.html` with tab switching, D3 force-directed graph, harness score ring, layer bars, and hotspot panel. Self-contained offline HTML with inline D3.js.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- **Focus call graph empty output** (STORY-slim-095) — Fixed focus resolution to use `LANG_PROFILES[stack].source_dirs` instead of hardcoded `src/` prefix. Added subdirectory and single-root-module fallback.
|
|
24
|
+
- **Report --all tab overload** (HOTFIX-slim-096) — Filtered unified dashboard to core PDCA graphs only (code_graph, class_graph, call_graph, system_design). Reduced from 9 tabs to 4.
|
|
25
|
+
- **Mermaid `<br/>` tag rendering** (HOTFIX-slim-096) — Strip Mermaid `<br/>` tags from node labels before HTML escape, preventing `<br/>` raw text in SVG.
|
|
26
|
+
|
|
7
27
|
## [2.9.13] - 2026-04-15
|
|
8
28
|
|
|
9
29
|
### Fixed
|
{pactkit-2.9.13 → pactkit-2.10.2}/docs/architecture/governance/archive/lessons_archive_202603.md
RENAMED
|
@@ -35,3 +35,14 @@
|
|
|
35
35
|
| 2026-03-21 | Migrating ~25 deterministic rules from MD prompts to Python CLI subcommands (8 new modules: guards.py, id_generator.py, cleaners.py, regression.py, context_gen.py, validators.py, sec_scope.py, lazy_visualize.py) — the hardest part is backward compatibility: 2500+ pre-existing tests assert specific keywords in prompt text, so slimmed prompts must preserve every keyword even when replacing verbose blocks with single CLI invocations; build a keyword constraint map from failing tests incrementally rather than trying to predict all constraints up-front | STORY-slim-014 |
|
|
36
36
|
| 2026-03-21 | Config resolution in CLI modules must use `find_pactkit_yaml(project_root)` → `load_config(yaml_path)` two-step pattern — `load_config(project_root)` alone fails because pactkit.yaml lives in `.claude/` subdirectory, not project root; lint_runner.py and test_mapper.py both reuse `LANG_PROFILES` from workflows.py as canonical source for stack-specific patterns (test_map_pattern, lint_command), keeping DRY with the CI pipeline profiles | STORY-slim-016 |
|
|
37
37
|
| 2026-03-21 | Cross-flow integrity audits (comparing all PDCA commands end-to-end) catch gaps that per-command reviews miss — CLI subcommands with zero prompt references are dead code (`lint-context`, `lint-lessons`, `lint-testcase`); argparser flags without `deploy()` signature parity (`upgrade` missing `--agent`) fail silently; adding a new parameter to `deploy()` must use a default value to avoid breaking 24+ existing callers that don't pass it | BUG-slim-004 |
|
|
38
|
+
| 2026-03-22 | Done Phase deterministic operations (lessons dedup, invariants regex, coverage parsing) are pure text/regex/subprocess with zero AI judgment — `lessons.py` uses Jaccard similarity on word sets (threshold < 0.5) for dedup, `invariants.py` uses `re.sub()` for test count replacement, `coverage_gate.py` uses list-form `subprocess.run()` for pytest-cov (SEC-7 safe); prompt delegation must preserve fallback instructions ("if pactkit X unavailable, fall back to manual") so LLM can still operate without CLI installed | STORY-slim-017 |
|
|
39
|
+
| 2026-03-22 | Iterative cross-flow audits find deeper gaps each pass — BUG-slim-004 found 6 gaps, BUG-slim-005 found 5 more; dict keys defined but never consumed (`LANG_PROFILES.test_dir/package_file/e2e_test_pattern`) are invisible to grep-based prompt audits because they only exist in data structures; board update instructions must reference `{BOARD_CMD} update_task` script (not vague "mark as done") for deterministic execution; every CLI subcommand must have at least one prompt reference or it's dead code (`lint-testcase` had zero) | BUG-slim-005 |
|
|
40
|
+
| 2026-03-21 | cli.py visualize --lazy was a decision-only tool that printed guidance but never called lazy_visualize.run_visualize_graphs(); always trace the execution path from CLI handler to actual side-effect to confirm end-to-end behavior | BUG-slim-006 |
|
|
41
|
+
| 2026-03-21 | 5 test files independently hardcoded LANG_PROFILES required keys — define canonical key sets as frozenset in schemas.py (LANG_PROFILE_REQUIRED_KEYS) so all consumers import from one source; when adding test assertions on dict keys, always check schemas.py first | STORY-slim-018 |
|
|
42
|
+
| 2026-03-23 | Monolithic prompt Phase 3.2 in commands.py caused AI thinking stalls; splitting into 4 sub-phases (3.2a-3.2d) with output checkpoints forces incremental generation and eliminates the bottleneck | src/pactkit/prompts/commands.py:COMMAND_PROMPTS[project-plan.md] |
|
|
43
|
+
| 2026-03-23 | code-explorer maxTurns reduced from 50 to 15 in agents.py; Plan Phase 1 now requires bounded Explore prompts with target/scope/limit/output via Delegation Template in commands.py | src/pactkit/prompts/agents.py:code-explorer.maxTurns,src/pactkit/prompts/commands.py:Phase1.DelegationTemplate |
|
|
44
|
+
| 2026-03-23 | Added 09-sectional-write as core rule in src/pactkit/prompts/rules.py RULES_MODULES. Threshold 300 lines based on P75-P90 analysis of specs/source/tests. Applies to any file type. | src/pactkit/prompts/rules.py:RULES_MODULES |
|
|
45
|
+
| 2026-03-23 | When adding a new pactkit.yaml config section, 4 touch points needed: get_default_config, DEEP_MERGE_KEYS, validate_config, generate_default_yaml. Table format in prompts saves chars vs individual sections. | config.py:get_default_config |
|
|
46
|
+
| 2026-03-24 | Plan Phase 3.2a scaffold-first: replaced AI freeform Write with {SCAFFOLD_CMD} create_spec + Read + Edit in src/pactkit/prompts/commands.py. Removed 3 inline format examples (~240 chars). Pre-existing tests (test_bug034, test_story055_commands, test_story_slim019) needed updates for new checkpoint wording. | src/pactkit/prompts/commands.py:Phase3.2a |
|
|
47
|
+
| 2026-03-24 | spec_linter.py _check_acceptance_criteria: per-subsection GWT check must use raw_text (with code blocks) not stripped text, because specs legitimately wrap Gherkin in fenced blocks | spec_linter.py:_check_acceptance_criteria |
|
|
48
|
+
| 2026-03-24 | Standalone scripts (visualize.py) need try/except ImportError guards for yaml.safe_load when reading pactkit.yaml — they cannot import from pactkit library | visualize.py:_load_scan_excludes |
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
{
|
|
2
|
+
"timestamp": "2026-04-16T12:48:17Z",
|
|
3
|
+
"commit": "517b0d0",
|
|
4
|
+
"story_id": "",
|
|
5
|
+
"score": 97,
|
|
6
|
+
"ready": true,
|
|
7
|
+
"weakest": null,
|
|
8
|
+
"layers": {
|
|
9
|
+
"H1": {
|
|
10
|
+
"level": 3,
|
|
11
|
+
"name": "Advanced"
|
|
12
|
+
},
|
|
13
|
+
"H2": {
|
|
14
|
+
"level": 3,
|
|
15
|
+
"name": "Advanced"
|
|
16
|
+
},
|
|
17
|
+
"H3": {
|
|
18
|
+
"level": 3,
|
|
19
|
+
"name": "Advanced"
|
|
20
|
+
},
|
|
21
|
+
"H4": {
|
|
22
|
+
"level": 2,
|
|
23
|
+
"name": "Structured"
|
|
24
|
+
},
|
|
25
|
+
"H5": {
|
|
26
|
+
"level": 3,
|
|
27
|
+
"name": "Advanced"
|
|
28
|
+
},
|
|
29
|
+
"H6": {
|
|
30
|
+
"level": 3,
|
|
31
|
+
"name": "Advanced"
|
|
32
|
+
},
|
|
33
|
+
"H7": {
|
|
34
|
+
"level": 3,
|
|
35
|
+
"name": "Advanced"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"dimensions": {
|
|
39
|
+
"config": {
|
|
40
|
+
"score": 50,
|
|
41
|
+
"passed": 13,
|
|
42
|
+
"total": 13
|
|
43
|
+
},
|
|
44
|
+
"code": {
|
|
45
|
+
"score": 47,
|
|
46
|
+
"passed": 16,
|
|
47
|
+
"total": 17
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"hotspots": [
|
|
51
|
+
{
|
|
52
|
+
"file": ".github/skills/pactkit-visualize/scripts/visualize.py",
|
|
53
|
+
"score": 29,
|
|
54
|
+
"complexity_avg": 9.5,
|
|
55
|
+
"blast_pct": 0,
|
|
56
|
+
"fan_in": 0,
|
|
57
|
+
"function_count": 140,
|
|
58
|
+
"has_test": false,
|
|
59
|
+
"docstring_pct": 67,
|
|
60
|
+
"long_funcs": 19,
|
|
61
|
+
"deep_nesting": 34,
|
|
62
|
+
"layer_violations": 0,
|
|
63
|
+
"action": "Add tests: no test file found + Refactor: 19 long functions, 34 deeply nested"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"file": "src/pactkit/skills/visualize.py",
|
|
67
|
+
"score": 20,
|
|
68
|
+
"complexity_avg": 10.8,
|
|
69
|
+
"blast_pct": 0,
|
|
70
|
+
"fan_in": 0,
|
|
71
|
+
"function_count": 85,
|
|
72
|
+
"has_test": false,
|
|
73
|
+
"docstring_pct": 73,
|
|
74
|
+
"long_funcs": 14,
|
|
75
|
+
"deep_nesting": 18,
|
|
76
|
+
"layer_violations": 0,
|
|
77
|
+
"action": "Add tests: no test file found + Refactor: 14 long functions, 18 deeply nested"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"file": "src/pactkit/cli.py",
|
|
81
|
+
"score": 16,
|
|
82
|
+
"complexity_avg": 50.0,
|
|
83
|
+
"blast_pct": 2,
|
|
84
|
+
"fan_in": 1,
|
|
85
|
+
"function_count": 2,
|
|
86
|
+
"has_test": false,
|
|
87
|
+
"docstring_pct": 50,
|
|
88
|
+
"long_funcs": 1,
|
|
89
|
+
"deep_nesting": 1,
|
|
90
|
+
"layer_violations": 0,
|
|
91
|
+
"action": "Add tests: no test file found + Split: extract high-complexity functions"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"file": "pactkit-plugin/skills/pactkit-visualize/scripts/visualize.py",
|
|
95
|
+
"score": 13,
|
|
96
|
+
"complexity_avg": 7.4,
|
|
97
|
+
"blast_pct": 0,
|
|
98
|
+
"fan_in": 0,
|
|
99
|
+
"function_count": 80,
|
|
100
|
+
"has_test": false,
|
|
101
|
+
"docstring_pct": 65,
|
|
102
|
+
"long_funcs": 7,
|
|
103
|
+
"deep_nesting": 13,
|
|
104
|
+
"layer_violations": 0,
|
|
105
|
+
"action": "Add tests: no test file found + Refactor: 7 long functions, 13 deeply nested"
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"file": "src/pactkit/config.py",
|
|
109
|
+
"score": 9,
|
|
110
|
+
"complexity_avg": 15.6,
|
|
111
|
+
"blast_pct": 16,
|
|
112
|
+
"fan_in": 7,
|
|
113
|
+
"function_count": 12,
|
|
114
|
+
"has_test": true,
|
|
115
|
+
"docstring_pct": 100,
|
|
116
|
+
"long_funcs": 6,
|
|
117
|
+
"deep_nesting": 2,
|
|
118
|
+
"layer_violations": 0,
|
|
119
|
+
"action": "Refactor: 6 long functions, 2 deeply nested + Stabilize: 7 dependents"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"file": "src/pactkit/audit.py",
|
|
123
|
+
"score": 8,
|
|
124
|
+
"complexity_avg": 10.9,
|
|
125
|
+
"blast_pct": 2,
|
|
126
|
+
"fan_in": 1,
|
|
127
|
+
"function_count": 26,
|
|
128
|
+
"has_test": true,
|
|
129
|
+
"docstring_pct": 96,
|
|
130
|
+
"long_funcs": 5,
|
|
131
|
+
"deep_nesting": 6,
|
|
132
|
+
"layer_violations": 0,
|
|
133
|
+
"action": "Refactor: 5 long functions, 6 deeply nested + Decompose: 26 functions"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"file": "src/pactkit/skills/analyzers/go_analyzer.py",
|
|
137
|
+
"score": 8,
|
|
138
|
+
"complexity_avg": 9.5,
|
|
139
|
+
"blast_pct": 0,
|
|
140
|
+
"fan_in": 0,
|
|
141
|
+
"function_count": 11,
|
|
142
|
+
"has_test": false,
|
|
143
|
+
"docstring_pct": 36,
|
|
144
|
+
"long_funcs": 2,
|
|
145
|
+
"deep_nesting": 3,
|
|
146
|
+
"layer_violations": 0,
|
|
147
|
+
"action": "Add tests: no test file found + Refactor: 2 long functions, 3 deeply nested"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"file": "src/pactkit/skills/report.py",
|
|
151
|
+
"score": 7,
|
|
152
|
+
"complexity_avg": 9.1,
|
|
153
|
+
"blast_pct": 2,
|
|
154
|
+
"fan_in": 1,
|
|
155
|
+
"function_count": 11,
|
|
156
|
+
"has_test": false,
|
|
157
|
+
"docstring_pct": 100,
|
|
158
|
+
"long_funcs": 5,
|
|
159
|
+
"deep_nesting": 0,
|
|
160
|
+
"layer_violations": 0,
|
|
161
|
+
"action": "Add tests: no test file found + Refactor: 5 long functions"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"file": "src/pactkit/generators/deployer.py",
|
|
165
|
+
"score": 7,
|
|
166
|
+
"complexity_avg": 5.5,
|
|
167
|
+
"blast_pct": 5,
|
|
168
|
+
"fan_in": 2,
|
|
169
|
+
"function_count": 41,
|
|
170
|
+
"has_test": false,
|
|
171
|
+
"docstring_pct": 95,
|
|
172
|
+
"long_funcs": 8,
|
|
173
|
+
"deep_nesting": 0,
|
|
174
|
+
"layer_violations": 0,
|
|
175
|
+
"action": "Add tests: no test file found + Refactor: 8 long functions"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"file": "src/pactkit/skills/analyzers/java_analyzer.py",
|
|
179
|
+
"score": 7,
|
|
180
|
+
"complexity_avg": 7.1,
|
|
181
|
+
"blast_pct": 0,
|
|
182
|
+
"fan_in": 0,
|
|
183
|
+
"function_count": 11,
|
|
184
|
+
"has_test": false,
|
|
185
|
+
"docstring_pct": 36,
|
|
186
|
+
"long_funcs": 1,
|
|
187
|
+
"deep_nesting": 3,
|
|
188
|
+
"layer_violations": 0,
|
|
189
|
+
"action": "Add tests: no test file found + Refactor: 1 long functions, 3 deeply nested"
|
|
190
|
+
}
|
|
191
|
+
],
|
|
192
|
+
"suggested_tasks": [],
|
|
193
|
+
"dependency_health": {
|
|
194
|
+
"vulns": -1,
|
|
195
|
+
"error": "pip-audit not installed"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
@@ -2,17 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
| Date | Lesson | Context |
|
|
4
4
|
|------|--------|---------|
|
|
5
|
-
| 2026-03-22 | Done Phase deterministic operations (lessons dedup, invariants regex, coverage parsing) are pure text/regex/subprocess with zero AI judgment — `lessons.py` uses Jaccard similarity on word sets (threshold < 0.5) for dedup, `invariants.py` uses `re.sub()` for test count replacement, `coverage_gate.py` uses list-form `subprocess.run()` for pytest-cov (SEC-7 safe); prompt delegation must preserve fallback instructions ("if pactkit X unavailable, fall back to manual") so LLM can still operate without CLI installed | STORY-slim-017 |
|
|
6
|
-
| 2026-03-22 | Iterative cross-flow audits find deeper gaps each pass — BUG-slim-004 found 6 gaps, BUG-slim-005 found 5 more; dict keys defined but never consumed (`LANG_PROFILES.test_dir/package_file/e2e_test_pattern`) are invisible to grep-based prompt audits because they only exist in data structures; board update instructions must reference `{BOARD_CMD} update_task` script (not vague "mark as done") for deterministic execution; every CLI subcommand must have at least one prompt reference or it's dead code (`lint-testcase` had zero) | BUG-slim-005 |
|
|
7
|
-
| 2026-03-21 | cli.py visualize --lazy was a decision-only tool that printed guidance but never called lazy_visualize.run_visualize_graphs(); always trace the execution path from CLI handler to actual side-effect to confirm end-to-end behavior | BUG-slim-006 |
|
|
8
|
-
| 2026-03-21 | 5 test files independently hardcoded LANG_PROFILES required keys — define canonical key sets as frozenset in schemas.py (LANG_PROFILE_REQUIRED_KEYS) so all consumers import from one source; when adding test assertions on dict keys, always check schemas.py first | STORY-slim-018 |
|
|
9
|
-
| 2026-03-23 | Monolithic prompt Phase 3.2 in commands.py caused AI thinking stalls; splitting into 4 sub-phases (3.2a-3.2d) with output checkpoints forces incremental generation and eliminates the bottleneck | src/pactkit/prompts/commands.py:COMMAND_PROMPTS[project-plan.md] |
|
|
10
|
-
| 2026-03-23 | code-explorer maxTurns reduced from 50 to 15 in agents.py; Plan Phase 1 now requires bounded Explore prompts with target/scope/limit/output via Delegation Template in commands.py | src/pactkit/prompts/agents.py:code-explorer.maxTurns,src/pactkit/prompts/commands.py:Phase1.DelegationTemplate |
|
|
11
|
-
| 2026-03-23 | Added 09-sectional-write as core rule in src/pactkit/prompts/rules.py RULES_MODULES. Threshold 300 lines based on P75-P90 analysis of specs/source/tests. Applies to any file type. | src/pactkit/prompts/rules.py:RULES_MODULES |
|
|
12
|
-
| 2026-03-23 | When adding a new pactkit.yaml config section, 4 touch points needed: get_default_config, DEEP_MERGE_KEYS, validate_config, generate_default_yaml. Table format in prompts saves chars vs individual sections. | config.py:get_default_config |
|
|
13
|
-
| 2026-03-24 | Plan Phase 3.2a scaffold-first: replaced AI freeform Write with {SCAFFOLD_CMD} create_spec + Read + Edit in src/pactkit/prompts/commands.py. Removed 3 inline format examples (~240 chars). Pre-existing tests (test_bug034, test_story055_commands, test_story_slim019) needed updates for new checkpoint wording. | src/pactkit/prompts/commands.py:Phase3.2a |
|
|
14
|
-
| 2026-03-24 | spec_linter.py _check_acceptance_criteria: per-subsection GWT check must use raw_text (with code blocks) not stripped text, because specs legitimately wrap Gherkin in fenced blocks | spec_linter.py:_check_acceptance_criteria |
|
|
15
|
-
| 2026-03-24 | Standalone scripts (visualize.py) need try/except ImportError guards for yaml.safe_load when reading pactkit.yaml — they cannot import from pactkit library | visualize.py:_load_scan_excludes |
|
|
16
5
|
| 2026-03-24 | Inline data in standalone scripts must have canonical-source comments pointing to the library module (e.g. _STACK_MARKERS → cleaners.py, _LANG_FILE_EXT → workflows.py) per Architecture Principle 1 | visualize.py:_STACK_MARKERS |
|
|
17
6
|
| 2026-03-24 | Worktree isolation diverges from working-tree: verify visualize.py _scan_files() signature is preserved across stories to avoid breaking callers | visualize.py:_scan_files |
|
|
18
7
|
| 2026-03-24 | Extracting _detect_stack() from _detect_file_ext() enables both file discovery and test mapping to share stack detection — DRY refactoring | visualize.py:_detect_stack |
|
|
@@ -53,3 +42,14 @@
|
|
|
53
42
|
| 2026-04-02 | validate_deployed_content() guard caught real adapter bugs (missing _replace_slash_commands in copilot agents, missing _replace_cli_with_scripts in codex rules) — static analysis on deploy output is high-value for multi-adapter systems | deploy_base.py:validate_deployed_content |
|
|
54
43
|
| 2026-04-02 | Borrowed Claude Code P3 (graduated safety language) + P6 (NO_TOOLS) patterns; applied to 01-core-protocol.md, 02-hierarchy-of-truth.md, 10-safety.md, project-act.md, project-check.md | src/pactkit/prompts/rules.py:Signal Strength Convention |
|
|
55
44
|
| 2026-04-15 | pyproject.toml [project].dependencies must only include packages needed for core CLI startup (pyyaml); adapter and tree-sitter packages go in [project.optional-dependencies] with extras (opencode, codex, visualize, all) | pyproject.toml:[project.optional-dependencies] |
|
|
45
|
+
| 2026-04-15 | _deploy_claude_md must read-before-write: user-modified global CLAUDE.md was silently destroyed on every pactkit init/update. Project-level _generate_project_claude_md had 3 protection layers; global had zero. | deployer.py:_deploy_claude_md |
|
|
46
|
+
| 2026-04-16 | TreeSitterAnalyzer._compute_complexity() can serve as a universal base for all tree-sitter languages; only PythonAnalyzer needs a separate implementation using stdlib ast | analyzers/__init__.py:_compute_complexity |
|
|
47
|
+
| 2026-04-16 | Parsing Mermaid .mmd files to JSON (nodes+edges) is straightforward with regex; the D3 force-directed HTML template works well as a single-file self-contained skill | report.py:_parse_mmd,_render_html |
|
|
48
|
+
| 2026-04-16 | D3 force graph selectNode() computes blast radius via in-browser BFS — no backend needed; folder-based coloring via d3.scaleOrdinal on path prefix gives CodeFlow-quality visuals | src/pactkit/skills/report.py:selectNode |
|
|
49
|
+
| 2026-04-16 | H1-H7 harness audit aggregator pattern: each _check_hN() function is self-contained with its own L0-L3 criteria, making it easy to add new checks per layer without touching scoring logic | src/pactkit/audit.py:_check_h1 |
|
|
50
|
+
| 2026-04-16 | File-level hotspot aggregation (complexity_avg × blast_pct × fan_in) reduces 141 per-function findings to ~10 actionable items; _suggest_action() maps dominant signal to Split/Stabilize/Isolate/Decompose verb | src/pactkit/audit.py:_compute_hotspots,_suggest_action |
|
|
51
|
+
| 2026-04-16 | Weighted hotspot formula (complexity 25% + docstring 15% + smells 15% + layers 10% + test 20% + blast 15%) gives meaningful scores across different project profiles; _generate_suggested_tasks auto-scaffolds BUG/HOTFIX specs with Done-completed filter for idempotency | src/pactkit/audit.py:_compute_hotspots,_generate_suggested_tasks |
|
|
52
|
+
| 2026-04-16 | Dual-dimension audit (config+code 50/50) gives accurate project health picture; scanning ~/.claude/ global config catches harness setup invisible at project level | audit.py:_all_config_dirs |
|
|
53
|
+
| 2026-04-17 | Dual-anchor pattern: declare principle in RULES_MODULES['core'] (01-core-protocol.md), detail in dedicated module (11-pdca-nudge.md). Prevents attention dilution when rules/ has 10+ files — Core Protocol acts as behavioral constitution anchor. | src/pactkit/prompts/rules.py:RULES_MODULES |
|
|
54
|
+
| 2026-04-18 | Version comparison guards must use semantic (tuple) comparison, not string equality — string != treats 2.10.1 != 2.5.0 without direction, giving wrong upgrade advice | guards.py:check_version_mismatch |
|
|
55
|
+
| 2026-04-20 | Plugin deployer (_deploy_commands in deployer.py:952-954) uses _rewrite_skills_prefix instead of _render_prompt, keeping raw placeholders like {BOARD_CMD} — not a deploy drift bug but by-design template behavior | src/pactkit/generators/deployer.py:_deploy_commands |
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
## Invariants
|
|
17
17
|
|
|
18
|
-
1. All
|
|
18
|
+
1. All 3752+ tests must pass before any commit to `main`.
|
|
19
19
|
2. Specs (`docs/specs/`) are the source of truth — code conforms to specs, not the reverse.
|
|
20
20
|
3. CLI entry point is `pactkit` via `src/pactkit/cli.py:main`.
|
|
21
21
|
4. No runtime dependencies beyond `pyyaml`.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
|
|
2
|
+
### [STORY-slim-075] Prompt engineering quality: graduated safety language, tool call guidance, routing disambiguation, lessons rotation
|
|
3
|
+
> Spec: docs/specs/STORY-slim-075.md
|
|
4
|
+
|
|
5
|
+
- [x] Audit safety language,Add parallel/serial tool guidance,Add routing When NOT to use,Implement lessons rotation,Add prompt quality tests
|
|
6
|
+
|
|
7
|
+
### [STORY-slim-076] Multi-stack visualize: class mode + multi-language file scanning
|
|
8
|
+
> Spec: docs/specs/STORY-slim-076.md
|
|
9
|
+
|
|
10
|
+
- [x] R1: _detect_stacks multi-stack detection
|
|
11
|
+
- [x] R2: Multi-stack file scanning
|
|
12
|
+
- [x] R3: extract_classes ABC
|
|
13
|
+
- [x] R4: _build_class_graph refactor
|
|
14
|
+
- [x] R5: _select_analyzers
|
|
15
|
+
- [x] R6: Backward compat tests
|
|
16
|
+
|
|
17
|
+
### [STORY-slim-077] Monorepo stack detection + redetect-stack CLI
|
|
18
|
+
> Spec: docs/specs/STORY-slim-077.md
|
|
19
|
+
|
|
20
|
+
- [x] Extend detect_stacks depth-1,Add redetect-stack CLI,Update init flow,Tests
|
|
21
|
+
|
|
22
|
+
### [STORY-slim-078] Multi-language module resolution for file-mode dependency graph
|
|
23
|
+
> Spec: docs/specs/STORY-slim-078.md
|
|
24
|
+
|
|
25
|
+
- [x] Per-lang module keys,Per-lang import normalization,Multi-analyzer file graph,Fix src-strip,Go module prefix,Tests
|
|
26
|
+
|
|
27
|
+
### [STORY-slim-079] TS/JS path alias resolution for file-mode dependency graph
|
|
28
|
+
> Spec: docs/specs/STORY-slim-079.md
|
|
29
|
+
|
|
30
|
+
- [x] Read tsconfig paths,Resolve alias imports,Wildcard patterns,Tests
|
|
31
|
+
|
|
32
|
+
### [STORY-slim-082] Sync prompt templates for --mode module and --focus scoping
|
|
33
|
+
> Spec: docs/specs/STORY-slim-082.md
|
|
34
|
+
|
|
35
|
+
- [x] Update SKILL_VISUALIZE_MD
|
|
36
|
+
- [x] Update Visual First rule
|
|
37
|
+
- [x] Update release snapshot
|
|
38
|
+
- [x] Update init Phase 3
|
|
39
|
+
- [x] Deploy and verify
|
|
40
|
+
|
|
41
|
+
### [STORY-slim-081] Two-tier module graph with scoped focus for large codebases
|
|
42
|
+
> Spec: docs/specs/STORY-slim-081.md
|
|
43
|
+
|
|
44
|
+
- [x] R1: _detect_modules boundary detection,R2: _build_module_graph with weighted edges,R3: Auto-degradation when files > MAX_SCAN_FILES,R4: Scoped focus scan (resolve module → directory),R5: .tsx/.jsx regression test,R6: Backward compat for small projects
|
|
45
|
+
|
|
46
|
+
### [STORY-slim-080] Deep monorepo scanning: nearest-ancestor config discovery for all analyzers
|
|
47
|
+
> Spec: docs/specs/STORY-slim-080.md
|
|
48
|
+
|
|
49
|
+
- [x] Extend _detect_stacks depth,TS nearest-ancestor tsconfig,Go nearest-ancestor go.mod,Plumb consumer_path,Tests
|
|
50
|
+
|
|
51
|
+
### [STORY-slim-083] Copilot deployer adapter package (pactkit-copilot)
|
|
52
|
+
> Spec: docs/specs/STORY-slim-083.md
|
|
53
|
+
|
|
54
|
+
- [x] CopilotDeployer class + entry_point registration + deploy to .github/ + OCP fix for rules_import_style dispatch
|
|
55
|
+
|
|
56
|
+
### [STORY-slim-084] Adapter deploy-output validation guard
|
|
57
|
+
> Spec: docs/specs/STORY-slim-084.md
|
|
58
|
+
|
|
59
|
+
- [x] R2: has_pactkit_cli field,R1: validate_deployed_content(),R3: Core deploy integration,R6: Core unit tests,R4: Copilot integration test,R5: Codex integration test
|
|
60
|
+
|
|
61
|
+
### [STORY-slim-086] Prompt Writing Quality — Signal Strength, Consequence Language, NO_TOOLS Mode
|
|
62
|
+
> Spec: docs/specs/STORY-slim-086.md
|
|
63
|
+
|
|
64
|
+
- [x] R1: Signal Strength Convention 追加到 01-core-protocol.md
|
|
65
|
+
- [x] R2: 校准现有规则文件信号词 (01, 02, 10)
|
|
66
|
+
- [x] R3: 7 条关键禁止规则添加后果语言
|
|
67
|
+
- [x] R4: project-check.md 添加 NO_TOOLS restriction
|
|
68
|
+
|
|
69
|
+
## ✅ Done
|
|
70
|
+
|
|
71
|
+
- **STORY-slim-059**: Remove dead codex profile and slim down core package
|
|
72
|
+
- **STORY-slim-058**: Extract pactkit-opencode as independent adapter package
|
|
73
|
+
- **STORY-slim-057**: Refactor deployer.py: extract DeployerProtocol and DeployerBase
|
|
74
|
+
|
|
75
|
+
### [HOTFIX-slim-085] Add Duplication Audit to Plan phase
|
|
76
|
+
> Spec: docs/specs/HOTFIX-slim-085.md
|
|
77
|
+
|
|
78
|
+
- [x] system-architect agent + Plan playbook
|
|
79
|
+
|
|
80
|
+
### [STORY-slim-088] Slim dependencies and robust CLI fallback
|
|
81
|
+
> Spec: docs/specs/STORY-slim-088.md
|
|
82
|
+
|
|
83
|
+
- [x] Move adapters+tree-sitter to optional-dependencies
|
|
84
|
+
- [x] Add python3 -m fallback for spec-lint in playbooks
|
|
85
|
+
- [x] Fix add_story call signature in Plan playbook
|
|
86
|
+
|
|
87
|
+
### [HOTFIX-slim-087] guard 添加 -C 参数
|
|
88
|
+
> Spec: docs/specs/HOTFIX-slim-087.md
|
|
89
|
+
|
|
90
|
+
- [x] Fix guard CWD false alarm in subagent
|
|
91
|
+
|
|
92
|
+
### [BUG-slim-089] Global CLAUDE.md overwritten on every deploy
|
|
93
|
+
> Spec: docs/specs/BUG-slim-089.md
|
|
94
|
+
|
|
95
|
+
- [x] Add _is_pactkit_managed_global_md helper
|
|
96
|
+
- [x] Refactor _deploy_claude_md with read-before-write guard
|
|
97
|
+
- [x] Add unit tests for AC1-AC5
|
|
98
|
+
|
|
99
|
+
### [STORY-slim-090] Interactive HTML Report Skill (D3 Force Graph)
|
|
100
|
+
> Spec: docs/specs/STORY-slim-090.md
|
|
101
|
+
|
|
102
|
+
- [x] Implement MMD parser (graph TD + classDiagram)
|
|
103
|
+
- [x] Create D3 HTML template with force simulation
|
|
104
|
+
- [x] Implement render_html with zoom/pan/drag/hover/search/theme
|
|
105
|
+
- [x] Add overlay support (blast radius, complexity, layers)
|
|
106
|
+
- [x] Create skill entry point + CLI
|
|
107
|
+
- [x] Write unit tests
|
|
108
|
+
|
|
109
|
+
### [STORY-slim-089] Enterprise Code Analysis: Blast Radius, Cyclomatic Complexity, Layer Violations
|
|
110
|
+
> Spec: docs/specs/STORY-slim-089.md
|
|
111
|
+
|
|
112
|
+
- [x] Add complexity counting to LanguageAnalyzer interface
|
|
113
|
+
- [x] Implement Python complexity in PythonAnalyzer
|
|
114
|
+
- [x] Implement TS/Go/Java complexity in TreeSitterAnalyzer subclasses
|
|
115
|
+
- [x] Add blast_radius() with bidirectional BFS
|
|
116
|
+
- [x] Add complexity() report function
|
|
117
|
+
- [x] Add layers() with configurable layer model
|
|
118
|
+
- [x] Add CLI subcommands (blast_radius, complexity, layers)
|
|
119
|
+
- [x] Write unit tests for all 3 features
|
|
120
|
+
|
|
121
|
+
### [STORY-slim-091] Harness Audit Skill: H1-H7 AI Readiness Assessment
|
|
122
|
+
> Spec: docs/specs/STORY-slim-091.md
|
|
123
|
+
|
|
124
|
+
- [x] Implement H1-H7 layer checks
|
|
125
|
+
- [x] Implement scoring model (sum/21 + min≥L1)
|
|
126
|
+
- [x] Implement findings aggregator
|
|
127
|
+
- [x] Implement insights (fan-in, blast top10, circular deps, god objects)
|
|
128
|
+
- [x] Register CLI subcommand (audit --json/--layer/--append)
|
|
129
|
+
- [x] Integrate into Done Phase 3.x
|
|
130
|
+
- [x] Integrate into Plan Phase 1 (optional read)
|
|
131
|
+
- [x] Write unit tests
|
|
132
|
+
|
|
133
|
+
### [STORY-slim-092] Audit Findings: File-Level Hotspot Aggregation
|
|
134
|
+
> Spec: docs/specs/STORY-slim-092.md
|
|
135
|
+
|
|
136
|
+
- [x] Add _compute_hotspots() file-level aggregation
|
|
137
|
+
- [x] Add _suggest_action() actionable suggestions
|
|
138
|
+
- [x] Slim _write_audit_json() to scorecard + hotspots only
|
|
139
|
+
- [x] Add --verbose flag for full details
|
|
140
|
+
- [x] Update tests for hotspot + slim JSON
|
|
141
|
+
|
|
142
|
+
### [STORY-slim-093] Audit: Multi-Signal Hotspots + Suggested Tasks Generation
|
|
143
|
+
> Spec: docs/specs/STORY-slim-093.md
|
|
144
|
+
|
|
145
|
+
- [x] Add test coverage signal (_check_test_coverage)
|
|
146
|
+
- [x] Add docstring coverage signal (_check_docstring_coverage)
|
|
147
|
+
- [x] Add code smell signal (_check_code_smells)
|
|
148
|
+
- [x] Add layer violation signal (_count_layer_violations)
|
|
149
|
+
- [x] Add dependency health check (_check_dependency_health)
|
|
150
|
+
- [x] Update hotspot score formula (weighted multi-dimensional)
|
|
151
|
+
- [x] Update action suggestions (7-level priority)
|
|
152
|
+
- [x] Add suggested tasks generation (_generate_suggested_tasks)
|
|
153
|
+
- [x] Update JSON schema (suggested_tasks + dependency_health)
|
|
154
|
+
- [x] Write unit tests for all new signals + tasks
|
|
155
|
+
|
|
156
|
+
### [STORY-slim-097] Dual-dimension Harness Audit: Config + Code
|
|
157
|
+
> Spec: docs/specs/STORY-slim-097.md
|
|
158
|
+
|
|
159
|
+
- [x] R1: _all_config_dirs helper
|
|
160
|
+
- [x] R2: Code dimension checks
|
|
161
|
+
- [x] R3: Dual scoring formula
|
|
162
|
+
- [x] R4: Layer level both dimensions
|
|
163
|
+
- [x] R5: JSON dimensions breakdown
|
|
164
|
+
- [x] R6: Global config scan
|
|
165
|
+
|
|
166
|
+
### [HOTFIX-slim-096] Report --all filter core graphs only
|
|
167
|
+
> Spec: docs/specs/HOTFIX-slim-096.md
|
|
168
|
+
|
|
169
|
+
- [x] Filter unified dashboard to core PDCA graphs, exclude focus/reverse/workflow
|
|
170
|
+
|
|
171
|
+
### [STORY-slim-094] Unified HTML Report — single aggregated dashboard
|
|
172
|
+
> Spec: docs/specs/STORY-slim-094.md
|
|
173
|
+
|
|
174
|
+
- [x] R1: Unified single HTML with Tab switching
|
|
175
|
+
- [x] R2: Left panel audit dashboard
|
|
176
|
+
- [x] R3: Right panel hotspot details
|
|
177
|
+
- [x] R4: Single file backward compat
|
|
178
|
+
- [x] R5: Self-contained offline HTML
|
|
179
|
+
- [x] R6: Overlay auto-detect
|
|
180
|
+
- [x] R7: CLI pactkit report subcommand
|
|
181
|
+
|
|
182
|
+
### [STORY-slim-095] Fix visualize focus call graph + report empty tab
|
|
183
|
+
> Spec: docs/specs/STORY-slim-095.md
|
|
184
|
+
|
|
185
|
+
- [x] R1: Fix focus filter in _build_call_graph
|
|
186
|
+
- [x] R2: Report empty Tab placeholder
|
|
187
|
+
- [x] R3: Skip empty .mmd in unified report
|
|
188
|
+
|
|
189
|
+
### [STORY-slim-098] PDCA Nudge Protocol — AI主动推荐PDCA命令
|
|
190
|
+
> Spec: docs/specs/STORY-slim-098.md
|
|
191
|
+
|
|
192
|
+
- [x] 创建11-pdca-nudge.md规则模板
|
|
193
|
+
- [x] 在VALID_RULES注册新规则
|
|
194
|
+
- [x] 添加部署测试
|
|
195
|
+
- [x] 运行deploy验证
|
|
196
|
+
|
|
197
|
+
### [HOTFIX-slim-099] Fix version mismatch guard semantic comparison
|
|
198
|
+
> Spec: docs/specs/HOTFIX-slim-099.md
|
|
199
|
+
|
|
200
|
+
- [x] Use packaging.version for directional version comparison in guards.py
|
|
201
|
+
|
|
202
|
+
### [STORY-slim-099] Add Act Phase reference to Shared Protocols Context.md section
|
|
203
|
+
> Spec: docs/specs/STORY-slim-099.md
|
|
204
|
+
|
|
205
|
+
- [x] Update Shared Protocols Referenced-by line
|
|
206
|
+
- [x] Redeploy via pactkit update
|
|
207
|
+
- [x] Verify deployed plugin sync
|