Commit graph

507 commits

Author SHA1 Message Date
Adam Dry
cf8dfc8c37 feat: Allow teams to work together without milestone name clashes and share context by checking in certain .gsd/ directory artifacts (#338)
* feat(M001/S01): ID generation and config plumbing

Tasks:
- chore(M001/S01/T02): auto-commit after execute-task
- chore(M001/S01): auto-commit after plan-slice
- docs(S01): add slice plan

Branch: gsd/M001/S01

* feat(M001/S02): Regex hardening and backwards compat

Tasks:
- chore(M001/S02/T02): auto-commit after execute-task
- chore(M001/S02/T01): auto-commit after execute-task
- chore: untrack .gsd/ runtime files from git index
- docs(S02): add slice plan

Branch: gsd/M001/S02

* docs(M001/S03): UX — wizard toggle and documentation

Tasks:
- chore(M001/S03/T01): auto-commit after execute-task
- docs(S03): add slice plan

Branch: gsd/M001/S03

* test(M001/S04): Integration tests and end-to-end verification

Tasks:
- chore(M001/S04/T02): auto-commit after execute-task
- chore(M001/S04/T01): auto-commit after execute-task
- docs(S04): add slice plan

Branch: gsd/M001/S04

* chore(M001): record integration branch

* chore(M002): record integration branch

* docs(M002/S01): Format swap — production code, tests, and docs

Tasks:
- chore(gsd/M002/S01): auto-commit after pre-switch
- chore(M002/S01/T01): auto-commit after execute-task
- chore: untrack .gsd/ runtime files from git index
- docs(S01): add slice plan

Branch: gsd/M002/S01

* chore(M002): auto-commit after complete-milestone

* Updated to document that we don't automatically always squash to main if you started on a different branch (like a dev or feature branch)

* fix: replace vitest import with node:test in regex-hardening test

The test imported from 'vitest' which isn't installed, causing
ERR_MODULE_NOT_FOUND and failing the CI unit test step. All other
test files use node:test. Swapped the import and removed the
vitest conditional wrapper.

* chore: untrack .gsd/ (already gitignored)

* docs: fix stale 'main' references in merge comments and prompts

The slice merge code correctly resolves to the integration branch
(which may be a feature branch, worktree branch, etc.), but comments,
JSDoc, and prompt templates still said 'main' as if it were always
the literal main branch.

Updated git-service.ts, worktree.ts, system.md, and
guided-complete-slice.md to say 'integration branch' with a clear
explanation of what that means.

* Fixed preferences.md case mismatch; Added fallback for backwards compat

* Updated preferences file example to show new unique_milestone_ids setting

* Updated readme to explain best practice for working in teams

---------

Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-14 07:00:14 -06:00
deseltrus
c13b1bfc6e fix: force-add .gsd/ planning artifacts and guard handleAgentEnd reentrancy (#341)
Two bugs that interact to silently kill auto-mode:

1. smartStage() uses `git add -A` which respects .gitignore. When .gsd/
   is gitignored (common — GSD's own baseline patterns only ignore runtime
   files, but many projects ignore all of .gsd/), new planning artifacts
   (CONTEXT.md, SUMMARY.md, PLAN.md, UAT.md, DECISIONS.md) are never
   staged. They exist on disk but not in git. Squash-merges then delete
   them on main because they appear as "removed relative to main."

   Fix: after `git add -A`, force-add `.gsd/milestones/` and root
   planning files. Runtime paths are still excluded by the subsequent
   `git reset HEAD` step.

2. handleAgentEnd() has no reentrancy guard. Background job notifications
   (async_bash results) trigger additional agent_end events while the
   first handler is still running (it yields at every await). Concurrent
   dispatchNextUnit() calls race on newSession() — one cancels the other,
   silently stopping auto-mode. Combined with bug #1, the second
   dispatchNextUnit call may find the active milestone's CONTEXT.md
   missing (never committed, lost during branch switch) and stop with
   "No context or roadmap yet."

   Fix: boolean guard prevents concurrent execution. Reset in stopAuto()
   so restarts aren't blocked.

Fixes #TBD

Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-14 07:00:07 -06:00
Copilot
9c1bf837fb Fix TUI crash/corruption on code blocks with lines exceeding terminal width (#343)
* Initial plan

* Fix content renderer crash on long lines in code blocks exceeding terminal width

Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>
Co-authored-by: TÂCHES <afromanguy@me.com>
2026-03-14 06:56:07 -06:00
TÂCHES
68fa781118 Merge pull request #348 from gsd-build/copilot/fix-squash-merge-failure 2026-03-14 06:45:36 -06:00
TÂCHES
95bd7ba8aa Merge branch 'main' into copilot/fix-squash-merge-failure 2026-03-14 06:41:47 -06:00
TÂCHES
f84cd3ebe3 Merge pull request #344 from gsd-build/copilot/fix-indefinitely-hanging-issue 2026-03-14 06:41:07 -06:00
TÂCHES
aa2dc5b23f Merge branch 'main' into copilot/fix-indefinitely-hanging-issue 2026-03-14 06:36:06 -06:00
copilot-swe-agent[bot]
097cd3c8e0 fix: break infinite skip loop in gsd auto by adding roadmap [x] check to verifyExpectedArtifact
After a crash where complete-slice wrote SUMMARY+UAT but didn't mark
the roadmap [x], the idempotency check incorrectly reported the unit
as "done" (artifacts exist), while the state machine kept returning
the same complete-slice unit (roadmap shows [ ]). This caused
dispatchNextUnit to recurse forever.

Fix: verifyExpectedArtifact for complete-slice now also checks that
the slice is marked [x] in the roadmap. If not, it returns false so
the stale completion key is evicted and the unit re-runs.

Lenient if roadmap file is missing or corrupt (returns true).

Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>
2026-03-14 12:34:54 +00:00
TÂCHES
05663bad87 Merge pull request #337 from vp275/fix/strip-model-variant-suffix 2026-03-14 06:28:06 -06:00
copilot-swe-agent[bot]
eeefcb5ca8 Initial plan 2026-03-14 12:25:56 +00:00
copilot-swe-agent[bot]
35131a6bb6 Initial plan 2026-03-14 12:22:21 +00:00
TÂCHES
72101bf2c4 Merge branch 'main' into fix/strip-model-variant-suffix 2026-03-14 06:14:24 -06:00
TÂCHES
2af113b46f Merge pull request #317 from gsd-build/copilot/fix-merge-branch-issue 2026-03-14 06:13:53 -06:00
vp275
03c48efbad fix: strip variant suffix from model ID for OAuth Anthropic API calls
Model variants like `claude-opus-4-6[1m]` use bracket suffixes to
differentiate context window configurations internally, but the
Anthropic API only accepts base model IDs (e.g. `claude-opus-4-6`).

Sending the full variant ID via OAuth (Claude Max/Pro) causes a 404:
  {"type":"not_found_error","message":"model: claude-opus-4-6[1m]"}

Strip any `[...]` suffix from model.id for OAuth requests only.
API key auth is left unchanged since the behavior there is unverified.
2026-03-14 16:36:45 +05:30
TÂCHES
8f8f2aac40 Merge branch 'main' into copilot/fix-merge-branch-issue 2026-03-14 01:05:31 -06:00
TÂCHES
714712b7f3 Merge pull request #321 from gsd-build/release/v2.10.8
2.10.8
2026-03-14 01:04:53 -06:00
Lex Christopherson
1a052eaa1d 2.10.8
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 00:59:32 -06:00
TÂCHES
204bb1be99 Merge pull request #318 from gsd-build/copilot/fix-gsd-pi-package-issue
fix: prevent missing dist/loader.js in published npm package
2026-03-14 00:57:32 -06:00
TÂCHES
0fe0e77879 Merge branch 'main' into copilot/fix-merge-branch-issue 2026-03-14 00:56:43 -06:00
TÂCHES
b29d3a03c4 Merge branch 'main' into copilot/fix-gsd-pi-package-issue 2026-03-14 00:54:13 -06:00
copilot-swe-agent[bot]
bb598c78e3 fix: harden publish verification and document fix for missing dist/loader.js
Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>
2026-03-14 00:53:26 -06:00
copilot-swe-agent[bot]
71e5d09420 Initial plan 2026-03-14 00:52:48 -06:00
TÂCHES
d5f99ef626 Merge pull request #319 from gsd-build/release/v2.10.7
release: v2.10.7
2026-03-14 00:33:09 -06:00
Lex Christopherson
a3a5770326 2.10.7 2026-03-14 00:28:41 -06:00
Lex Christopherson
acc8cfa7dc docs: update changelog for v2.10.7
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 00:28:22 -06:00
copilot-swe-agent[bot]
ce67189156 revert: remove accidentally committed package dependency changes
Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>
2026-03-14 06:11:12 +00:00
copilot-swe-agent[bot]
a89f45ce91 fix(#300): update stale comments that described old buggy behavior
Co-authored-by: glittercowboy <186001655+glittercowboy@users.noreply.github.com>
2026-03-14 06:10:42 +00:00
copilot-swe-agent[bot]
ece02e5492 Initial plan 2026-03-14 06:02:16 +00:00
TÂCHES
c188fab42c Merge pull request #316 from gsd-build/fix/stale-completed-unit-oom-313
fix: treat unresolvable artifact paths as stale completion state
2026-03-14 00:00:37 -06:00
TÂCHES
500cb5f6f3 Merge branch 'main' into fix/stale-completed-unit-oom-313 2026-03-13 23:51:34 -06:00
Lex Christopherson
fe11285ed5 fix: treat unresolvable artifact paths as stale completion state (#313)
verifyExpectedArtifact() returned true when resolveExpectedArtifactPath()
returned null, conflating "unit type has no artifact" with "slice directory
missing on disk". This caused /gsd auto to infinitely skip and re-dispatch
the same stale completed-unit entry until OOM.

Now only replan-slice (the sole type with no verifiable artifact) passes
on null; all other types return false, triggering the existing eviction
logic that removes the stale key and re-runs the unit.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 23:51:04 -06:00
TÂCHES
0e96984e3f Merge pull request #315 from gsd-build/copilot/fix-auto-mode-git-issues
[WIP] Fix auto-mode force-adding .gsd/ files to git
2026-03-13 23:50:26 -06:00
TÂCHES
658e83bd58 Merge branch 'main' into copilot/fix-auto-mode-git-issues 2026-03-13 23:44:20 -06:00
TÂCHES
e6d815a26a Merge pull request #310 from gsd-build/feat/fix-merge-session
feat: auto-resolve merge conflicts via fix-merge LLM session
2026-03-13 23:41:46 -06:00
copilot-swe-agent[bot]
7299f322aa Initial plan 2026-03-14 05:40:22 +00:00
Lex Christopherson
9298467ece fix: update integration branch test to match #300 behavior
writeIntegrationBranch now intentionally updates when the branch changes
(#300). Updated the stale "idempotent — doesn't overwrite" test to assert
the new behavior, and added a separate test for same-branch idempotency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 23:37:56 -06:00
TÂCHES
ff1d7c5af9 Merge branch 'main' into feat/fix-merge-session 2026-03-13 23:37:31 -06:00
TÂCHES
6d5d918c40 Merge pull request #299 from frizynn/fix/macos-keybinding-display
fix: display ⌥ instead of Alt for keybindings on macOS
2026-03-13 23:35:00 -06:00
Lex Christopherson
33e5ec6d37 fix: replace TS parameter properties with explicit fields for Node strip-types compatibility
MergeConflictError used `public readonly` constructor parameter properties,
which are not supported by Node's --experimental-strip-types mode (type
stripping only, no TS-to-JS transforms). This crashed 19 test files on import.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-13 23:33:28 -06:00
TÂCHES
b287457250 Merge branch 'main' into feat/fix-merge-session 2026-03-13 23:32:13 -06:00
TÂCHES
475ed645b4 Merge branch 'main' into fix/macos-keybinding-display 2026-03-13 23:25:08 -06:00
TÂCHES
4901191208 Merge pull request #308 from gsd-build/copilot/search-legacy-dead-code
Remove deprecated legacy OAuth dead code
2026-03-13 23:24:51 -06:00
TÂCHES
a11b828e5d Merge branch 'main' into copilot/search-legacy-dead-code 2026-03-13 23:21:35 -06:00
TÂCHES
3fd7b9d8e2 Merge branch 'main' into feat/fix-merge-session 2026-03-13 23:21:25 -06:00
TÂCHES
1302e06f75 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:21:14 -06:00
TÂCHES
bdb5defa3a Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:20:59 -06:00
TÂCHES
742e26abc1 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:20:48 -06:00
TÂCHES
8b068f98bc Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:20:39 -06:00
TÂCHES
d887cf40d1 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:20:28 -06:00
TÂCHES
c9d626b030 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-03-13 23:20:17 -06:00