Skip to content

feat(core)!: reframe pscode as a guided sdd installer#38

Merged
eipastel merged 15 commits into
mainfrom
claude/pscode-guided-installer-lyheqs
Jun 21, 2026
Merged

feat(core)!: reframe pscode as a guided sdd installer#38
eipastel merged 15 commits into
mainfrom
claude/pscode-guided-installer-lyheqs

Conversation

@eipastel

Copy link
Copy Markdown
Owner

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:

pedido → entendimento → grill (perguntas rápidas) → mini spec → design →
tasks → uma task por vez → review → done

O que muda

  • Novo CLI: init, update, doctor, clean, status.
  • pscode init instala:
    • pscode/config.yaml (agentes, profile guided, limits de documento curto e os guardrails apply_mode: one_task_at_a_time + approval_required), pscode/board.yaml opcional, pscode/changes/ e templates curtos em pscode/templates/.
    • 8 slash commands (/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.
    • Um bloco gerenciado <!-- PSCODE:START/END --> em AGENTS.md/CLAUDE.md (conteúdo do usuário preservado).
  • update reescreve só os arquivos controlados pelo PSCode, preservando mudanças do usuário e o board.
  • doctor verifica config, estrutura, board e a instalação/versão por agente (saída não-zero em caso de problema).
  • clean remove os trilhos (--all remove também pscode/); ações destrutivas exigem --yes.

Arquitetura (src/core/)

content/ (commands/skills/templates como constantes empacotadas no dist), adapters.ts (paths por agente + carimbo generatedBy), 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).

⚠️ A integração com Nix foi removida porque referenciava scripts apagados e uma derivação desatualizada que quebraria o CI nas mudanças de dependência. Se preferir manter o empacotamento Nix, é só pedir que eu restauro e re-pino.

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) passando

Breaking change

Os comandos, schemas e APIs públicas anteriores foram removidos. Um changeset major acompanha o PR.

🤖 Generated with Claude Code


Generated by Claude Code

claude and others added 13 commits June 21, 2026 06:15
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>
@eipastel eipastel added the release Mergeado com esta label dispara o release (versiona + publica + GitHub Release) label Jun 21, 2026
eipastel added 2 commits June 21, 2026 20:50
- 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.
@eipastel eipastel merged commit 2f41dcd into main Jun 21, 2026
6 checks passed
@eipastel eipastel deleted the claude/pscode-guided-installer-lyheqs branch June 21, 2026 23:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Mergeado com esta label dispara o release (versiona + publica + GitHub Release)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants