37267 adopt speckit converge as the mandatory closing step of the dotcms spec kit flow covering documentation drift - #37275
Conversation
Introduces the speckit-docs-converge companion skill (docs/CLAUDE.md, openapi.yaml, spec/plan divergence, Javadoc drift), registers it as a mandatory after_converge hook alongside converge as after_implement, and updates CLAUDE.md, the Quick Start guide, and CUSTOMIZATIONS.md so implement → converge → docs-converge is documented as the required closing loop before PR 2, not an optional tool.
|
Claude finished @nicobytes's task in 1m 12s —— View job I'll analyze this and get back to you. |
There was a problem hiding this comment.
Pull request overview
This PR implements issue #37267 by making /speckit-converge the mandatory closing step of the dotCMS Spec-Kit flow (auto-run via .specify/extensions.yml) and adding a companion /speckit-docs-converge skill to extend convergence checks to documentation drift, alongside updates to the repo’s Spec-Kit documentation and customization records.
Changes:
- Add mandatory hook chaining:
after_implement → speckit.convergeandafter_converge → speckit.docs-converge. - Introduce the new
.claude/skills/speckit-docs-converge/skill (append-only tasks.md output, docs/OpenAPI/spec-plan/javadoc drift assessment). - Update Quick Start + customization docs + root
CLAUDE.mdto reflect converge as the required final step (and remove tracked.specify/feature.json).
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| specs/37267-converge-closing-step/spec.md | Adds the fix spec detailing the two gaps and acceptance criteria. |
| specs/37267-converge-closing-step/data-model.md | Defines the conceptual data model for documentation convergence findings/outcomes. |
| specs/37267-converge-closing-step/contracts/tasks-append.md | Specifies the append-only contract for tasks.md writes. |
| specs/37267-converge-closing-step/contracts/hook-chain.md | Defines the intended .specify/extensions.yml hook chain and semantics. |
| specs/37267-converge-closing-step/contracts/docs-converge-command.md | Specifies the interface/constraints for the new /speckit-docs-converge skill. |
| docs/core/SPEC_KIT_QUICK_START.md | Updates the canonical Spec-Kit flow docs to include converge as the closing step and documents docs-converge. |
| CLAUDE.md | Updates the Spec-Kit flow summary to include mandatory converge. |
| .specify/feature.json | Removes a tracked local pointer file (so it stays local/untracked as intended). |
| .specify/extensions.yml | Adds after_implement and after_converge mandatory hooks (and expands header comment). |
| .specify/CUSTOMIZATIONS.md | Documents the new mandatory converge step + docs-converge as upgrade-safe customizations. |
| .claude/skills/speckit-specify-fix/SKILL.md | Updates the described flow to include converge. |
| .claude/skills/speckit-docs-converge/SKILL.md | Adds the new docs convergence skill implementation/spec. |
| .claude/skills/skills.config.json | Adds speckit-docs-converge to governance configuration. |
| .claude/skills/CATALOG.md | Regenerates/updates the skills catalog to include the new skill. |
Suppressed comments (2)
docs/core/SPEC_KIT_QUICK_START.md:476
- This bullet implies
implementation_incompleteonly happens when/speckit-implementhalted at a[GATE], but the docs-converge guard is defined as “any unchecked non-[GATE]tasks remain”. That also includes newly appended tasks from converge, so the current wording is too specific and can confuse users.
- **It stays quiet on a half-finished run.** If `tasks.md` still has unchecked non-`[GATE]` tasks,
implement halted rather than finished, so it reports `implementation_incomplete` and writes
nothing. Otherwise every gate approval would append duplicates of work already queued.
docs/core/SPEC_KIT_QUICK_START.md:309
- This example attributes stale Javadoc/comment detection to
/speckit-converge, but in this PR that responsibility is explicitly introduced as part of/speckit-docs-converge. Rewording keeps the worked example consistent with the new split between code convergence and documentation convergence.
`/speckit-converge` closes this one too, and on a fix it earns its keep in a specific way: it re-reads
*Fix Scope & Non-Goals* and flags code that drifted past the boundary the spec drew — the
bounded fix that quietly became a legacy rewrite. It also catches the Javadoc on
`Languagevariable` still describing the old `system = false` behavior.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| Nothing to type: implement fires it on its own once the task list is done. For the Roles API it | ||
| re-reads `spec.md`, `plan.md` and `tasks.md`, looks at what you actually built, and reports what | ||
| doesn't match — a filter parameter the spec promised and the code never gained, a `docs/` page | ||
| still describing the old response shape, an `openapi.yaml` that no longer matches the build. | ||
|
|
||
| Anything it finds becomes new tasks at the bottom of `tasks.md`. Run `/speckit-implement` again | ||
| to clear them, and converge runs again. When it says `converged`, PR 2 is unblocked. |
This PR fixes: #37267