Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@

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

# [0.16.0+adlc3] - 2026-08-11

### Changed

- **`agentic-change` preset no longer preinstalled**: `presets/catalog.json`
now sets `agentic-change.preinstall` to `false`. The preset's commands
(`/change.specify`, `/change.implement`, `/change.converge`,
`/change.levelup`) are no longer auto-scaffolded by `specify init`. The
preset remains bundled in the wheel and installable on demand via
`specify preset add agentic-change`. The `agentic-sdlc` and `agentic-quick`
presets are unaffected.

# [0.16.0+adlc2] - 2026-08-07

### Changed
Expand Down
1 change: 1 addition & 0 deletions FORK.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ When a fork release changes only bundled extension behavior, keep the CLI versio

| Version | Date | Base Upstream | Changes |
|---------|------|---------------|---------|
| 0.16.0+adlc3 | 2026-08-11 | 0.16.0 (`adb2413a`) | `agentic-change` preset no longer preinstalled. `presets/catalog.json` flips `agentic-change.preinstall` from `true` to `false`; the preset's 4 commands (`/change.specify`, `/change.implement`, `/change.converge`, `/change.levelup`) are no longer auto-scaffolded by `specify init`. The preset remains `bundled: true` (shipped in the wheel) and installable on demand via `specify preset add agentic-change`. `agentic-sdlc` and `agentic-quick` presets are unaffected. No Python source changed — the install scaffold (`_init_fork.py:339-369`) already honors the catalog `preinstall` flag, so the flip is purely data-driven. Doc consistency: `presets/agentic-change/README.md` Installation section rewritten to declare opt-in status; `README.md` bundled-presets blurb (line 33) and table (line 284-294) split bundled-vs-preinstalled and mark `agentic-change` as ❌ opt-in. |
| 0.16.0+adlc1 | 2026-08-06 | 0.16.0 (`adb2413a`) | Upstream merge (18 commits, post-0.15.2 → 0.16.0 release `6fa8c9aa`). New upstream feature: `feat(init): scaffold managed .specify/.gitignore` (#4000 — manifest-tracked `.specify/.gitignore` excludes `feature.json` + `extensions/*/local-config.yml`; routed through shared-infra overwrite/skip/preserve policy; 8 integration test inventories + new `test_shared_infra_gitignore.py`). New upstream fixes: escape user-supplied values in `specify init` output (#3787 — `_escape_markup` + `_shell_quote_arg` for the `cd` line, the only CLI module without escaping), reapply presets/extensions on `init --here --force` (#3995 — `_register_presets_for_agent`/`_register_extensions_for_agent` after `manifest.save()`), bound response read in integration catalog fetch (#3812 — `read_response_limited` + `MAX_JSON_METADATA_BYTES`), `missing_ok` temp-file cleanup (#3803), unreadable run state in `workflow status` (#3999), skip corrupted run state in `list_runs` (#3814/#3817), non-UTF-8 extension registry (#3998) + unreadable layer in `resolve_content` (#3959) + EOFError wrap for truncated tar.gz (#3938), line-anchored `---` delimiter scan for hermes+kimi (#3739), keep long frontmatter on single line (#3989 — `yaml.dump(width=float("inf"))`), legacy code-page fix for `check_prerequisites`/`setup_tasks` Python scripts (#3890/#3892). **4 conflicts resolved**: `pyproject.toml` (kept fork name/description, version → `0.16.0+adlc1`), `commands/init.py` (wrapped user-controlled display values with `_escape_markup` *inside* fork's `accent()` theming — project name, paths, echoed `--integration`/`--script`, agent folder in gitignore hint; adopted `_shell_quote_arg` for the Next Steps `cd` line; `f31b2b45` reapply-on-`--force` block auto-merged in un-themed region), `tests/integrations/test_integration_catalog.py` (adopted upstream's restructured file + bounded `FakeResponse`; **fixed mock target**: upstream's `_patch_urlopen` patched `urllib.request.urlopen` but `open_url` uses `opener.open()` which never calls module-level `urlopen` → tests hit real network; switched mock to `open_url` directly, preserving upstream's bounded-read `FakeResponse` for `read_response_limited` contract; applies to both `_patch_urlopen` and the oversized-response regression test), `tests/integrations/test_integration_base_toml.py` (added `.specify/.gitignore` to fork's `stem_pfx` inventory). All other conflict-candidate files auto-merged cleanly, preserving fork customizations: `shared_infra.py` (`.gitignore` block + `missing_ok` + `COMMAND_PREFIX`/`project_path`/theming), `extensions/__init__.py` (non-UTF-8 registry + catalog-URL override + alias logic), `hermes/__init__.py` (line-anchored delimiter + `resolve_command_alias`/`COMMAND_PREFIX`), `agents.py` (`width=float("inf")` + `_skip_primary`/`inject_model_invocation_flag`), `presets/__init__.py` (`resolve_content` guard + `_cleanup_replaced_commands`), `workflows/_commands.py` (unreadable-run-state guard + theming), `update_agent_context.py` (symlink-safe recursive plan discovery + `missing_ok` + fork team-directives block). Fork modules (`_*_fork.py`, `extensions_fork.py`) untouched. No `templates/` changes upstream → no preset porting. Ruff clean (`ruff@0.15.0`). 2629 tests pass across merge-affected files (110 catalog, 122 init/cli, 138 generic/cline/copilot, 2259 infra/workflow/preset/extension/parity). Live smoke: `specify init` scaffolds `.specify/.gitignore` (manifest-tracked, excludes `feature.json` + `extensions/*/local-config.yml`); `specify extension update` (after clearing `.specify/extensions/.cache/`) finds all fork-bundled extensions up-to-date via fork-repo catalog URL. |
| 0.15.2+adlc4 | 2026-08-05 | 0.15.2 (`68daed8f`) | Extension catalog URL override. `ExtensionCatalog.DEFAULT_CATALOG_URL` and `COMMUNITY_CATALOG_URL` now point at the fork's repo (`tikalk/agentic-sdlc-spec-kit`) instead of upstream (`github/spec-kit`). Previously `specify extension update` fetched upstream's catalog → fork-bundled extensions (`levelup`, `team-ai-directives`, `evals`, `edd`, `architect`) showed "Not found in catalog" and `tdd`/`product` showed "Updates not allowed from 'community'" (found in upstream's community catalog instead of the fork's bundled catalog). Fork constants `FORK_DEFAULT_CATALOG_URL`/`FORK_COMMUNITY_CATALOG_URL` added to `_core_fork.py`; override applied in `extensions/__init__.py` ExtensionCatalog class body (try/except with fallback to upstream URLs). 106 catalog tests pass. Live smoke: `specify extension update` now finds all 8 fork-bundled extensions as up-to-date. Note: stale catalog cache (from old upstream URL) may persist for up to 1 hour after upgrade; clear `.specify/extensions/.cache/` to force immediate refresh. |
| 0.15.2+adlc3 | 2026-08-05 | 0.15.2 (`68daed8f`) | assess/bug extension command-reference fix. `_build_preset_command_placeholder_map()` in `integrations/base.py` extended to scan `.specify/extensions/*/extension.yml` `provides.commands[].aliases` (previously only scanned preset manifests) — `__SPECKIT_COMMAND_ASSESS_*__`/`__SPECKIT_COMMAND_BUG_*__` placeholders now resolve to `/assess.*`/`/bug.*` instead of the broken prefix fallback `/spec.assess.*`. Aliases added to `assess` extension (1.0.0→1.0.1, 5 aliases: `assess.intake/research/define/shape/decide`) and `bug` extension (1.0.0→1.0.1, 3 aliases: `bug.assess/fix/test`); catalog.json versions bumped. With `EXTENSION_ALIAS_PATTERN_ENABLED`, files install as `assess.intake.md`/`bug.fix.md` (fork convention, matching git extension). Latent defect since `0.14.4+adlc1` (when assess/bug were bundled). Regression tests in `test_base.py` (placeholder map unit), `test_assess_extension.py` + `test_bug_extension.py` (alias declaration + rendering: no unresolved placeholders, refs match installed files). Existing `test_extension_command_dot/hyphen` tests updated to use clean tmp_path (no extensions) for fallback path. Ruff clean (`ruff@0.15.0`). 1189 tests pass. Live smoke: `specify init` + `extension add assess` → `.opencode/commands/assess.intake.md` with `/assess.research` refs and `/spec.specify` handoff. |
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ The original [github/spec-kit](https://github.com/github/spec-kit) repository fo

- **Bundled extensions — new capabilities beyond core SDD.** Ships fork-owned extensions: `architect` (ADRs + Rozanski & Woods architecture descriptions), `product` (PRDs & PDRs), `tdd` (strict RED→GREEN→REFACTOR with risk-based testing), `edd`/`evals` (evaluation-driven development with PromptFoo), and `workflow` (mission-driven SDLC automation with supervision modes). See [📦 Bundled Extensions](#-bundled-extensions).

- **Bundled presets — stackable workflow customizations.** Ships `agentic-sdlc` (full lifecycle: specify → plan → tasks → implement → converge), `agentic-change` (lightweight change proposals), and `agentic-quick` (session-based ad-hoc execution) — all pre-installed at `specify init`. See [📦 Bundled Presets](#-bundled-presets).
- **Bundled presets — stackable workflow customizations.** Ships `agentic-sdlc` (full lifecycle: specify → plan → tasks → implement → converge), `agentic-change` (lightweight change proposals, opt-in), and `agentic-quick` (session-based ad-hoc execution) — `agentic-sdlc` and `agentic-quick` are pre-installed at `specify init`, while `agentic-change` installs on demand via `specify preset add agentic-change`. See [📦 Bundled Presets](#-bundled-presets).

- **Execution enhancements.** DAG-aware task orchestration with wave-based parallel/sequential execution, dual execution loop (`[SYNC]`/`[ASYNC]` task classification), and feature-level git worktree isolation with task-branch workflow (`git.task`, `git.task-merge`) — extending the upstream `git` extension with worktree and DAG capabilities.

Expand Down Expand Up @@ -283,13 +283,13 @@ This fork includes pre-installed extensions:

## 📦 Bundled Presets

This fork includes pre-installed presets (auto-installed during `specify init`):
This fork ships bundled presets (included in the wheel). Pre-installed presets are auto-scaffolded by `specify init`; opt-in presets install on demand with `specify preset add <id>`:

| Preset | Commands | Purpose |
|--------|----------|---------|
| agentic-sdlc | `/spec.*` | Full Agentic SDLC lifecycle — specify, plan, tasks, implement, converge |
| agentic-change | `/change.specify`, `/change.implement`, `/change.converge`, `/change.levelup` | Lightweight change proposal workflow with spec + tasks artifacts |
| agentic-quick | `/quick.implement`, `/quick.levelup` | Session-based ad-hoc task execution with CDR levelup |
| Preset | Commands | Purpose | Pre-installed |
|--------|----------|---------|---------------|
| agentic-sdlc | `/spec.*` | Full Agentic SDLC lifecycle — specify, plan, tasks, implement, converge | ✅ |
| agentic-change | `/change.specify`, `/change.implement`, `/change.converge`, `/change.levelup` | Lightweight change proposal workflow with spec + tasks artifacts | ❌ opt-in |
| agentic-quick | `/quick.implement`, `/quick.levelup` | Session-based ad-hoc task execution with CDR levelup | ✅ |

> **Migration note:** The `quick` extension has been replaced by the `agentic-change` and `agentic-quick` bundled presets. If you have the old `quick` extension installed, run `specify extension remove quick && specify init` to migrate.

Expand Down
8 changes: 7 additions & 1 deletion presets/agentic-change/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@ A lightweight change proposal workflow modeled on OpenSpec concepts. Create stru

## Installation

This preset is pre-installed when you run `specify init`. It co-exists with the `agentic-sdlc` preset.
This preset is **opt-in** — it is bundled with the Specify CLI but no longer auto-installed by `specify init`. Add it to a project with:

```bash
specify preset add agentic-change
```

It co-exists with the `agentic-sdlc` preset.

## Commands

Expand Down
2 changes: 1 addition & 1 deletion presets/catalog.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
"repository": "https://github.com/tikalk/agentic-sdlc-spec-kit",
"license": "MIT",
"bundled": true,
"preinstall": true,
"preinstall": false,
"requires": {
"speckit_version": ">=0.6.0"
},
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "agentic-sdlc-specify-cli"
version = "0.16.0+adlc2"
version = "0.16.0+adlc3"
description = "Specify CLI (tikalk fork). Agentic SDLC toolkit for Spec-Driven Development with pre-installed extensions and AI integrations."
readme = "README.md"
requires-python = ">=3.11"
Expand Down
Loading