|
2 | 2 |
|
3 | 3 | All notable changes to the Specify CLI and templates are documented here. |
4 | 4 |
|
| 5 | +# [0.12.15+adlc2] - 2026-07-15 |
| 6 | + |
| 7 | +### Changed |
| 8 | + |
| 9 | +- **Upstream merge**: Synced with `github/spec-kit` (2 commits, post-0.12.15): |
| 10 | + - **While/do-while non-list steps guard (#3519)**: `WhileStep.execute()` and |
| 11 | + `DoWhileStep.execute()` now return FAILED when `steps` is not a list, |
| 12 | + instead of crashing with `AttributeError` on an unvalidated run. Mirrors |
| 13 | + the same fail-fast pattern already applied to if/switch/fan-out steps in |
| 14 | + the 0.12.14 merge. 6 new parametrized tests in `test_workflows.py`. |
| 15 | + - **PyPI install docs (#3425/#3516)**: upstream added `docs/install/pypi.md` |
| 16 | + and updated `docs/installation.md`, `docs/toc.yml`, `README.md` to |
| 17 | + document PyPI as a second install route. Fork adopted the docs additions |
| 18 | + but kept its own README install section (fork installs from |
| 19 | + `tikalk/agentic-sdlc-spec-kit` under `agentic-sdlc-v*` tags, not PyPI). |
| 20 | +- **Conflict resolved** (1): |
| 21 | + - `README.md` — kept fork's install instructions (tikalk repo, `uvx` |
| 22 | + one-time option); dropped upstream's PyPI install block (fork doesn't |
| 23 | + publish to PyPI under the upstream package name). |
| 24 | +- All other files (`while_loop/__init__.py`, `do_while/__init__.py`, |
| 25 | + `test_workflows.py`, `docs/install/pypi.md`, `docs/installation.md`, |
| 26 | + `docs/toc.yml`) auto-merged cleanly. |
| 27 | +- Test suite: 613 passed, 1 skipped (`tests/test_workflows.py`). |
| 28 | +- Smoke test: `specify init /tmp/merge-test2 --integration claude --script sh |
| 29 | + --ignore-agent-tools` succeeds. |
| 30 | + |
| 31 | +# [0.12.15+adlc1] - 2026-07-15 |
| 32 | + |
| 33 | +### Changed |
| 34 | + |
| 35 | +- **Upstream merge**: Synced with `github/spec-kit` (12 commits, 1 release |
| 36 | + 0.12.15): |
| 37 | + - **Git extension Python port (#3400)**: Adopted upstream's 4 basic Python |
| 38 | + scripts (`auto_commit.py`, `create_new_feature_branch.py`, `git_common.py`, |
| 39 | + `initialize_repo.py`) under `extensions/git/scripts/python/`. Fork retains |
| 40 | + its enhanced bash/PS1 scripts for fork-only commands (worktree, tasks-dag, |
| 41 | + isolation mode, etc.). Python parity tests |
| 42 | + (`test_git_extension_python_parity.py`) skipped via `PKG_NAMES` guard since |
| 43 | + fork's bash scripts produce enhanced output upstream's basic Python scripts |
| 44 | + don't replicate. |
| 45 | + - **Workflow CLI / extension command surface alignment (#3419)**: Adopted |
| 46 | + upstream's atomic install transaction in `workflows/_commands.py` — |
| 47 | + command installation is now transactional (all-or-nothing) with rollback |
| 48 | + on failure. Applied fork's `accent()` theming on top. |
| 49 | + - **Goose YAML control-char escaping (#3384)**: Goose recipe YAML renderer |
| 50 | + now escapes control characters that previously produced invalid YAML. |
| 51 | + - **Env-var config leak fix (#3497)**: Extension env-var config no longer |
| 52 | + leaks across prefix-colliding extension IDs. |
| 53 | + - **init-options.json newline (#3509)**: `init-options.json` output now |
| 54 | + ends with a trailing newline. |
| 55 | + - **Workflow engine fixes**: non-iterable right operand in `in`/`not in` |
| 56 | + membership tests (#3447/#3468); malformed catalog URL raises catalog |
| 57 | + error, not raw `ValueError` (#3484). |
| 58 | + - **Community catalog additions**: Multi-Repo Branch Sync extension (#3411), |
| 59 | + PatchWarden Evidence Pack extension (#3514). |
| 60 | + - **Community catalog updates**: DocGuard CDD Enforcement v0.32.0 (#3489), |
| 61 | + Autonomous Run Governance preset v0.1.4 (#3511). |
| 62 | +- **Conflicts resolved** (2): |
| 63 | + - `pyproject.toml` — preserved fork `name`/`description`/`httpx` dep and |
| 64 | + force-include block; set version `0.12.14+adlc1` → `0.12.15+adlc1`. |
| 65 | + - `src/specify_cli/workflows/_commands.py` — adopted upstream's atomic |
| 66 | + install transaction (transactional command installation with rollback) |
| 67 | + and applied fork's `accent()` theming on the new UI strings. |
| 68 | +- All other modified files (`_github_http.py`, `_init_options.py`, |
| 69 | + `bundler/lib/yamlio.py`, `bundler/services/installer.py`, |
| 70 | + `extensions/__init__.py`, `integrations/base.py`, `workflows/catalog.py`, |
| 71 | + `workflows/engine.py`, test files, docs, catalog JSON) auto-merged cleanly. |
| 72 | +- Fork-only modules and tests preserved. `PKG_NAMES` skip guard added to |
| 73 | + `test_git_extension_python_parity.py` to skip parity tests on fork. |
| 74 | +- Test suite: all passing across contract, unit, integration, scripts, and |
| 75 | + integration test suites (including 366 registry tests, 115 subcommand |
| 76 | + lifecycle tests, and all per-agent integration tests). |
| 77 | +- Smoke test: `specify init /tmp/merge-test --integration claude --script sh |
| 78 | + --ignore-agent-tools` succeeds; version reports `0.12.15+adlc1`. |
| 79 | + |
| 80 | +# [0.12.14+adlc1] - 2026-07-14 |
| 81 | + |
| 82 | +### Changed |
| 83 | + |
| 84 | +- **Upstream merge**: Synced with `github/spec-kit` (29 commits, 3 releases |
| 85 | + 0.12.12–0.12.14): |
| 86 | + - **Workflow engine hardening**: fail-fast on non-list `wait_for` (#3482), |
| 87 | + non-mapping `switch` cases (#3481), non-iterable membership tests (#3448), |
| 88 | + falsy non-list `else` in `if` steps (#3264), bool `max_iterations` (#3270), |
| 89 | + mis-shaped catalog registry & non-string fields (#3375), and command-step |
| 90 | + `input`/`options` must be mappings (#3262). Engine validation is now |
| 91 | + shared between `execute()` and `validate()` so callers that skip |
| 92 | + `WorkflowEngine.validate()` still fail the step cleanly instead of |
| 93 | + crashing or silently coercing. |
| 94 | + - **Configurable shell-step timeout consolidation (#3327/#3328)**: replaces |
| 95 | + the fork's simpler #3404 baseline with upstream's shared |
| 96 | + `_timeout_error()` helper used by both `execute()` and `validate()`. |
| 97 | + Returns FAILED instead of silently resetting to 300s, and additionally |
| 98 | + rejects non-finite floats (YAML `.inf`/`.nan`). |
| 99 | + - **Extension-relative subdir path rewriting (#3444)**: adopted upstream's |
| 100 | + new `CommandRegistrar.rewrite_extension_paths()` static method so bundled |
| 101 | + extension command bodies reference their installed location under |
| 102 | + `.specify/extensions/<id>/` instead of the workspace root. |
| 103 | + - **Preset manifest-authoritative template resolution (#3351)**: |
| 104 | + `PresetResolver.resolve()` now honors manifest-declared `file:` entries |
| 105 | + via the new `_manifest_declared_template()` helper, and does NOT fall back |
| 106 | + to convention lookup when a declared file is missing — mirrors |
| 107 | + `collect_all_layers()` so `resolve()` and `resolve_with_source()` agree |
| 108 | + instead of returning the core template or a stray convention file. |
| 109 | + - **Bundle hardening**: reject `file://`/local `download_url` — catalog URLs |
| 110 | + must be HTTPS (#3344). |
| 111 | + - **Extensions/presets**: `set-priority` repairs corrupted boolean priority |
| 112 | + (#3268/#3269); prefix-colliding env vars handled in `_get_env_config` |
| 113 | + (#3350). |
| 114 | + - **Integrations**: kiro-cli declared multi-install safe (#3471/#3472/#3485); |
| 115 | + exit cleanly on unbalanced quote in `--integration-options` (#3457). |
| 116 | + - **Init**: don't block on confirmation for `init --here` without a TTY |
| 117 | + (#3236). Fork merged this with its `accent()` theming on the `--force` |
| 118 | + message. |
| 119 | + - **Templates**: constitution sync checklist points at installed command |
| 120 | + files (#3418); agent-file-template cleanup (#2579). Accepted upstream |
| 121 | + `templates/` changes per FORK.md policy (templates stay upstream-aligned). |
| 122 | + - **Community catalog additions**: Quality Gates enforcement extension |
| 123 | + (#3431), Verify Review Ship extension (#3450), Spec Kit Memory extension |
| 124 | + (#3455), Test-First Governance preset (#3504), Autonomous Run Governance |
| 125 | + preset (#3501). |
| 126 | + - **Docs**: bundle `--integration` (#3271), copilot skills mode |
| 127 | + deprecation (#3313), release tag `v` prefix clarification (#3463). |
| 128 | +- **Conflicts resolved** (4): |
| 129 | + - `pyproject.toml` — preserved fork `name`/`description`/`httpx` dep and |
| 130 | + the full `[tool.hatch.build.targets.wheel.force-include]` block for |
| 131 | + bundled extensions/presets; set version `0.12.11+adlc3` → `0.12.14+adlc1`. |
| 132 | + - `src/specify_cli/commands/init.py` — combined fork's `accent()` theming |
| 133 | + with upstream's clearer "Template files will be merged…" overwrite |
| 134 | + warning on the `--force` path. |
| 135 | + - `tests/test_presets.py` — kept fork's "Speckit " skill-title prefix |
| 136 | + assertion AND adopted upstream's new subdir-path-rewrite assertions |
| 137 | + (#2101) for skill restore. |
| 138 | + - `README.md` — kept fork's tikalk-flavored install instructions and |
| 139 | + `agentic-sdlc-v*` tag prefix guidance; adopted upstream's "keep the |
| 140 | + leading v" clarification. |
| 141 | +- All other modified files (`__init__.py`, `agents.py`, `integrations/base.py`, |
| 142 | + `forge/__init__.py`, `presets/__init__.py`, workflow step modules, etc.) |
| 143 | + auto-merged cleanly. Fork-only modules (`_init_fork.py`, `_core_fork.py`, |
| 144 | + `_assets_fork.py`, `_base_fork.py`, `_workflows_fork.py`, |
| 145 | + `extensions_fork.py`, `base_fork.py`) and fork-only tests preserved. |
| 146 | +- Accepted legitimate upstream deletion: `workflows/feature-squad.yml`, |
| 147 | + `tests/test_timestamp_branches.py`, and |
| 148 | + `presets/self-test/templates/agent-file-template.md`. |
| 149 | +- Rejected upstream deletion of `workflows/impl-converge-loop/workflow.yml` |
| 150 | + (fork intentionally keeps it per `0.12.4+adlc8`). |
| 151 | +- Test suite: 4335 tests collected, all passing. |
| 152 | +- FORK.md updated: added `_base_fork.py` and `_workflows_fork.py` to the |
| 153 | + module-layout table; refreshed the fork-only test inventory. |
| 154 | + |
5 | 155 | # [0.12.11+adlc3] - 2026-07-13 |
6 | 156 |
|
7 | 157 | ### Changed |
@@ -3695,6 +3845,67 @@ This release migrates fork-specific customizations to a preset system to reduce |
3695 | 3845 |
|
3696 | 3846 | The following entries are from the upstream spec-kit project and are included for reference. |
3697 | 3847 |
|
| 3848 | +## [0.12.15] - 2026-07-14 |
| 3849 | + |
| 3850 | +### Changed |
| 3851 | + |
| 3852 | +- Update Autonomous Run Governance preset to v0.1.4 (#3511) |
| 3853 | +- fix(workflows): raise catalog error, not raw ValueError, on a malformed catalog URL (#3484) |
| 3854 | +- fix(workflows): evaluate 'in'/'not in' safely on a non-iterable right operand (#3447) (#3468) |
| 3855 | +- fix: add trailing newline to init-options.json output (#3509) |
| 3856 | +- feat(workflows): align workflow CLI with extension command surface (#3419) |
| 3857 | +- fix(extensions): stop env-var config leaking across prefix-colliding extension IDs (#3497) |
| 3858 | +- fix(integrations): escape control characters in goose recipe YAML renderer (#3384) |
| 3859 | +- [extension] Update DocGuard — CDD Enforcement extension to v0.32.0 (#3489) |
| 3860 | +- [extension] Add Multi-Repo Branch Sync extension to community catalog (#3411) |
| 3861 | +- chore: release 0.12.14, begin 0.12.15.dev0 development (#3506) |
| 3862 | + |
| 3863 | +## [0.12.14] - 2026-07-13 |
| 3864 | + |
| 3865 | +### Changed |
| 3866 | + |
| 3867 | +- [extension] Add Spec Kit Memory extension to community catalog (#3455) |
| 3868 | +- Add Test-First Governance preset to community catalog (#3504) |
| 3869 | +- Add Autonomous Run Governance preset to community catalog (#3501) |
| 3870 | +- fix(workflows): validate command step input/options are mappings (#3262) |
| 3871 | +- fix(presets): resolve() honors manifest-declared file: for installed presets (#3351) |
| 3872 | +- fix(init): don't block on confirmation for 'init --here' without a TTY (#3236) |
| 3873 | +- [extension] Add Quality Gates (Enforcement Layer) extension to community catalog (#3431) |
| 3874 | +- fix(integrations): exit cleanly on unbalanced quote in --integration-options (#3457) (#3466) |
| 3875 | +- fix(integrations): declare kiro-cli multi-install safe (#3471) (#3485) |
| 3876 | +- fix(workflows): fail fan-in step on non-list wait_for instead of crashing (#3482) |
| 3877 | +- chore: release 0.12.13, begin 0.12.14.dev0 development (#3498) |
| 3878 | + |
| 3879 | +## [0.12.13] - 2026-07-13 |
| 3880 | + |
| 3881 | +### Changed |
| 3882 | + |
| 3883 | +- fix(workflows): fail switch step on non-mapping cases instead of crashing (#3481) |
| 3884 | +- Cleanup agent-file-template.md (#2579) |
| 3885 | +- fix: mark Kiro integration as multi-install safe (#3472) |
| 3886 | +- fix: rewrite extension-relative subdir paths in generated command bodies (#3444) |
| 3887 | +- fix(templates): point constitution sync checklist at installed command files (#3418) |
| 3888 | +- feat(workflows): make shell step timeout configurable (#3327) (#3328) |
| 3889 | +- docs: clarify that release tags keep the leading v prefix (#3463) |
| 3890 | +- fix(workflows): don't crash on membership test against a non-iterable (#3448) |
| 3891 | +- fix(workflows): if-step validate accepts falsy non-list else (#3264) |
| 3892 | +- chore: release 0.12.12, begin 0.12.13.dev0 development (#3490) |
| 3893 | + |
| 3894 | +## [0.12.12] - 2026-07-13 |
| 3895 | + |
| 3896 | +### Changed |
| 3897 | + |
| 3898 | +- fix(extensions): set-priority repairs corrupted boolean priority (#3268) |
| 3899 | +- fix(presets): set-priority repairs corrupted boolean priority (#3269) |
| 3900 | +- fix(workflows): engine loop cap ignores bool max_iterations (#3270) |
| 3901 | +- docs(bundles): document --integration on 'bundle update' (#3271) |
| 3902 | +- fix(workflows): harden catalog.py against mis-shaped registry & non-string fields (#3375) |
| 3903 | +- Add Verify Review Ship extension to community catalog (#3450) |
| 3904 | +- fix(bundle): reject file:// / local download_url — catalog URLs are HTTPS-only (#3344) |
| 3905 | +- fix(extensions): handle prefix-colliding env vars in _get_env_config (#3350) |
| 3906 | +- docs: document copilot skills mode (--skills) and markdown deprecation (#3313) |
| 3907 | +- chore: release 0.12.11, begin 0.12.12.dev0 development (#3460) |
| 3908 | + |
3698 | 3909 | ## [0.12.11] - 2026-07-10 |
3699 | 3910 |
|
3700 | 3911 | ### Changed |
|
0 commit comments