Skip to content

feat: live spec authoring — spec ticket body as a live plan in the dashboard (release 0.22.0)#49

Merged
FelipeCarillo merged 2 commits into
mainfrom
claude/planning-discussion-env-6qypxr
Jun 15, 2026
Merged

feat: live spec authoring — spec ticket body as a live plan in the dashboard (release 0.22.0)#49
FelipeCarillo merged 2 commits into
mainfrom
claude/planning-discussion-env-6qypxr

Conversation

@FelipeCarillo

@FelipeCarillo FelipeCarillo commented Jun 14, 2026

Copy link
Copy Markdown
Owner

Resumo

Transforma o body de um ticket kind=spec num documento de planejamento vivo: o agente constrói o plano a partir do chat enquanto o usuário acompanha a página de detalhe do dashboard atualizando em tempo real. Aprovação e mudança de status acontecem pelo chat (board_move); após a aprovação, o plano é decomposto em tickets filhos pelo fluxo spec-flow já existente.

A motivação foi criar um "modo plan" superior ao padrão do Claude Code: textual + visual (diagramas Mermaid), persistente (versionado no board, não efêmero da sessão), observável por todo o time no kanban e rastreável da discussão até a implementação.

Release: este PR já inclui o bump para 0.22.0 (commit chore: release 0.22.0) — pyproject.toml + uv.lock em 0.22.0 e a seção [Unreleased] do CHANGELOG promovida para ## [0.22.0] — 2026-06-15. Bump minor (feature compatível), seguindo o padrão do release 0.21.0.

O que muda

Edição do plano pelo agente (backend)

  • Board.update_section() em lib/board.py: substitui (ou anexa) uma única seção # H1 do body, com helper de escrita comum extraído do set_body (recontagem de checkboxes DoD + timestamps).
  • Duas MCP tools novas (server/mcp.py, ambas write=True, listadas em permissions.ask):
    • board_set_body — replace completo (esqueleto inicial / reestruturação).
    • board_update_section — replace/append de uma seção; a ferramenta padrão do live authoring, econômica em tokens (envia só a seção que mudou).

Diagramas Mermaid no dashboard

  • Fences ```mermaid renderizam como SVG. O servidor emite <pre class="mermaid"> com o código HTML-escapado — a garantia anti-XSS do html:False se estende a esse caminho (coberto por testes).
  • mermaid.min.js (UMD v11) vendorizado, carregado lazy no client (só quando a página tem diagrama), com securityLevel:'strict'.

Página de detalhe ao vivo

  • Atualiza sobre o stream SSE existente: header, descrição e activity rail trocam in-place (≤2s após uma edição, toast "Plan updated"), diagramas re-renderizam pós-swap, e uma edição inline ativa adia a troca.
  • Novo endpoint fragment GET /api/project/{alias}/board/{ticket_id}/detail-html.

Workflow

  • Skill holoctl-spec-flow e comando /spec reescritos: materializar a spec cedo → subir/detectar o hctl serve e entregar o link clicável → atualizar seção a seção a cada marco da discussão → gate de review com aprovação verbal → decompor via boardmaster. Inclui um guia de autoria eficiente (edições por seção, prosa telegráfica, receitas de Mermaid de ≤15 nós).

Testes

  • ~15 testes novos: tools MCP (set_body/update_section), render de fence Mermaid, regressão de XSS (HTML malicioso dentro do fence permanece escapado), endpoint detail-html, e XSS end-to-end via página de detalhe.
  • Suíte completa: 1063 passando. ESLint limpo (o bundle vendorizado é ignorado). validate_changelog.py e uv lock --check ok em 0.22.0.
  • Verificado end-to-end com hctl serve num workspace de teste + render real do Mermaid em Chromium headless (2 SVGs na página).

https://claude.ai/code/session_01GN4Trdvo2BxUgyJt4P2Gpz

claude added 2 commits June 12, 2026 20:01
…shboard

A kind=spec ticket body now works as a live plan document: the agent
authors it from chat while the user watches the detail page update in
real time; approval and status changes stay in chat (board_move).

- MCP write tools: board_set_body (full replace) and
  board_update_section (one H1 section, token-efficient default);
  both recount DoD checkboxes and are listed in permissions.ask.
- Mermaid: ```mermaid fences render as <pre class="mermaid"> with the
  source HTML-escaped (html:False guarantee preserved); vendored
  mermaid.min.js (UMD v11) lazy-loads client-side with
  securityLevel:'strict' only when a page has a diagram.
- Detail page live-updates over the existing SSE stream via the new
  /api/project/{alias}/board/{ticket_id}/detail-html fragment;
  mermaid re-renders after the swap, active inline edits defer it.
- spec-flow skill + /spec command rewritten: materialize early, serve
  the dashboard and hand over the live URL, section-level updates per
  milestone, review gate with verbal approval, then decompose.
  Includes an authoring-efficiency guide with mermaid recipes.

https://claude.ai/code/session_01GN4Trdvo2BxUgyJt4P2Gpz
Bump pyproject + uv.lock to 0.22.0 and promote the [Unreleased]
CHANGELOG section to a dated 0.22.0 entry covering the live spec
authoring feature: board_set_body/board_update_section MCP tools,
Mermaid diagram rendering in the dashboard, live detail-page SSE
updates, and the rewritten spec-flow skill / spec command.

https://claude.ai/code/session_01GN4Trdvo2BxUgyJt4P2Gpz
@FelipeCarillo FelipeCarillo changed the title feat: live spec authoring — spec ticket body as a live plan in the dashboard feat: live spec authoring — spec ticket body as a live plan in the dashboard (release 0.22.0) Jun 15, 2026
@FelipeCarillo FelipeCarillo merged commit 33e5931 into main Jun 15, 2026
11 checks passed
@FelipeCarillo FelipeCarillo deleted the claude/planning-discussion-env-6qypxr branch June 15, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants