WORKFLOW — How FLA is built and versioned
Applies to every session and every feature. If you skip a step, history loses value.
The loop (per feature)
Plan ──► docs/SRS.md (new/updated use case + FR/BR refs)
──► docs/WORKFLOWS/<flow>.md (create/update the step flow)
──► implement (src/Modules/<Module>, migrations if needed)
──► verify (lint + run through the flow)
──► CHANGELOG.md (unreleased section) + ROADMAP.md (status) + TODO.md (state/next)
──► git add -A && commit (conventional message)
──► (milestone) annotated tag + move CHANGELOG items into new version section
Good saves, always: commit after each meaningful step — never end a session with uncommitted work. The user asked explicitly: keep saving things.
Git conventions
- Single local branch:
master. No remote (local versioning) unless the owner asks. - Conventional Commits:
feat(module): …new capability ·fix(module): …·docs: …·chore: …refactor: …·style: …·test: …·perf: …
- Milestone tags (annotated, e.g.,
git tag -a v0.2.0 -m "v0.2.0 — admin core & branding"):v0.1.0docs+scaffold →v0.2.0admin core → … →v1.0.0launch.
- Never commit:
.env, keys, dumps,storage/cards|uploads|logs/*(see.gitignore). - Commit identity: use the owner's git identity; do not rewrite history.
Documentation rules
| You changed… | Update… |
|---|---|
| Any feature/flow | docs/SRS.md use case + docs/WORKFLOWS/<flow>.md |
| Scope/plan of a milestone | ROADMAP.md (status markers) |
| Anything (always) | CHANGELOG.md → [Unreleased] |
| State/next/answers to questions | TODO.md (before ending the session) |
| Build/test/run instructions | HELP.md |
| Rules on this page | WORKFLOW.md itself |
Docs render live at /docs — no build step needed.
Versioning
- SemVer;
composer.json#versionmirrors the tag. - CHANGELOG sections:
Added | Changed | Deprecated | Removed | Fixed | Security. - At tag time: create
[<version>] — <date>heading, move items from[Unreleased].
Coding conventions
- Plain PHP 8.3;
declare(strict_types=1);at top of every file. - PSR-4
App\→src/; modules self-contained insrc/Modules/<Name>
(Controller, views live centrally in views/<module>/, migrations in database/migrations/).
- SQL via PDO prepared statements only. Output escaped via
e(). - Feature flags from
feature_toggles; branding/weights fromsettings(never hardcode). - Keep NFR-08: everything works in mock mode without external keys.
Definition of done (milestone)
- Milestone scope implemented + verified end-to-end.
- SRS/workflows updated; ROADMAP status moved; TODO state accurate.
- CHANGELOG version section written.
- Single/tagged release commit, e.g.,
chore(release): v0.2.0+ annotated tag.