Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
b32f101
feat: Stage 2a — CopilotIntegration with shared template primitives
mnriem Mar 31, 2026
ebb909f
feat: Stage 2b — --integration flag, routing, agent.json, shared infra
mnriem Mar 31, 2026
5cce80f
feat: Stage 2 completion — integration scripts, integration.json, sha…
mnriem Mar 31, 2026
b481c26
refactor: rename shared manifest to speckit.manifest.json
mnriem Mar 31, 2026
d9bfbdb
fix: copilot update-context scripts reflect target architecture
mnriem Mar 31, 2026
ce754a2
fix: simplify copilot scripts — dispatcher sources common functions
mnriem Mar 31, 2026
94e7d55
fix: copilot update-context scripts are self-contained implementations
mnriem Mar 31, 2026
be1c741
docs: add Stage 7 activation note to copilot update-context scripts
mnriem Mar 31, 2026
ccf0c81
test: add complete file inventory test for copilot integration
mnriem Mar 31, 2026
944aafd
test: add PowerShell file inventory test for copilot integration
mnriem Mar 31, 2026
d1842d5
refactor: split test_integrations.py into tests/integrations/ directory
mnriem Mar 31, 2026
28e85c4
refactor: move file inventory tests from test_cli to test_copilot
mnriem Mar 31, 2026
f4ea768
fix: skip JSONC merge to preserve user settings, fix docstring
mnriem Mar 31, 2026
b7d7e0e
fix: warn user when JSONC settings merge is skipped
mnriem Mar 31, 2026
fda1671
fix: show template content when JSONC merge is skipped
mnriem Mar 31, 2026
83752cf
fix: document process_template requirement, merge scripts without rmtree
mnriem Mar 31, 2026
bf1b679
fix: don't overwrite pre-existing shared scripts or templates
mnriem Mar 31, 2026
8c78da1
fix: warn user about skipped pre-existing shared files
mnriem Mar 31, 2026
93e371e
test: add test for shared infra skip behavior on pre-existing files
mnriem Mar 31, 2026
380aca5
fix: address review — containment check, deterministic prompts, manif…
mnriem Mar 31, 2026
8184244
fix: correct PS1 function names, document SPECKIT_SOURCE_ONLY prerequ…
mnriem Mar 31, 2026
02fd12b
fix: add dict type check for settings merge, simplify PS1 to subprocess
mnriem Mar 31, 2026
0ea0181
fix: skip-write on no-op merge, bash subprocess, dynamic integration …
mnriem Mar 31, 2026
7d38b0d
fix: align path rewriting with release script, add .specify/.specify/…
mnriem Mar 31, 2026
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
Prev Previous commit
Next Next commit
fix: skip JSONC merge to preserve user settings, fix docstring
- _merge_vscode_settings() now returns early (skips merge) when
  existing settings.json can't be parsed (e.g. JSONC with comments),
  instead of overwriting with empty settings
- Updated _install_shared_infra() docstring to match implementation
  (scripts + templates, speckit.manifest.json)
  • Loading branch information
mnriem committed Mar 31, 2026
commit f4ea768e4305d0f0ee10a932c7ee917a4d559422
6 changes: 3 additions & 3 deletions src/specify_cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1204,9 +1204,9 @@ def _install_shared_infra(
) -> bool:
"""Install shared infrastructure files into *project_path*.

Copies ``.specify/scripts/``, ``.specify/templates/``, and
``.specify/memory/`` from the bundled core_pack or source checkout.
Tracks all installed files in ``_framework.manifest.json``.
Copies ``.specify/scripts/`` and ``.specify/templates/`` from the
bundled core_pack or source checkout. Tracks all installed files
in ``speckit.manifest.json``.
Returns ``True`` on success.
"""
from .integrations.manifest import IntegrationManifest
Expand Down
7 changes: 6 additions & 1 deletion src/specify_cli/integrations/copilot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,16 @@ def _merge_vscode_settings(src: Path, dst: Path) -> None:

Top-level keys from *src* are added only if missing in *dst*.
For dict-valued keys, sub-keys are merged the same way.

If *dst* cannot be parsed (e.g. JSONC with comments), the merge
is skipped to avoid overwriting user settings.
"""
try:
existing = json.loads(dst.read_text(encoding="utf-8"))
except (json.JSONDecodeError, OSError):
existing = {}
# Cannot parse existing file (likely JSONC with comments).
# Skip merge to preserve the user's settings.
return

new_settings = json.loads(src.read_text(encoding="utf-8"))

Expand Down
Loading