diff --git a/CHANGELOG.md b/CHANGELOG.md index bca9844da6..17928d9c0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/FORK.md b/FORK.md index 815db8bb06..b9d2c134d9 100644 --- a/FORK.md +++ b/FORK.md @@ -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. | diff --git a/README.md b/README.md index 91761ef353..c9518d7c0d 100644 --- a/README.md +++ b/README.md @@ -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. @@ -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 `: -| 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. diff --git a/presets/agentic-change/README.md b/presets/agentic-change/README.md index cda9562a2b..f7a922e476 100644 --- a/presets/agentic-change/README.md +++ b/presets/agentic-change/README.md @@ -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 diff --git a/presets/catalog.json b/presets/catalog.json index 412eb1a791..76f558c8aa 100644 --- a/presets/catalog.json +++ b/presets/catalog.json @@ -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" }, diff --git a/pyproject.toml b/pyproject.toml index 36ae95d9a9..fed5a9cb2f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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"