Skip to content

Commit 7c5b394

Browse files
authored
Merge pull request #102 from tikalk/chore/upstream-merge-0.12.14
chore: merge upstream 0.12.14–0.12.15, bump to 0.12.15+adlc2
2 parents 093a521 + 63e30ed commit 7c5b394

69 files changed

Lines changed: 12227 additions & 539 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.mcp.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"mcpServers": {
3+
"context7": {
4+
"command": "npx",
5+
"args": [
6+
"-y",
7+
"@upstash/context7-mcp"
8+
]
9+
}
10+
},
11+
"tools": {
12+
"github": {
13+
"type": "github",
14+
"tokenEnv": "GITHUB_TOKEN",
15+
"owner": "GITHUB_OWNER",
16+
"repo": "GITHUB_REPO",
17+
"baseUrl": "https://api.github.com"
18+
}
19+
}
20+
}

CHANGELOG.md

Lines changed: 211 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,156 @@
22

33
All notable changes to the Specify CLI and templates are documented here.
44

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+
5155
# [0.12.11+adlc3] - 2026-07-13
6156

7157
### Changed
@@ -3695,6 +3845,67 @@ This release migrates fork-specific customizations to a preset system to reduce
36953845

36963846
The following entries are from the upstream spec-kit project and are included for reference.
36973847

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+
36983909
## [0.12.11] - 2026-07-10
36993910

37003911
### Changed

0 commit comments

Comments
 (0)