- Three layers
- User stories
- Functional scope
- Validating the spec
- Requirement identifiers (
REQ-*) - Suggested workflow for contributors
- GitHub Spec Kit (summary)
- See also
In this repository, spec-driven development has three layers that stay in sync:
- GitHub Spec Kit baseline:
specs/001-baseline/documents the bundle behavior and maps 100% of production files undersrc/. - Product behavior: articles, tags, comments, settings, public rendering, and admin CRUD are documented in the integrator docs.
- Traceability anchors: Stable
REQ-*identifiers link docs, demo expectations, and QA workflows.
| ID | Story |
|---|---|
| US-01 | As a visitor, I browse published articles at /blog and open /blog/{slug} |
| US-02 | As a visitor, I search and filter by tag, including infinite-scroll listing when enabled |
| US-03 | As a visitor, I submit a comment that waits for moderation |
| US-04 | As an editor, I create, edit, publish, and delete multilingual articles and tags (optional owner object access) |
| US-05 | As a moderator, I approve, reject, reply to, and delete comments |
| US-06 | As an administrator, I configure listing mode, masonry layout, asides, comment protection, HTML sanitizer, and public display options |
| US-07 | As an integrator, I adapt security, layouts, locales, and user_class from configuration |
| US-08 | As a maintainer, I run the Symfony 8 FrankenPHP demo and QA checks |
In scope: multilingual articles and tags, moderated comments (rate-limit and CAPTCHA strategies), optional article HTML sanitizer, singleton settings, public Twig rendering, admin CRUD, object-level publication access (none / owner / host service), hashtag sync command, published event, custom access checking, Twig namespace and overrides, Doctrine persistence, Symfony Flex recipe, FrankenPHP demo.
Non-goals: full CMS page builder, or owning the host authentication system.
make test
make phpstan
make validate-translations
make demo-smoke
make release-check| ID | Where | What it marks |
|---|---|---|
| REQ-DOCS-002 | README.md |
Canonical documentation link order |
| REQ-UI-002 | docs/SECURITY.md, security config |
Admin routes require access unless explicitly relaxed |
| REQ-TWIG-005 | .scripts/check-no-raw-html-form.sh |
Kit Twig has no raw <form> / <input> |
| REQ-TWIG-001 | TwigPathsPass |
Host Twig overrides win over bundle templates |
| REQ-TWIG-004 | docs/INSTALLATION.md, demo bundles |
Twig Extra requirement is documented |
| REQ-I18N-001 | docs/USAGE.md, docs/CONFIGURATION.md |
Translation override path |
| REQ-TEST-011 | Makefile demo-smoke |
Demo boots and returns HTTP 200 |
| REQ-MAKE-002 | Makefile release-check |
Pre-release QA chain |
| REQ-MAKE-004 | Makefile validate-translations |
Translation parity validation hook |
| REQ-GIT-001 | docs/GITHUB_CI.md |
No Cursor co-author trailers in git history |
| REQ-RECIPE-001 | docs/INSTALLATION.md |
Flex recipe path .symfony/recipe |
- Clarify the behavior change or bug.
- Update or create the relevant spec artifact.
- Implement the change with tests if production behavior changes.
- Update integrator docs when host applications must act.
- Keep
specs/001-baseline/spec.mdandcode-inventory.mdaligned withsrc/.
This repository uses GitHub Spec Kit with Cursor Agent integration.
| Artifact | Path |
|---|---|
| Baseline spec | specs/001-baseline/spec.md |
| Code inventory | specs/001-baseline/code-inventory.md |
| Tooling manual | docs/SPEC-KIT.md |
| Constitution | .specify/memory/constitution.md |
How to install, initialize, and use Spec Kit: SPEC-KIT.md.