singularity-forge/CHANGELOG.md
TÂCHES 098ed35a50 fix: broken npm install — remove bundleDependencies, use postinstall symlinks (#369)
* fix: remove @gsd/* cross-deps that break npm install (#hotfix)

Workspace packages declared @gsd/* as dependencies in their own
package.json files. npm's bundleDependencies bundles packages into
node_modules/ but still tries to resolve sub-dependencies from the
registry — causing 404s for the unpublished @gsd/* scope.

- Remove @gsd/* from all dependencies (root and workspace packages)
- Add validate-pack.sh: tests tarball installability before publish
- Wire validate-pack into CI (every PR) and publish pipeline
- Bump to v2.10.10
- Update changelog

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: drop bundleDependencies, use postinstall symlinks instead

bundleDependencies with workspace packages causes npm to resolve
@gsd/* from the registry during install — 404 since they're not
published. Replace with a postinstall script that creates
node_modules/@gsd/* symlinks pointing to packages/*.

- Remove @gsd/* from dependencies and bundleDependencies
- Add link-workspace-packages.cjs (CJS, runs before ESM postinstall)
- Update validate-pack to verify symlinks after install
- Include link script in files array

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: robust validate-pack + fallback workspace linking

- Keep @gsd/* in bundleDependencies (for npm pack bundling)
- Remove @gsd/* from root dependencies (prevents 404 registry lookups)
- Add link-workspace-packages.cjs fallback for when bundled symlinks
  aren't created
- Simplified validate-pack with better error diagnostics

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: remove bundleDependencies — use postinstall symlinks only

npm 10.x fetches packument metadata for ALL deps including bundled ones.
@gsd/* packages don't exist on npm → 404 → hard install failure.

bundleDependencies is fundamentally broken for unpublished workspace
packages. Replace with:
- packages/ shipped via files array (already was)
- link-workspace-packages.cjs creates node_modules/@gsd/* symlinks in
  postinstall, pointing to packages/*
- No @gsd/* in dependencies or bundleDependencies at all

Tarball drops from 40M to 3M (no bundled node_modules).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: add .npmignore to prevent .gitignore from excluding dist/

.gitignore contains /dist/ and packages/*/dist/ which are needed in
the published tarball. Without .npmignore, npm pack respects .gitignore
and excludes them — even though "files" in package.json should override.

An empty .npmignore causes npm to ignore .gitignore entirely, letting
the "files" field control what's packed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix: avoid SIGPIPE in validate-pack on Linux

tar | grep -q causes SIGPIPE (exit 141) on Linux when grep closes the
pipe early. Write tar listing to a temp file and grep that instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 10:04:12 -06:00

25 KiB
Raw Blame History

Changelog

All notable changes to GSD are documented in this file.

Format based on Keep a Changelog.

Unreleased

Added

  • Linux voice mode: Groq Whisper API backend for fast, accurate speech-to-text (Ctrl+Alt+V toggle)
  • Auto-reads GROQ_API_KEY from project .env file
  • Fallback --backend=local for offline faster-whisper on CPU
  • Venv-aware Python detection (~/.gsd/voice-venv/bin/python3)

2.10.10 - 2026-03-14

Fixed

  • Fix broken npm install / npx gsd-pi@latest caused by unpublished @gsd/* workspace packages leaking into npm dependencies. Workspace cross-references removed from published package metadata; packages resolve via bundled node_modules/ at runtime.
  • Add pre-publish tarball install validation (validate-pack) to CI and publish pipeline, preventing broken packages from reaching npm.

2.10.9 - 2026-03-14

Added

  • Team collaboration: multiple users can work on the same repo without milestone name clashes by checking in .gsd/ planning artifacts (#338)

Changed

  • Execute-task loop detection uses adaptive reconciliation instead of hard-stopping, reducing false positives (#342)
  • Memory storage switched from better-sqlite3 to sql.js (WASM) for Node 25+ compatibility (#356)

Fixed

  • Node 22.22+ compatibility: .ts import extensions normalized to .js for module resolution (#354)
  • Infinite loop when complete-slice merges to main are interrupted (#345)
  • Credential backoff no longer triggers on transport errors; quota exhaustion handled gracefully (#353)
  • OAuth-backed providers (Gemini) no longer crash on quota exhaustion (#347)
  • Secrets skip in auto mode no longer crashes (#352)
  • Untracked runtime files discarded before branch switch to prevent checkout conflicts (#346)
  • TUI crash/corruption on code blocks with lines exceeding terminal width (#343)
  • Infinite skip loop in gsd auto broken by adding roadmap completion check
  • Model ID variant suffix stripped correctly for OAuth Anthropic API calls
  • .gsd/ planning artifacts force-added and handleAgentEnd reentrancy guarded (#341)

2.10.8 - 2026-03-14

Fixed

  • Publish verification checks dist/loader.js is non-empty (-s) and uses --ignore-scripts on npm pack --dry-run to match actual publish behaviour (#298)

2.10.7 - 2026-03-14

Added

  • GitHub Workflows skill with CI workflow template and ci_monitor tool (#294)
  • Auto-resolve merge conflicts via LLM-powered fix-merge session
  • Auto-update integration branch when user starts auto-mode from a different branch (#300)

Changed

  • Secrets manifest is re-checked before every dispatch, not just at auto mode start
  • Replaced TS parameter properties with explicit fields for Node strip-types compatibility
  • Hardened CI publish pipeline to prevent broken releases (#304)

Fixed

  • Unresolvable artifact paths now correctly treated as stale completion state, preventing OOM crashes (#313)
  • Eliminated branch checkout during slice merge that caused STATE.md conflicts (#307)
  • Removed infinite delivery retry loop for background job completions (#301)
  • Display ⌥ instead of Alt for keybindings on macOS (#299)

Removed

  • Deprecated legacy dead code from OAuth module

2.10.6 - 2026-03-13

Added

  • Native Rust output truncation module for efficient large-output handling (#268)
  • Native Rust xxHash32 hasher for hashline IDs — faster line hashing (#272)
  • Native Rust bash stream processor for single-pass chunk processing (#271)
  • Memory extraction pipeline (#261)
  • claude-opus-4-6 model with 1M context window (#288)

Fixed

  • Oversized TUI lines now truncated instead of crashing (#287)
  • Anthropic rate limit backoff now respects server-requested retry delay
  • CI publish guard: skip main package publish if already on npm

2.10.5 - 2026-03-13

Fixed

  • optionalDependencies in published gsd-pi@2.10.4 were still pinned to 2.10.2, causing users to install the broken engine binaries that 2.10.4 was meant to fix (#276)

2.10.4 - 2026-03-13

Fixed

  • Native binary distribution — .node binaries were missing from the npm tarball, causing startup crashes on all platforms since v2.10.0
  • Native loader resolution chain: tries @gsd-build/engine-{platform} npm package first, then local dev build, with clear error messages listing supported platforms

Added

  • Per-platform optional dependency packages (@gsd-build/engine-*) for macOS (ARM64/x64), Linux (x64/ARM64), and Windows (x64)
  • Cross-platform native binary CI build and publish workflow
  • Version synchronization script for lock-step platform package releases

2.10.2 - 2026-03-13

Added

  • Native Rust TTSR regex engine — pre-compiles all stream rule conditions into a single RegexSet for one-pass DFA matching instead of O(rules × conditions) JS regex iteration
  • Native Rust diff engine — fuzzy text matching (fuzzyFindText, normalizeForFuzzyMatch) and unified diff generation (generateDiff) via the similar crate, replacing the diff npm package
  • Native Rust GSD file parser — frontmatter parsing, section extraction, batch .gsd/ directory parsing, and structured roadmap parsing with transparent JS fallback

2.10.1 - 2026-03-13

Fixed

  • @gsd/native package ships pre-compiled JavaScript instead of raw TypeScript, fixing startup crashes on Node.js 20, 22, and 24 (#248)

2.10.0 - 2026-03-13

Added

  • Native Rust engine with high-performance N-API modules replacing JS/WASM dependencies:
    • grep — ripgrep-backed content and filesystem search
    • glob — gitignore-aware file discovery with scan caching
    • ps — cross-platform process tree management
    • clipboard — native clipboard access via arboard (text + image)
    • highlight — syntect-based syntax highlighting (replaces cli-highlight)
    • ast — structural code search and rewrite via ast-grep (38+ languages)
    • html — HTML-to-Markdown conversion
    • text — ANSI-aware text measurement, wrapping, truncation, and slicing
    • fd — fuzzy file path discovery for autocomplete
    • image — decode, encode, and resize images (PNG, JPEG, GIF, WebP)
  • Background shell env action to query shell session environment state
  • Background shell run action for blocking command execution on persistent sessions
  • Background shell session process type for persistent interactive sessions
  • Hashline edits — line-hash-anchored file editing
  • Universal config discovery extension

Changed

  • Find tool uses native Rust glob instead of fd CLI binary
  • Syntax highlighting uses native syntect instead of cli-highlight npm package
  • Autocomplete uses native fd module instead of fd CLI subprocess
  • Text utilities (visible width, wrapping, truncation, slicing) use native Rust instead of JS
  • Clipboard operations use native arboard instead of platform-specific CLI tools
  • Image processing uses native Rust image crate instead of Photon WASM

Fixed

  • Prevent move operation from silently overwriting existing files
  • Separate access/unlink error handling in delete path
  • Untrack runtime files from slice branch before squash-merge
  • Copy LSP defaults.json to dist during build
  • Native module test assertions

2.9.0 - 2026-03-13

Added

  • LSP tool — full Language Server Protocol integration with diagnostics, go-to-definition, references, hover, document/workspace symbols, rename, code actions, type definition, and implementation support
  • /thinking slash command for toggling thinking level during sessions
  • Interactive wizard mode for /gsd prefs with guided configuration
  • Startup update check with 24-hour cache — notifies when a new version is available

Fixed

  • TypeScript type errors across gsd, browser-tools, search-the-web, and misc extension files
  • Milestone ID generation uses max-based approach instead of length+1 (prevents ID collisions)
  • Non-thinking models handled correctly in /thinking command
  • Auto-mode pauses on provider errors to prevent reassess-roadmap loop
  • TAB hint displayed for notes input in discuss-mode survey
  • Slice branches merge to integration branch instead of main
  • Prefs wizard audit findings addressed
  • Deduplicated maxNum logic with test coverage
  • Command injection eliminated in LSP config which() function
  • Unhandled JSON.parse in LSP message reader wrapped with error handling

2.8.3 - 2026-03-13

Fixed

  • ask_user_questions handles undefined custom() result in RPC mode
  • Provider-aware model resolution for per-phase preferences (respects provider field instead of parsing model name prefixes)
  • Execute-task artifact verification aligned with deriveState — adds self-repair for missing artifacts
  • Research phase infinite loop broken; state synced on stop
  • Auto-resolve merge conflicts on .gsd/ runtime files
  • Auto-switch model after /login and /logout to prevent API key errors
  • Anthropic provider detection uses provider field instead of model name prefix matching

2.8.2 - 2026-03-13

Fixed

  • Path operations use node:path stdlib instead of hardcoded forward slashes, fixing cross-platform compatibility
  • Prompts use relative paths to prevent Windows drive letter mangling
  • Runtime files already in the git index are untracked to prevent merge conflicts
  • HTTP_PROXY and HTTPS_PROXY environment variables respected for all outbound requests
  • Windows NUL redirects sanitized to /dev/null in Git Bash environments

Changed

  • .claude/ and .gsd/ directories untracked from repo, *.tgz gitignored

2.8.1 - 2026-03-13

Added

  • Discussion depth verification and context write-gate for richer milestone discussions
  • TTSR + blob/artifact storage (ported from oh-my-pi)
  • Skip/discard escape hatches in no-roadmap wizard
  • Configurable merge_strategy preference for slice completion

Fixed

  • fsevents bumped to ~2.3.3 for Node 25 compatibility; added as optional dep for Linux installs
  • Observability warnings injected into agent prompt for enforcement
  • Auto-detect headless environment for Playwright browser launch
  • UAT artifact verified before marking complete-slice done
  • Prior slices must complete on main before next slice dispatches
  • smartStage fallback bypasses runtime exclusions when .gsd/ is gitignored
  • /exit uses graceful shutdown instead of hard kill

2.8.0 - 2026-03-13

Added

  • Browser tools: browser_analyze_form and browser_fill_form — form field inventory and intelligent filling by label/name/placeholder
  • Browser tools: browser_find_best — scored element candidates for semantic intents
  • Browser tools: browser_act — execute common browser micro-tasks in one call
  • Browser tools: 108 unit and integration tests covering all new components

Changed

  • Browser tools: decomposed 5000-line monolithic index.ts into focused modules (state, capture, settle, lifecycle, refs, utils) with 11 categorized tool files
  • Browser tools: consolidated state capture reduces evaluate round-trips per action
  • Browser tools: zero-mutation settle short-circuit for faster page interaction
  • Browser tools: conditional body text capture — low-signal tools skip it for smaller token payloads
  • Browser tools: screenshot resizing uses sharp instead of canvas evaluate calls
  • Browser tools: screenshots opt-in on navigate (no longer sent by default)

2.7.1 - 2026-03-13

Added

  • Model fallback support for auto-mode phases — if the configured model fails, GSD tries alternate models before stopping
  • /kill command for immediate process termination

Fixed

  • npm install -g gsd-pi now works — workspace packages bundled in npm tarball via bundleDependencies
  • External PI ecosystem packages (pi-rtk, pi-context, etc.) can now resolve @mariozechner/* imports through jiti aliases
  • Missing export-html vendor files (marked.min.js, highlight.min.js) restored
  • Skipped API keys now persist so the setup wizard doesn't repeat on every launch
  • Provider config and extension loading reused correctly

Changed

  • /exit uses graceful shutdown (saves session state); /kill replaces the old immediate-exit behavior

2.7.0 - 2026-03-12

Changed

  • Vendor Pi SDK source (tui, ai, agent-core, coding-agent) into workspace monorepo under packages/, replacing the compiled npm dependency and patch-package workflow. Pi internals are now directly modifiable as TypeScript source.
  • Existing patches (setModel persist option, Windows VT input caching) applied as source edits.
  • Build pipeline runs workspace packages in dependency order before GSD compilation.
  • Removed patch-package from devDependencies and postinstall.

2.6.0 - 2026-03-12

Added

  • Proactive secret management — planning phase forecasts required API keys into a manifest; auto-mode collects pending secrets before dispatching the first slice
  • --continue / -c CLI flag to resume the most recent session

Fixed

  • Doctor post-hook no longer preempts complete-slice dispatch
  • main_branch preference restored; runPreMergeCheck implemented for merge safety
  • Recovery/retry prompt injection capped to prevent V8 OOM on large sessions
  • .gsd/ excluded from pre-switch auto-commits to prevent squash merge conflicts

2.5.1 - 2026-03-12

Added

  • secure_env_collect now auto-detects existing keys, destination files, and provides guidance field for better onboarding UX

Changed

  • Right-sized pipeline for simple work — single-slice milestones skip redundant research/plan sessions, reducing 9-10 sessions to 5-6
  • Heavyweight plan sections (Proof Level, Integration Closure, Observability) are now conditional, omitted for simple slices

Fixed

  • Squash-merge now aborts cleanly on conflict and stops auto-mode instead of looping with corrupted state
  • Resolved baked-in merge conflict markers in loader.ts, logo.ts, and postinstall.js

2.5.0 - 2026-03-12

Added

  • Native Anthropic web search — Claude models get server-side web search automatically, no Brave API key required
  • GitService fully wired into codebase — programmatic git operations replace shell-based git commands in prompts
  • Merge guards prevent slice completion when uncommitted changes or conflicts exist
  • Snapshot support for saving and restoring .gsd/ state
  • Auto-push after slice squash-merge to main
  • Rich commit messages with structured metadata

Fixed

  • State machine deadlock when units fail to produce expected artifacts — retry and cross-validation now gate completion
  • Duplicate Brave search tools when toggling providers repeatedly
  • Windows test glob patterns (single quotes → unquoted for shell expansion)
  • Conversation replay error caused by thinking blocks in stored history
  • Brave search tools removed from API payload when no BRAVE_API_KEY is set
  • Restore notifications suppressed on session resume to reduce UX noise

2.4.0 - 2026-03-12

Added

  • Automatic migration of provider credentials from existing Pi installations — skip re-authentication when switching to GSD
  • Pi extensions from ~/.pi/agent/extensions/ discoverable in interactive mode
  • GitService core implementation for programmatic git operations

Changed

  • System prompt compressed by 48% (360 → 187 lines) for better context efficiency
  • Refined agent character and communication style prompts
  • Added craft standards, self-debugging awareness, and work narration to agent prompts

Fixed

  • RPC mode crash when ctx.ui.theme is undefined (#121)

2.3.11 - 2026-03-12

Added

  • Branded clack-based onboarding wizard on first launch — LLM provider selection (OAuth + API key), optional tool API keys, and setup summary (#118)
  • gsd config subcommand to re-run the setup wizard anytime
  • Shared src/logo.ts module as single source of truth for ASCII banner

Fixed

  • Parallel subagent results no longer truncated at 200 characters

Changed

  • wizard.ts trimmed to env hydration only — onboarding logic moved to onboarding.ts
  • First-launch banner removed from loader.ts (onboarding wizard handles branding)

2.3.10 - 2026-03-12

Added

  • Branded postinstall experience with animated spinners, progress indicators, and clean summary (#115)

Fixed

  • Ctrl+Alt shortcuts (dashboard, bg manager, voice) now show slash-command fallback in terminals that lack Kitty keyboard protocol support — macOS Terminal.app, JetBrains IDEs (#100, #104)

2.3.9 - 2026-03-12

Added

  • Tavily as alternative web search provider alongside Brave Search (#102)
  • Auto-mode progress widget now shows all stats; footer hidden during auto-mode (#75)

Fixed

  • Auto-mode infinite loop and closeout instability — idempotent unit dispatch, retry caps, and atomic closeout (#96, #109)
  • Migration no longer requires ROADMAP.md — milestones inferred from phases/ directory when missing (#93, #90)
  • Worktree branch safety — proper namespacing and slice branch base selection (#92)
  • Windows: use execFile to avoid single-quote shell issues (#103)
  • Broken read @GSD-WORKFLOW.md references replaced with /gsd command (#88)
  • Google Search extension updated to use gemini-2.5-flash (#83)
  • Duplicate getCurrentBranch import in auto.ts (#87)
  • formatCost crash on non-number cost values (#74)
  • Avoid sudo prompts in postinstall script (#73)
  • .gsd/ folder removed from git tracking; consolidated .gitignore (#78)
  • Multiple community-reported bugs across CLI, auto-mode, and extensions

2.3.8 - 2026-03-11

Fixed

  • Worktree file operations (Write, Read, Edit) now resolve paths against the active working directory instead of the launch directory (#72)
  • Auto-mode merge guard handles all slice completion paths, preventing infinite dispatch loops when complete-slice is bypassed (#71)

2.3.7 - 2026-03-11

Added

  • Remote user questions via Slack/Discord for headless auto-mode sessions

Fixed

  • Auto-mode model switches no longer persist as the user's global default (#30)
  • Auto-mode resume now rebuilds disk state and runs doctor before dispatching, preventing inline execution after pause (#16)
  • Silent dispatch failure when command context is null now surfaces an error notification
  • Race condition between timeout handlers and prompt dispatch in auto-mode
  • Remote questions: validate IDs before test-send, sanitize error messages to prevent token leakage
  • Remote questions: cap user_note at 500 chars to prevent LLM context injection
  • Remote questions: validate channel ID format to prevent SSRF
  • Remote questions: add 15s per-request fetch timeout to adapters
  • Remote questions: distinguish Discord 404 from auth errors in reactions
  • Prompt store sorting uses updatedAt instead of filename
  • TypeScript parameter properties desugared for --experimental-strip-types compatibility

Changed

  • Remote question result details use discriminated union type

2.3.6 - 2026-03-11

Fixed

  • Postinstall no longer triggers hidden sudo prompt on Linux — Playwright's --with-deps flag is no longer run automatically, preventing npm install -g from appearing to hang (#67)
  • Auto-commit dirty files before branch switch to prevent lost work during slice transitions

Changed

  • Updated README to reflect current commands, extensions, and step mode workflow

2.3.5 - 2026-03-11

Fixed

  • Voice extension: transcription no longer lost when pausing and resuming recording

2.3.4 - 2026-03-11

Added

  • CHANGELOG.md with curated history from v0.1.6 onwards
  • Project-local /publish-version command for npm releases
  • GitHub Sponsors funding configuration
  • npm publish and install smoke test

0.3.3 - 2026-03-11

Added

  • /gsd next step mode — walk through units one at a time with a wizard between each
  • /gsd bare command defaults to step mode
  • /exit command to kill the GSD process immediately
  • /clear as alias for /new (new session)
  • MCPorter extension for lazy on-demand MCP server integration
  • /voice extension for real-time speech-to-text
  • Pi global install scripts
  • Post-hook bookkeeping: auto-run doctor + rebuild STATE.md after each unit

Changed

  • Improved worktree merge, create, remove, and reload resilience
  • Discuss prompt rewritten with reflection step and depth enforcement

Fixed

  • Idle watchdog false-firing on active agents — tasks >10min no longer get incorrectly skipped (#52)
  • Browser screenshots constrained to 1568px max dimension (#56)
  • Pi extensions loaded from ~/.pi/agent/extensions/ (#51)

Removed

  • /gsd-run command (replaced by /gsd and /gsd next)

0.3.1 - 2026-03-11

Fixed

  • Windows VT input restored after child processes exit (#41)
  • Print/JSON mode in cli.js so subagents don't hang
  • Discuss prompt loop prevention
  • Managed tools bootstrap and gh auth
  • Session list scoped to current working directory
  • Bash/bg_shell hang and kill issues on Windows (#40)
  • /gsd-run hardcoded ~/.pi/ path (#38)
  • Windows backspace in masked input + custom browser path support (#36, #34)

Changed

  • Renamed "Get Stuff Done" to "Get Shit Done"

0.3.0 - 2026-03-11

Added

  • /worktree (/wt) — git worktree lifecycle management (#31)
  • /gsd migrate.planning to .gsd migration tool (#28)

Fixed

  • Skipped API keys now persist so wizard doesn't repeat on every launch (#27)
  • Scoped models restored from settings on new session startup (#22)
  • Startup fallback no longer overwrites user's default model with Sonnet (#29)

0.2.9 - 2026-03-11

Fixed

  • Idle recovery skips stuck units instead of silently stalling (#19)
  • pkg/package.json version synced with pi-coding-agent to prevent false update banner
  • Milestones with summary but no roadmap treated as complete (#13)

0.2.8 - 2026-03-11

Added

  • Mac-tools extension (macOS native automation)

0.2.6 - 2026-03-11

Fixed

  • Default model validated against full registry on every startup

0.2.5 - 2026-03-11

Fixed

  • Circular self-dependency removed, default model set to anthropic/claude-sonnet-4-6 with thinking off

0.2.4 - 2026-03-11

Added

  • Branded setup wizard UI with visual hierarchy, descriptions, and status feedback
  • Branded banner on first launch
  • Postinstall banner with version and next-step hint

Fixed

  • All .pi/ paths updated to .gsd/
  • Default model matching by id.includes('sonnet') for dated API IDs
  • Circular gsd-pi self-dependency removed
  • Pi SDK version check suppressed
  • Selected options stay lit when notes field is focused

0.1.6 - 2026-03-11

Added

  • GitHub extension tool suite with confirmation gate
  • Bundled skills: frontend-design, swiftui, debug-like-expert
  • Skills trigger table in system prompt
  • Resource loader syncs bundled skills to ~/.gsd/agent/skills/

Fixed

  • ~/.gsd/agent/ paths in prompt templates instead of ~/.pi/agent/ (#10)
  • Guard against re-injecting discuss prompt when session already in flight

Changed

  • License updated to MIT