feat(core)!: reframe pscode as a guided sdd installer#38
Merged
Conversation
Transforms pscode from a spec-driven-development framework (workflow engine, artifact DAG, schemas, deep validation) into a small, low-maintenance installer. Its only job is to lay down the rails — slash commands, skills, instructions and a minimal pscode/ structure — so a coding agent runs a short, human-validated flow. The agent drives the flow; pscode no longer interprets schemas, builds DAGs or validates artifacts. - New CLI surface: init, update, doctor, clean, status. - Installs 8 slash commands (/ps:do, /ps:grill, /ps:spec, /ps:design, /ps:tasks, /ps:apply-one, /ps:review, /ps:done) and 4 skills (pscode-guided-sdd, pscode-grill-me, pscode-mini-spec, pscode-task-runner) for Claude Code, Codex, Cursor, Gemini and GitHub Copilot. - Adds pscode/config.yaml (short-document limits + one-task-at-a-time and approval guardrails), an optional pscode/board.yaml, and short change templates. - Removes the workflow engine, schemas, artifact graph, validation, OpenSpec migration, workspaces, context store/initiatives, telemetry, completions, the nix flake integration and related commands, scripts and docs. - Trims dependencies (drops posthog-node, fast-glob, cross-spawn, ora, @inquirer/core) and rewrites the test suite around the installer. BREAKING CHANGE: the previous commands, schemas and public APIs are removed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Removes dead config and unused assets carried over from the old framework and the upstream fork: - delete .mcp.json (atlassian/jira MCP server from the removed integration) - delete pnpm.json (not a real pnpm config file; esbuild build approval stays in pnpm-workspace.yaml) and drop the stale old-package-name allowBuilds entry - delete .commitlintrc.yml (commitlint and its jira plugin are not installed and no hook runs it) - delete assets/ (unused legacy logos) - point CODEOWNERS and MAINTAINERS.md at the repo owner instead of the upstream fork maintainers - drop JIRA/Maven references from the PR template and the removed nix job from the workflows README - fix remaining "Pastelsdd" branding in the devcontainer, eslint comment and changeset example Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Cleans up the source now that the rewrite has settled: - src/index.ts now exports only runCli/buildProgram instead of re-exporting the entire core; delete the orphan src/core/index.ts barrel - remove unused symbols: BoardState, Card, readBoard (nothing reads the board at runtime), and the test-only COMMAND_IDS/SKILL_NAMES/CHANGE_TEMPLATE_FILES - un-export internals only used within their own module: configPath, ConfigSchema, boardPath, CardSchema, BoardSchema, ADAPTERS, upsertManagedBlock, MANAGED_INSTRUCTION_FILES, agentArtifactPaths - import content types directly instead of via the content barrel - enable noUnusedLocals/noUnusedParameters so dead code can't return Tests updated to derive command/skill/template manifests inline and to assert the board via its written file. Build, lint, typecheck and all 25 tests pass; ts-prune reports a clean surface (only the public runCli/buildProgram entry). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
- rewrite README to a lean overview: tagline, flow, install, usage, command table, license - bump version to 3.0.0 for the breaking guided-SDD-installer rewrite, add the 3.0.0 CHANGELOG entry and consume the pending changeset - fix the stale "pastelsdd" package name in the CHANGELOG title Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Reverts the manual v3.0.0 bump: restore package.json to 2.16.0, restore the original CHANGELOG, and bring back the pending changeset so CI bumps the version and generates the changelog on release. The slim README is kept. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Aligns the supported surface with the product concept (Claude Code, Codex, Cursor, Gemini; a single default profile): - remove the github-copilot agent — not part of the concept's agent list; it was carried over from the old codebase - remove the `--profile` flag and the profile parameter plumbing; there is only one profile (`guided`), which is still written to config.yaml CLI (init/update/doctor/clean/status), the 8 /ps:* commands and the 4 skills are unchanged. Build, lint and 25 tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Translates the eight /ps:* command bodies, the four skill descriptions/bodies and the five change templates from Portuguese to English, so the whole surface matches the English AGENTS.md/CLAUDE.md block. Structure, config-key references and behavior are unchanged. Re-dogfoods the repo's own .claude/ with the English content. Build, lint and 25 tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
`pscode init` now runs as an interactive wizard by default: it prompts for the agents to install (detected ones pre-selected) and whether to create the local board. Prompts are skipped when `--yes` is passed or when running non-interactively (CI/piped), falling back to detected agents (or claude) and a board enabled by default. `--agent` and `--no-board` still set choices explicitly without prompting. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
The interactive agent checkbox now pre-checks Claude Code by default (plus any
detected agents) and validates that at least one agent is selected ("Select at
least one agent.") so init can't proceed with an empty selection.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
`pscode init` now asks for the wizard language (English / Português) as its first step. The language is scoped to the init experience — it localizes the prompts and the summary only; the installed commands, skills, templates and AGENTS.md block are always written in English. - New `core/i18n.ts` with a LOCALES registry and init message bundles, easy to extend with more languages. - New `--lang <code>` flag for non-interactive/explicit selection; invalid codes are rejected. Non-interactive runs default to English. Adds tests covering the localized summary (and that installed content stays English) and unknown-language rejection. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QQCAk91cJzgcgiaKdHHvF5
Após o init, o wizard pergunta (padrão Sim) se deve ativar o modo bypassPermissions do Claude Code em .claude/settings.json e se deve abrir o CLI do agente selecionado, sempre priorizando o Claude Code. O launch só ocorre com terminal real; sem TTY imprime a dica de como iniciar. Flags --bypass-permissions/--no-bypass-permissions e --open/--no-open controlam o comportamento em modo não-interativo. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…angeset Funde init-bypass-permissions.md em guided-sdd-installer.md, deixando um único changeset, e recolhe deleções pendentes no working tree. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…[NO-TICKET] Filtra as opcoes do wizard interativo para Claude Code e Codex; Cursor e Gemini continuam acessiveis via --agent e deteccao. Adiciona o sufixo localizado (Recomendado) ao Claude no seletor. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Added a new preflight module to verify environment setup at init time. - Introduced requirements manifest to record preflight check results and MCP server declarations. - Enhanced GitHub configuration handling, including reading and writing GitHub-specific settings. - Updated CLI initialization to support GitHub integration, allowing users to enable or disable it. - Created a spinner utility for better user feedback during CLI operations. - Refactored existing code to accommodate new features and improve maintainability. - Added unit tests for new functionalities, ensuring robust coverage for preflight checks, requirements, and spinner behavior.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resumo
Transforma o PSCode de um framework de spec-driven development (engine de workflow, DAG de artefatos, schemas, validação profunda) em um instalador leve e de baixa manutenção de um fluxo SDD guiado.
A responsabilidade do PSCode passa a ser única: instalar os trilhos — slash commands, skills, instruções e uma estrutura mínima de arquivos — para que um agente de código (Claude Code, Codex, Cursor, Gemini, GitHub Copilot) conduza um fluxo curto e validado pelo humano. O agente dirige o fluxo; o PSCode não interpreta schemas, não monta DAGs e não valida artefatos.
A experiência é guided, não autopilot:
O que muda
init,update,doctor,clean,status.pscode initinstala:pscode/config.yaml(agentes, profileguided,limitsde documento curto e os guardrailsapply_mode: one_task_at_a_time+approval_required),pscode/board.yamlopcional,pscode/changes/e templates curtos empscode/templates/./ps:do,/ps:grill,/ps:spec,/ps:design,/ps:tasks,/ps:apply-one,/ps:review,/ps:done) e 4 skills (pscode-guided-sdd,pscode-grill-me,pscode-mini-spec,pscode-task-runner) para Claude Code, Codex, Cursor, Gemini e GitHub Copilot.<!-- PSCODE:START/END -->emAGENTS.md/CLAUDE.md(conteúdo do usuário preservado).updatereescreve só os arquivos controlados pelo PSCode, preservando mudanças do usuário e o board.doctorverifica config, estrutura, board e a instalação/versão por agente (saída não-zero em caso de problema).cleanremove os trilhos (--allremove tambémpscode/); ações destrutivas exigem--yes.Arquitetura (
src/core/)content/(commands/skills/templates como constantes empacotadas nodist),adapters.ts(paths por agente + carimbogeneratedBy),installer.ts,pscode-config.ts+board.ts(Zod),detect.ts,agents-md.ts,changes.ts(estado derivado dos arquivos).Removido
Engine de workflow, DAG de artefatos, schemas, validação, migração OpenSpec, workspaces, context store/initiatives, telemetria (PostHog), completions de shell, a integração Nix flake + job de CI, e comandos/scripts/docs relacionados. Dependências enxugadas (
posthog-node,fast-glob,cross-spawn,ora,@inquirer/core).Verificação (tudo verde)
pnpm install --frozen-lockfile✓ (lockfile em sincronia)tsc --noEmit✓ ·pnpm build✓ ·pnpm lint✓pnpm test✓ — 25 testes (unitários + lifecycle do CLI) passandoBreaking change
Os comandos, schemas e APIs públicas anteriores foram removidos. Um changeset
majoracompanha o PR.🤖 Generated with Claude Code
Generated by Claude Code