mirror of
https://github.com/Permissionless-Software-Foundation/psf-memo.git
synced 2026-09-21 16:52:01 -07:00
- Move specifier-prompt.md to repo root and rewrite it for the monorepo. - Move specs/feature-backlog.md to root specs/ and update with component scope. - Add specs/README.md, psf-memo-indexer/specs/README.md, psf-memo-db/specs/README.md. - Add swarmforge/constitution/articles/monorepo.prompt for shared monorepo rules. - Update root README.md with repository layout, local dev commands, and SwarmForge info. By specifier.
45 lines
1.6 KiB
Markdown
45 lines
1.6 KiB
Markdown
# psf-memo Specifications
|
|
|
|
This directory holds cross-component and per-component behavior specifications.
|
|
|
|
## Layout
|
|
|
|
```text
|
|
specs/
|
|
├── README.md # this file
|
|
├── feature-backlog.md # monorepo-wide prioritized backlog
|
|
└── (per-component specs live next to their component)
|
|
```
|
|
|
|
Per-component feature files:
|
|
|
|
- `psf-memo-client/specs/*.feature` — React SPA behavior (write + read paths)
|
|
- `psf-memo-indexer/specs/*.feature` — indexer behavior (future)
|
|
- `psf-memo-db/specs/*.feature` — DB REST API behavior (future)
|
|
|
|
## Why split specs by component?
|
|
|
|
A single user-facing feature (e.g. "Like a Memo") usually needs coordinated
|
|
changes in all three layers:
|
|
|
|
1. **psf-memo-db** exposes a new route or store for like counts / liked state.
|
|
2. **psf-memo-indexer** parses and stores `0x6d04` like transactions.
|
|
3. **psf-memo-client** renders the heart icon, modal, and broadcast.
|
|
|
|
Keeping feature files next to the component they exercise lets that component's
|
|
acceptance pipeline own the spec. The monorepo backlog (`feature-backlog.md`)
|
|
tracks which components are touched by each user-facing feature.
|
|
|
|
## Gherkin conventions
|
|
|
|
- Each feature file uses `Feature:`, one optional `Background:`, and `Scenario`
|
|
or `Scenario Outline:` with `Examples:`.
|
|
- Name each scenario `Feature Name - N`.
|
|
- Put a `#` comment listing all scenario names immediately before the
|
|
`Feature:` line.
|
|
- Use `<parameter>` placeholders for values that vary and improve mutation.
|
|
- Prune identical example-table columns that do not improve Gherkin acceptance
|
|
mutation.
|
|
- Run `bb gherkin-ir-dry-checker` on each IR to normalize and prune before
|
|
handing off.
|