# Changelog

## Score

- CAI 72 → 71 (-1.0)
- Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.

## Lenses

- Code Health 68 → 66 (-2.3)
- Architecture 100 → 100 (+0.0)
- Maturity 76 → 76 (-0.1)
- Readiness 83 → 83 (+0.0)
- Security 71 → 71 (+0.4)

## Resolved (86)

- CommandRegistrar.resolve_skill_placeholders (cognitive 22) (src/specify_cli/agents.py)
- CopilotIntegration.dispatch_command (cognitive 19) (src/specify_cli/integrations/copilot/__init__.py)
- CopilotIntegration.dispatch_command (cyclomatic 16) (src/specify_cli/integrations/copilot/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/bundler/services/adapters.py)
- Duplicated block (10 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/presets/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/presets/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/_commands.py)
- Duplicated block (11 lines × 2) (extensions/git/scripts/python/auto_commit.py)
- Duplicated block (11 lines × 2) (src/specify_cli/bundler/services/primitives.py)
- Duplicated block (11 lines × 2) (src/specify_cli/extensions/__init__.py)
- Duplicated block (11 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (11 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (11 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (11 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (11 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (11 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (11 lines × 2) (src/specify_cli/workflows/steps/command/__init__.py)
- Duplicated block (11 lines × 3) (src/specify_cli/presets/_commands.py)
- …and 66 more

## New (205)

- AlquimiaAIIntegration._inject_frontmatter_flag (cognitive 21) (src/specify_cli/integrations/alquimia/__init__.py)
- AlquimiaAIIntegration.inject_argument_hint (cognitive 19) (src/specify_cli/integrations/alquimia/__init__.py)
- CommandStep.execute (cognitive 21) (src/specify_cli/workflows/steps/command/__init__.py)
- CommandStep.execute (cyclomatic 20) (src/specify_cli/workflows/steps/command/__init__.py)
- CopilotIntegration.is_skills_mode (cognitive 23) (src/specify_cli/integrations/copilot/__init__.py)
- CopilotIntegration.is_skills_mode (cyclomatic 16) (src/specify_cli/integrations/copilot/__init__.py)
- DroidIntegration._inject_frontmatter_flag (cognitive 16) (src/specify_cli/integrations/droid/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/bundler/services/primitives.py)
- Duplicated block (10 lines × 2) (src/specify_cli/events.py)
- Duplicated block (10 lines × 2) (src/specify_cli/extensions/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/extensions/_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/integrations/_migrate_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/presets/__init__.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/_commands.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/catalog.py)
- Duplicated block (10 lines × 2) (src/specify_cli/workflows/steps/command/__init__.py)
- Duplicated block (10 lines × 3) (src/specify_cli/presets/__init__.py)
- …and 185 more

## Changes since last survey

- 75 commits — 26 feature/other, 49 fixes

## By area

- src/specify_cli — 48 commits
- (root) — 5 commits
- docs/community — 4 commits
- (repo) — 3 commits
- .github/workflows — 2 commits
- extensions/catalog.community.json — 2 commits
- tests/test_extensions.py — 2 commits
- .github/scripts — 1 commit
- docs/reference — 1 commit
- newsletters/2026-April.md — 1 commit
- presets/constitution-sync — 1 commit
- scripts/powershell — 1 commit
- scripts/python — 1 commit
- tests/integrations — 1 commit
- tests/test_workflows.py — 1 commit
- workflows/catalog.community.json — 1 commit

## Notable commits

- fix: [bug-fix] Fix bundle-update-force-mislead: add refresh() to DefaultPrimitiveInstaller (#3452)
- fix: [bug-fix] Fix upgrade-overwrites-copilot-skills: pass force=True to extension skill re-registration after upgrade (#3853)
- fix: fix(agents): coerce a non-string description in TOML command rendering (#3799)
- fix: fix(bundler): treat an explicit-null manifest field as missing, not the text "None" (#3798)
- fix: fix(bundler): wrap local catalog decode failures (#3902)
- fix: fix(catalogs): validate the port in the shared catalog-URL validator, like its mirrors do (#3804)
- fix: fix(cli): render the literal [suffix] in --tag help and rejection message (#3800)
- fix: fix(events): ignore non-UTF-8 event overrides (#3897)
- fix: fix(events): preserve a non-UTF-8 config.toml on hook install/teardown (#3963)
- fix: fix(events): return None for an unparseable script command (#3957)
- fix: fix(events): skip non-UTF-8 extension manifests (#3900)
- fix: fix(extensions): reject reinstall when a kept config cannot be read (#3960)
- fix: fix(extensions): treat an unreadable staged backup as a conflict (#3962)
- fix: fix(integrations): don't abort uninstall when the manifest can't be deleted (#3805)
- fix: fix(integrations): preserve non-UTF-8 VS Code settings (#3833)
- fix: fix(kimi): preserve non-UTF-8 user skills (#3895)
- fix: fix(manifests): reject non-string metadata instead of crashing on it (#3943)
- fix: fix(manifests): reject non-string requires.speckit_version (#3980)
- fix: fix(presets): escape user-supplied catalog name/URL in add/remove output (#3806)
- fix: fix(presets): restore core skills instead of deleting them on preset remove (#3929)
- …and 55 more
