docs: initialize engineering starter kit
This commit is contained in:
+120
@@ -0,0 +1,120 @@
|
|||||||
|
# Operating system
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
Thumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Editor and IDE local state
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Environment and secrets
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
!.env.template
|
||||||
|
*.local
|
||||||
|
*.secret
|
||||||
|
*.secrets
|
||||||
|
*.key
|
||||||
|
*.pem
|
||||||
|
*.p12
|
||||||
|
*.pfx
|
||||||
|
|
||||||
|
# Logs and diagnostics
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
log/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Build outputs
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
out/
|
||||||
|
public/build/
|
||||||
|
.cache/
|
||||||
|
.parcel-cache/
|
||||||
|
.turbo/
|
||||||
|
.vite/
|
||||||
|
.next/
|
||||||
|
.nuxt/
|
||||||
|
.svelte-kit/
|
||||||
|
coverage/
|
||||||
|
|
||||||
|
# .NET
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
|
TestResults/
|
||||||
|
*.user
|
||||||
|
*.suo
|
||||||
|
|
||||||
|
# Java and JVM
|
||||||
|
target/
|
||||||
|
.gradle/
|
||||||
|
*.class
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.ear
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
.python-version
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
.pytest_cache/
|
||||||
|
.mypy_cache/
|
||||||
|
.ruff_cache/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
htmlcov/
|
||||||
|
|
||||||
|
# Go
|
||||||
|
*.test
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Native and desktop builds
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.dll
|
||||||
|
*.dylib
|
||||||
|
*.so
|
||||||
|
*.exe
|
||||||
|
*.app
|
||||||
|
*.dmg
|
||||||
|
|
||||||
|
# Archives and generated packages
|
||||||
|
*.zip
|
||||||
|
*.tar
|
||||||
|
*.tar.gz
|
||||||
|
*.tgz
|
||||||
|
*.rar
|
||||||
|
*.7z
|
||||||
|
|
||||||
|
# Databases and local storage
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
*.db
|
||||||
|
*.db-journal
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
.tmp/
|
||||||
|
.temp/
|
||||||
|
|
||||||
|
# Tool-specific local files
|
||||||
|
.eslintcache
|
||||||
|
.stylelintcache
|
||||||
|
.phpunit.result.cache
|
||||||
@@ -0,0 +1,203 @@
|
|||||||
|
# AGENTS.md
|
||||||
|
|
||||||
|
This file defines how AI coding agents should work in this repository.
|
||||||
|
It is intended to remain mostly stable across projects.
|
||||||
|
|
||||||
|
## Core Principles
|
||||||
|
|
||||||
|
1. Correctness comes before speed.
|
||||||
|
2. Understand the objective before implementing.
|
||||||
|
3. Prefer the repository's existing architecture and style over new patterns.
|
||||||
|
4. Make small, reviewable changes with clear validation.
|
||||||
|
5. Do not invent missing business logic, APIs, infrastructure, or requirements.
|
||||||
|
6. Preserve user work and unrelated local changes.
|
||||||
|
7. Explain important trade-offs clearly and concisely.
|
||||||
|
|
||||||
|
## Confidence Gate
|
||||||
|
|
||||||
|
Before implementation, estimate whether the task is understood with high
|
||||||
|
confidence.
|
||||||
|
|
||||||
|
- If confidence is high, proceed and state any minor assumptions.
|
||||||
|
- If confidence is below roughly 95%, ask concise clarifying questions.
|
||||||
|
- If the ambiguity is isolated and low risk, make the smallest reasonable
|
||||||
|
assumption and document it.
|
||||||
|
- If the ambiguity affects data loss, security, public behavior, migrations,
|
||||||
|
deployment, billing, authentication, authorization, or irreversible changes,
|
||||||
|
stop and ask.
|
||||||
|
|
||||||
|
Unknowns are not implementation details. Treat them as risks.
|
||||||
|
|
||||||
|
## Prompt Improvement
|
||||||
|
|
||||||
|
When the user's request can be made safer or clearer:
|
||||||
|
|
||||||
|
- Restate the objective in engineering terms.
|
||||||
|
- Identify missing constraints or acceptance criteria.
|
||||||
|
- Recommend a simpler or more maintainable approach when appropriate.
|
||||||
|
- Challenge assumptions respectfully when they increase risk or complexity.
|
||||||
|
- Keep the final decision with the user when product intent is involved.
|
||||||
|
|
||||||
|
Do not silently change the user's goal. Improve execution, not intent.
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
Every non-trivial task should have explicit success criteria before coding.
|
||||||
|
At minimum, identify:
|
||||||
|
|
||||||
|
- Expected behavior.
|
||||||
|
- Files or modules likely affected.
|
||||||
|
- Validation commands or manual checks.
|
||||||
|
- Compatibility constraints.
|
||||||
|
- Known risks.
|
||||||
|
|
||||||
|
For documentation-only tasks, success criteria include clarity, consistency,
|
||||||
|
link integrity, low duplication, and future maintainability.
|
||||||
|
|
||||||
|
## Repository Exploration
|
||||||
|
|
||||||
|
Before modifying an existing repository:
|
||||||
|
|
||||||
|
1. Inspect the repository status.
|
||||||
|
2. Identify the main languages, frameworks, build tools, and test tools.
|
||||||
|
3. Read relevant existing files before editing them.
|
||||||
|
4. Search for established patterns before adding new abstractions.
|
||||||
|
5. Check recent decisions, conventions, and project documentation.
|
||||||
|
6. Understand whether the task is local-only, production-bound, or both.
|
||||||
|
|
||||||
|
Prefer fast search tools such as `rg` and `rg --files` when available.
|
||||||
|
|
||||||
|
## Read Before Write
|
||||||
|
|
||||||
|
Do not edit a file until you have read enough surrounding context to understand:
|
||||||
|
|
||||||
|
- The file's responsibility.
|
||||||
|
- Existing naming and formatting style.
|
||||||
|
- Its dependencies and callers.
|
||||||
|
- Its tests or validation path.
|
||||||
|
- Whether local changes already exist.
|
||||||
|
|
||||||
|
Never overwrite user changes unless explicitly instructed.
|
||||||
|
|
||||||
|
## Planning
|
||||||
|
|
||||||
|
For non-trivial tasks, create a short plan before editing.
|
||||||
|
|
||||||
|
A good plan includes:
|
||||||
|
|
||||||
|
- Discovery steps.
|
||||||
|
- Implementation steps.
|
||||||
|
- Validation steps.
|
||||||
|
- Review steps.
|
||||||
|
|
||||||
|
Keep plans flexible. Update them when the repository teaches you something new.
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
During implementation:
|
||||||
|
|
||||||
|
- Keep changes scoped to the request.
|
||||||
|
- Prefer simple, explicit code over clever abstractions.
|
||||||
|
- Use existing project patterns and helpers.
|
||||||
|
- Avoid broad refactors unless they are necessary for correctness or requested.
|
||||||
|
- Add abstractions only when they remove meaningful duplication or clarify a
|
||||||
|
stable concept.
|
||||||
|
- Keep public interfaces backward compatible unless a breaking change is
|
||||||
|
intentional and documented.
|
||||||
|
- Treat configuration, credentials, and environment behavior as production risks.
|
||||||
|
|
||||||
|
For documentation, prefer one authoritative source per topic and use links for
|
||||||
|
related material.
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
Validate every change with the strongest practical signal.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- Unit tests for isolated logic.
|
||||||
|
- Integration tests for cross-module behavior.
|
||||||
|
- Build/type checks for compile-time safety.
|
||||||
|
- Lint/format checks when the project uses them.
|
||||||
|
- Manual browser or API checks for user-facing behavior.
|
||||||
|
- Documentation link review for documentation changes.
|
||||||
|
|
||||||
|
If validation cannot be run, explain why and identify the remaining risk.
|
||||||
|
|
||||||
|
## Self Review
|
||||||
|
|
||||||
|
Before finishing:
|
||||||
|
|
||||||
|
1. Review the diff.
|
||||||
|
2. Check for accidental files, secrets, debug code, and unrelated changes.
|
||||||
|
3. Re-read changed documentation for clarity and duplication.
|
||||||
|
4. Confirm tests or checks match the risk level.
|
||||||
|
5. Verify the final state satisfies the original objective.
|
||||||
|
|
||||||
|
## Failure Analysis
|
||||||
|
|
||||||
|
When something fails:
|
||||||
|
|
||||||
|
- Capture the exact command, error, and context.
|
||||||
|
- Identify whether the failure is caused by the change, environment, data, or an
|
||||||
|
existing issue.
|
||||||
|
- Try the next most direct diagnostic step.
|
||||||
|
- Avoid speculative fixes without evidence.
|
||||||
|
- Document unresolved failures and their impact.
|
||||||
|
|
||||||
|
Do not hide validation failures.
|
||||||
|
|
||||||
|
## Communication
|
||||||
|
|
||||||
|
Communicate like a senior engineering partner:
|
||||||
|
|
||||||
|
- Be concise and precise.
|
||||||
|
- State important assumptions.
|
||||||
|
- Explain material trade-offs.
|
||||||
|
- Separate confirmed facts from hypotheses.
|
||||||
|
- Say what changed and how it was validated.
|
||||||
|
- Call out residual risk.
|
||||||
|
|
||||||
|
Avoid noisy narration. Keep the user oriented.
|
||||||
|
|
||||||
|
## Interactive vs Autonomous Execution
|
||||||
|
|
||||||
|
Work autonomously when:
|
||||||
|
|
||||||
|
- Requirements are clear.
|
||||||
|
- The change is reversible.
|
||||||
|
- The validation path is available.
|
||||||
|
- The repository patterns are clear.
|
||||||
|
|
||||||
|
Ask before proceeding when:
|
||||||
|
|
||||||
|
- Requirements are materially ambiguous.
|
||||||
|
- Multiple reasonable product behaviors exist.
|
||||||
|
- The change may destroy data.
|
||||||
|
- The change affects security, auth, billing, compliance, or production access.
|
||||||
|
- A migration or deployment strategy is unclear.
|
||||||
|
|
||||||
|
## Efficient Use Of Delegated Agents
|
||||||
|
|
||||||
|
Use delegated agents only when they are available and useful for independent,
|
||||||
|
low-risk work such as:
|
||||||
|
|
||||||
|
- Searching a large codebase for references.
|
||||||
|
- Reviewing documentation for broken links.
|
||||||
|
- Comparing repeated implementation patterns.
|
||||||
|
- Running independent validation passes.
|
||||||
|
|
||||||
|
Keep architectural decisions, final trade-offs, and risky implementation choices
|
||||||
|
in the primary reasoning process.
|
||||||
|
|
||||||
|
## Definition Of Done
|
||||||
|
|
||||||
|
A task is done when:
|
||||||
|
|
||||||
|
- The requested behavior or artifact exists.
|
||||||
|
- The implementation is consistent with repository architecture and conventions.
|
||||||
|
- Relevant tests, builds, checks, or manual validation have been run.
|
||||||
|
- Documentation is updated when behavior, setup, or architecture changed.
|
||||||
|
- The diff has been reviewed for unrelated changes.
|
||||||
|
- Known limitations or remaining risks are clearly communicated.
|
||||||
|
- The final response names the changed areas and validation performed.
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
# Engineering Starter Kit
|
||||||
|
|
||||||
|
This repository is a reusable engineering foundation for new software projects.
|
||||||
|
It is intentionally language, framework, architecture, and deployment agnostic.
|
||||||
|
|
||||||
|
Use it to bootstrap consistent project documentation, architecture records,
|
||||||
|
coding conventions, release practices, and AI-agent working agreements.
|
||||||
|
|
||||||
|
## What This Kit Provides
|
||||||
|
|
||||||
|
- A universal AI-agent engineering contract in [AGENTS.md](AGENTS.md).
|
||||||
|
- Project documentation guides in [docs/](docs/).
|
||||||
|
- Copy-ready project templates in [templates/](templates/).
|
||||||
|
- Completed examples in [examples/](examples/).
|
||||||
|
- A language-agnostic [.gitignore](.gitignore) suitable for most starter repos.
|
||||||
|
|
||||||
|
## Documentation System
|
||||||
|
|
||||||
|
Each document has one primary responsibility. Avoid duplicating the same policy
|
||||||
|
or decision in multiple files; link to the source of truth instead.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
README["README.md<br/>How to use the kit"]
|
||||||
|
AGENTS["AGENTS.md<br/>AI-agent working contract"]
|
||||||
|
Project["docs/PROJECT.md<br/>Project intent and runtime facts"]
|
||||||
|
Architecture["docs/ARCHITECTURE.md<br/>System structure and rules"]
|
||||||
|
Conventions["docs/CONVENTIONS.md<br/>Engineering standards"]
|
||||||
|
Decisions["docs/DECISIONS.md<br/>Architecture Decision Records"]
|
||||||
|
Prompts["docs/PROMPTS.md<br/>Reusable engineering prompts"]
|
||||||
|
Checklists["docs/CHECKLISTS.md<br/>Execution quality gates"]
|
||||||
|
Workflow["docs/workflow.md<br/>Day-to-day delivery flow"]
|
||||||
|
Branching["docs/branching.md<br/>Git branch strategy"]
|
||||||
|
Release["docs/release-process.md<br/>Release governance"]
|
||||||
|
Setup["docs/repository-setup.md<br/>Bootstrap instructions"]
|
||||||
|
Templates["templates/<br/>Reusable placeholders"]
|
||||||
|
Examples["examples/<br/>Completed reference project"]
|
||||||
|
|
||||||
|
README --> AGENTS
|
||||||
|
README --> Project
|
||||||
|
README --> Architecture
|
||||||
|
README --> Conventions
|
||||||
|
README --> Decisions
|
||||||
|
README --> Prompts
|
||||||
|
README --> Checklists
|
||||||
|
README --> Workflow
|
||||||
|
Workflow --> Branching
|
||||||
|
Workflow --> Release
|
||||||
|
Setup --> Templates
|
||||||
|
Templates --> Examples
|
||||||
|
Project --> Architecture
|
||||||
|
Architecture --> Decisions
|
||||||
|
Conventions --> Checklists
|
||||||
|
```
|
||||||
|
|
||||||
|
## Document Responsibilities
|
||||||
|
|
||||||
|
| File | Responsibility |
|
||||||
|
| --- | --- |
|
||||||
|
| [AGENTS.md](AGENTS.md) | Defines how AI coding agents should explore, plan, implement, validate, and communicate. |
|
||||||
|
| [docs/PROJECT.md](docs/PROJECT.md) | Captures project-specific facts: vision, requirements, stack, infrastructure, operations, and roadmap. |
|
||||||
|
| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Describes the system shape, dependency rules, flows, security posture, and scalability model. |
|
||||||
|
| [docs/CONVENTIONS.md](docs/CONVENTIONS.md) | Documents coding, testing, review, naming, organization, and collaboration standards. |
|
||||||
|
| [docs/DECISIONS.md](docs/DECISIONS.md) | Stores Architecture Decision Records and their consequences. |
|
||||||
|
| [docs/PROMPTS.md](docs/PROMPTS.md) | Provides reusable prompts for engineering work with humans and AI agents. |
|
||||||
|
| [docs/CHECKLISTS.md](docs/CHECKLISTS.md) | Provides concise quality gates for common engineering tasks. |
|
||||||
|
| [docs/workflow.md](docs/workflow.md) | Defines the end-to-end development workflow. |
|
||||||
|
| [docs/branching.md](docs/branching.md) | Defines branch naming, merge policy, and release branch expectations. |
|
||||||
|
| [docs/release-process.md](docs/release-process.md) | Defines release readiness, deployment, rollback, and post-release review. |
|
||||||
|
| [docs/repository-setup.md](docs/repository-setup.md) | Explains how to turn this kit into a new project repository. |
|
||||||
|
|
||||||
|
## Recommended Bootstrap Workflow
|
||||||
|
|
||||||
|
1. Copy this repository or use it as a template for a new project.
|
||||||
|
2. Fill [templates/PROJECT.template.md](templates/PROJECT.template.md) and save it as `docs/PROJECT.md`.
|
||||||
|
3. Fill [templates/ARCHITECTURE.template.md](templates/ARCHITECTURE.template.md) and save it as `docs/ARCHITECTURE.md`.
|
||||||
|
4. Fill [templates/CONVENTIONS.template.md](templates/CONVENTIONS.template.md) and save it as `docs/CONVENTIONS.md`.
|
||||||
|
5. Record material technical decisions with [templates/DECISIONS.template.md](templates/DECISIONS.template.md).
|
||||||
|
6. Use [templates/FEATURE.template.md](templates/FEATURE.template.md) for non-trivial feature work.
|
||||||
|
7. Keep [AGENTS.md](AGENTS.md) close to the root so AI tools can discover it automatically.
|
||||||
|
8. Review [docs/CHECKLISTS.md](docs/CHECKLISTS.md) before opening pull requests or releasing.
|
||||||
|
|
||||||
|
## How AI Coding Agents Should Use This Repository
|
||||||
|
|
||||||
|
AI agents should read [AGENTS.md](AGENTS.md) first, then inspect the relevant
|
||||||
|
project documents before modifying code or documentation. For new projects, the
|
||||||
|
minimum context set is:
|
||||||
|
|
||||||
|
- [docs/PROJECT.md](docs/PROJECT.md)
|
||||||
|
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
|
||||||
|
- [docs/CONVENTIONS.md](docs/CONVENTIONS.md)
|
||||||
|
- [docs/DECISIONS.md](docs/DECISIONS.md)
|
||||||
|
- [docs/CHECKLISTS.md](docs/CHECKLISTS.md)
|
||||||
|
|
||||||
|
Agents should treat missing project facts as unknown, not as permission to
|
||||||
|
invent business logic or architecture.
|
||||||
|
|
||||||
|
## Maintaining The Kit
|
||||||
|
|
||||||
|
- Keep the kit generic unless a rule is broadly useful across many project types.
|
||||||
|
- Prefer links over duplicated guidance.
|
||||||
|
- Keep examples realistic but fictional.
|
||||||
|
- Add new templates only when they solve repeated project setup or delivery work.
|
||||||
|
- Update checklists when real incidents reveal missing quality gates.
|
||||||
|
- Record significant changes to the kit itself as decisions in
|
||||||
|
[docs/DECISIONS.md](docs/DECISIONS.md).
|
||||||
|
|
||||||
|
## Definition Of Ready For A New Project
|
||||||
|
|
||||||
|
A project bootstrapped from this kit is ready for implementation when:
|
||||||
|
|
||||||
|
- The project vision and constraints are documented.
|
||||||
|
- The initial architecture style is selected or explicitly deferred.
|
||||||
|
- Key conventions are documented.
|
||||||
|
- The first delivery workflow is understood.
|
||||||
|
- Required environments and secrets are identified.
|
||||||
|
- Validation expectations are clear enough to prevent guesswork.
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
This document describes the structure, boundaries, flows, and technical rules of
|
||||||
|
the system.
|
||||||
|
|
||||||
|
For project intent and runtime facts, see [PROJECT.md](PROJECT.md).
|
||||||
|
For coding standards, see [CONVENTIONS.md](CONVENTIONS.md).
|
||||||
|
For recorded trade-offs, see [DECISIONS.md](DECISIONS.md).
|
||||||
|
|
||||||
|
## High-Level Overview
|
||||||
|
|
||||||
|
`{{PROJECT_NAME}}` uses `{{ARCHITECTURE_STYLE}}` to support
|
||||||
|
`{{PRIMARY_USE_CASES}}`.
|
||||||
|
|
||||||
|
Replace this section with a concise explanation of the system's major parts,
|
||||||
|
their responsibilities, and the constraints that shaped the architecture.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
User["User or External Client"]
|
||||||
|
Interface["Interface Layer<br/>API, UI, CLI, Worker"]
|
||||||
|
Application["Application Layer<br/>Use cases and orchestration"]
|
||||||
|
Domain["Domain Layer<br/>Rules and invariants"]
|
||||||
|
Infrastructure["Infrastructure Layer<br/>Database, queues, files, services"]
|
||||||
|
External["External Systems"]
|
||||||
|
|
||||||
|
User --> Interface
|
||||||
|
Interface --> Application
|
||||||
|
Application --> Domain
|
||||||
|
Application --> Infrastructure
|
||||||
|
Infrastructure --> External
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture Style
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Style | `{{ARCHITECTURE_STYLE}}` |
|
||||||
|
| Primary reason | `{{ARCHITECTURE_REASON}}` |
|
||||||
|
| Main trade-off | `{{ARCHITECTURE_TRADE_OFF}}` |
|
||||||
|
| Related decision | [DECISIONS.md](DECISIONS.md) |
|
||||||
|
|
||||||
|
Common examples include layered architecture, modular monolith, microservices,
|
||||||
|
event-driven architecture, hexagonal architecture, desktop MVC/MVVM, or
|
||||||
|
game-specific entity/component systems.
|
||||||
|
|
||||||
|
## Folder Structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
{{PROJECT_ROOT}}/
|
||||||
|
{{SOURCE_FOLDER}}/
|
||||||
|
{{TEST_FOLDER}}/
|
||||||
|
{{DOCS_FOLDER}}/
|
||||||
|
{{BUILD_FOLDER}}/
|
||||||
|
```
|
||||||
|
|
||||||
|
| Folder | Responsibility |
|
||||||
|
| --- | --- |
|
||||||
|
| `{{FOLDER}}` | `{{FOLDER_RESPONSIBILITY}}` |
|
||||||
|
|
||||||
|
Keep generated files, build outputs, and framework artifacts out of source
|
||||||
|
folders unless the framework requires them.
|
||||||
|
|
||||||
|
## Module Responsibilities
|
||||||
|
|
||||||
|
| Module | Responsibility | Owned Data | Public Interface |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| `{{MODULE_NAME}}` | `{{MODULE_RESPONSIBILITY}}` | `{{OWNED_DATA}}` | `{{PUBLIC_INTERFACE}}` |
|
||||||
|
|
||||||
|
Modules should have clear ownership. Shared utilities should remain small and
|
||||||
|
generic; domain behavior belongs with the module that owns the domain concept.
|
||||||
|
|
||||||
|
## Dependency Rules
|
||||||
|
|
||||||
|
Define allowed dependencies explicitly.
|
||||||
|
|
||||||
|
- `{{DEPENDENCY_RULE_1}}`
|
||||||
|
- `{{DEPENDENCY_RULE_2}}`
|
||||||
|
- `{{DEPENDENCY_RULE_3}}`
|
||||||
|
|
||||||
|
Recommended default:
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
UI["UI, API, CLI, Worker"]
|
||||||
|
App["Application"]
|
||||||
|
Domain["Domain"]
|
||||||
|
Infra["Infrastructure"]
|
||||||
|
|
||||||
|
UI --> App
|
||||||
|
App --> Domain
|
||||||
|
App --> Infra
|
||||||
|
Infra --> Domain
|
||||||
|
```
|
||||||
|
|
||||||
|
Domain code should not depend on delivery mechanisms, databases, network
|
||||||
|
clients, or framework-specific runtime concerns unless the project intentionally
|
||||||
|
uses an architecture where that trade-off is accepted and recorded.
|
||||||
|
|
||||||
|
## Request Flow
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant Client
|
||||||
|
participant Interface
|
||||||
|
participant Application
|
||||||
|
participant Domain
|
||||||
|
participant Infrastructure
|
||||||
|
|
||||||
|
Client->>Interface: Request or command
|
||||||
|
Interface->>Application: Validate transport shape
|
||||||
|
Application->>Domain: Execute business rule
|
||||||
|
Application->>Infrastructure: Persist or integrate
|
||||||
|
Infrastructure-->>Application: Result
|
||||||
|
Application-->>Interface: Response model
|
||||||
|
Interface-->>Client: Response
|
||||||
|
```
|
||||||
|
|
||||||
|
Document deviations for async jobs, desktop workflows, games, or event-driven
|
||||||
|
flows.
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
| Data | Source | Owner | Storage | Consumers |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| `{{DATA_ENTITY}}` | `{{DATA_SOURCE}}` | `{{DATA_OWNER}}` | `{{DATA_STORAGE}}` | `{{DATA_CONSUMERS}}` |
|
||||||
|
|
||||||
|
Data ownership should be clear before adding shared tables, shared schemas,
|
||||||
|
cross-service writes, or replicated state.
|
||||||
|
|
||||||
|
## Domain Model
|
||||||
|
|
||||||
|
| Concept | Meaning | Invariants |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `{{DOMAIN_CONCEPT}}` | `{{DOMAIN_MEANING}}` | `{{DOMAIN_INVARIANTS}}` |
|
||||||
|
|
||||||
|
Use this section for durable business concepts, not framework models or DTOs.
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
| Integration | Direction | Protocol | Reliability Expectations |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| `{{INTEGRATION_NAME}}` | `{{INBOUND_OR_OUTBOUND}}` | `{{PROTOCOL}}` | `{{RELIABILITY_EXPECTATIONS}}` |
|
||||||
|
|
||||||
|
For each integration, document authentication, retry behavior, timeouts,
|
||||||
|
idempotency, and failure handling.
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
| Area | Policy |
|
||||||
|
| --- | --- |
|
||||||
|
| Authentication | `{{AUTHENTICATION_POLICY}}` |
|
||||||
|
| Authorization | `{{AUTHORIZATION_POLICY}}` |
|
||||||
|
| Secrets | `{{SECRETS_POLICY}}` |
|
||||||
|
| Input validation | `{{INPUT_VALIDATION_POLICY}}` |
|
||||||
|
| Output encoding | `{{OUTPUT_ENCODING_POLICY}}` |
|
||||||
|
| Audit logging | `{{AUDIT_LOGGING_POLICY}}` |
|
||||||
|
| Dependency security | `{{DEPENDENCY_SECURITY_POLICY}}` |
|
||||||
|
|
||||||
|
Security-sensitive decisions should be recorded in [DECISIONS.md](DECISIONS.md).
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
| Error Type | Handling Policy | User/Client Response |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Validation error | `{{VALIDATION_ERROR_POLICY}}` | `{{VALIDATION_RESPONSE}}` |
|
||||||
|
| Domain error | `{{DOMAIN_ERROR_POLICY}}` | `{{DOMAIN_RESPONSE}}` |
|
||||||
|
| Infrastructure error | `{{INFRASTRUCTURE_ERROR_POLICY}}` | `{{INFRASTRUCTURE_RESPONSE}}` |
|
||||||
|
| Unexpected error | `{{UNEXPECTED_ERROR_POLICY}}` | `{{UNEXPECTED_RESPONSE}}` |
|
||||||
|
|
||||||
|
Errors should preserve enough diagnostic context for operators without exposing
|
||||||
|
secrets or internal implementation details to users.
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
| Concern | Expectation | Measurement |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Latency | `{{LATENCY_EXPECTATION}}` | `{{LATENCY_MEASUREMENT}}` |
|
||||||
|
| Throughput | `{{THROUGHPUT_EXPECTATION}}` | `{{THROUGHPUT_MEASUREMENT}}` |
|
||||||
|
| Resource usage | `{{RESOURCE_EXPECTATION}}` | `{{RESOURCE_MEASUREMENT}}` |
|
||||||
|
|
||||||
|
Document known hot paths and the expected performance test strategy.
|
||||||
|
|
||||||
|
## Scalability
|
||||||
|
|
||||||
|
| Dimension | Current Strategy | Future Strategy |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Traffic | `{{TRAFFIC_STRATEGY}}` | `{{TRAFFIC_FUTURE_STRATEGY}}` |
|
||||||
|
| Data volume | `{{DATA_VOLUME_STRATEGY}}` | `{{DATA_VOLUME_FUTURE_STRATEGY}}` |
|
||||||
|
| Team size | `{{TEAM_SCALE_STRATEGY}}` | `{{TEAM_SCALE_FUTURE_STRATEGY}}` |
|
||||||
|
|
||||||
|
Scalability work should be driven by measured pressure or clear product
|
||||||
|
requirements, not premature complexity.
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
# Checklists
|
||||||
|
|
||||||
|
Use these concise checklists as quality gates. Expand them only when repeated
|
||||||
|
project experience proves that more detail is necessary.
|
||||||
|
|
||||||
|
For workflow details, see [workflow.md](workflow.md).
|
||||||
|
For code standards, see [CONVENTIONS.md](CONVENTIONS.md).
|
||||||
|
For releases, see [release-process.md](release-process.md).
|
||||||
|
|
||||||
|
## Feature Development
|
||||||
|
|
||||||
|
- [ ] Objective and acceptance criteria are clear.
|
||||||
|
- [ ] Relevant docs and existing implementation were read.
|
||||||
|
- [ ] Architecture boundaries are respected.
|
||||||
|
- [ ] User-facing behavior is implemented.
|
||||||
|
- [ ] Edge cases and failure states are handled.
|
||||||
|
- [ ] Tests or manual checks cover the main behavior.
|
||||||
|
- [ ] Documentation is updated when behavior or setup changed.
|
||||||
|
|
||||||
|
## Bug Fix
|
||||||
|
|
||||||
|
- [ ] Observed behavior is understood.
|
||||||
|
- [ ] Expected behavior is confirmed.
|
||||||
|
- [ ] Root cause is identified before changing code.
|
||||||
|
- [ ] Fix is scoped to the cause.
|
||||||
|
- [ ] Regression coverage is added when practical.
|
||||||
|
- [ ] Validation proves the bug is fixed.
|
||||||
|
- [ ] Remaining risk is documented.
|
||||||
|
|
||||||
|
## Refactoring
|
||||||
|
|
||||||
|
- [ ] Behavior-preserving intent is explicit.
|
||||||
|
- [ ] Existing tests or checks are identified.
|
||||||
|
- [ ] Changes are small and reviewable.
|
||||||
|
- [ ] Public contracts remain stable or the break is approved.
|
||||||
|
- [ ] Dead code is removed only when safe.
|
||||||
|
- [ ] Validation is run before and after meaningful changes.
|
||||||
|
|
||||||
|
## API Review
|
||||||
|
|
||||||
|
- [ ] Consumer needs are clear.
|
||||||
|
- [ ] Request and response contracts are stable.
|
||||||
|
- [ ] Validation errors are consistent.
|
||||||
|
- [ ] Authorization is explicit.
|
||||||
|
- [ ] Pagination, filtering, and sorting are defined where needed.
|
||||||
|
- [ ] Idempotency is addressed for retryable writes.
|
||||||
|
- [ ] Versioning and compatibility are considered.
|
||||||
|
|
||||||
|
## Database Review
|
||||||
|
|
||||||
|
- [ ] Data ownership is clear.
|
||||||
|
- [ ] Constraints protect important invariants.
|
||||||
|
- [ ] Indexes match expected query patterns.
|
||||||
|
- [ ] Migration is reversible or rollback-safe.
|
||||||
|
- [ ] Backfill and deployment order are documented.
|
||||||
|
- [ ] Retention and privacy requirements are addressed.
|
||||||
|
- [ ] Backup and restore impact is understood.
|
||||||
|
|
||||||
|
## Security Review
|
||||||
|
|
||||||
|
- [ ] Authentication is required where expected.
|
||||||
|
- [ ] Authorization is enforced server-side or at the trusted boundary.
|
||||||
|
- [ ] Inputs are validated.
|
||||||
|
- [ ] Outputs are safely encoded or serialized.
|
||||||
|
- [ ] Secrets are not logged or committed.
|
||||||
|
- [ ] Sensitive data exposure is minimized.
|
||||||
|
- [ ] Dependency risk is reviewed.
|
||||||
|
- [ ] Abuse cases and rate limits are considered where relevant.
|
||||||
|
|
||||||
|
## Performance Review
|
||||||
|
|
||||||
|
- [ ] Hot paths are identified.
|
||||||
|
- [ ] Database queries are bounded and indexed.
|
||||||
|
- [ ] Network calls have timeouts and retry policy where appropriate.
|
||||||
|
- [ ] Expensive work is cached, batched, async, or justified.
|
||||||
|
- [ ] UI updates avoid unnecessary re-rendering where relevant.
|
||||||
|
- [ ] Performance expectations are measurable.
|
||||||
|
|
||||||
|
## Pull Request
|
||||||
|
|
||||||
|
- [ ] Summary explains what and why.
|
||||||
|
- [ ] Scope is focused.
|
||||||
|
- [ ] Tests or checks are listed.
|
||||||
|
- [ ] Screenshots or recordings are included for UI changes.
|
||||||
|
- [ ] Migration and deployment notes are included when relevant.
|
||||||
|
- [ ] Risks and follow-ups are documented.
|
||||||
|
- [ ] No secrets, debug code, or unrelated files are included.
|
||||||
|
|
||||||
|
## Release
|
||||||
|
|
||||||
|
- [ ] Release scope is defined.
|
||||||
|
- [ ] Required checks passed.
|
||||||
|
- [ ] Database migrations are reviewed.
|
||||||
|
- [ ] Configuration and secrets are ready.
|
||||||
|
- [ ] Rollback plan exists.
|
||||||
|
- [ ] Monitoring and alerting are ready.
|
||||||
|
- [ ] Stakeholders are informed.
|
||||||
|
|
||||||
|
## Production Readiness
|
||||||
|
|
||||||
|
- [ ] Runtime environments are documented.
|
||||||
|
- [ ] Health checks exist.
|
||||||
|
- [ ] Logs include correlation identifiers.
|
||||||
|
- [ ] Backups and restore process are tested or scheduled.
|
||||||
|
- [ ] Alerts cover availability and critical failures.
|
||||||
|
- [ ] Security-critical settings are production-safe.
|
||||||
|
- [ ] Operational runbooks exist for common failures.
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
# Conventions
|
||||||
|
|
||||||
|
This document defines project engineering standards. It should remain practical,
|
||||||
|
specific, and enforceable.
|
||||||
|
|
||||||
|
For project facts, see [PROJECT.md](PROJECT.md).
|
||||||
|
For architecture boundaries, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
||||||
|
For task quality gates, see [CHECKLISTS.md](CHECKLISTS.md).
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
Use names that expose intent and domain meaning.
|
||||||
|
|
||||||
|
- Prefer domain terms over technical shorthand.
|
||||||
|
- Avoid abbreviations unless they are widely understood in the project.
|
||||||
|
- Name booleans as predicates, such as `isEnabled`, `hasPermission`, or
|
||||||
|
`canRetry`.
|
||||||
|
- Name commands by action and object, such as `CreateInvoice` or
|
||||||
|
`syncCustomer`.
|
||||||
|
- Name events in past tense when they represent something that happened.
|
||||||
|
|
||||||
|
Add language-specific naming rules here:
|
||||||
|
|
||||||
|
- `{{LANGUAGE_NAMING_RULE}}`
|
||||||
|
|
||||||
|
## File Organization
|
||||||
|
|
||||||
|
Files should have one clear responsibility.
|
||||||
|
|
||||||
|
- Keep files small enough to review comfortably.
|
||||||
|
- Co-locate tests with the tested module when that matches the stack convention.
|
||||||
|
- Separate generated files from hand-written source.
|
||||||
|
- Avoid catch-all utility files that collect unrelated behavior.
|
||||||
|
|
||||||
|
Project-specific rules:
|
||||||
|
|
||||||
|
- `{{FILE_ORGANIZATION_RULE}}`
|
||||||
|
|
||||||
|
## Folder Organization
|
||||||
|
|
||||||
|
Folders should communicate ownership and architecture boundaries.
|
||||||
|
|
||||||
|
- Organize by feature or module when domain ownership matters.
|
||||||
|
- Organize by technical layer only when it improves clarity for the project.
|
||||||
|
- Keep public interfaces easy to find.
|
||||||
|
- Keep infrastructure details out of domain folders unless deliberately chosen.
|
||||||
|
|
||||||
|
Project-specific folder map:
|
||||||
|
|
||||||
|
| Folder | Rule |
|
||||||
|
| --- | --- |
|
||||||
|
| `{{FOLDER}}` | `{{FOLDER_RULE}}` |
|
||||||
|
|
||||||
|
## Dependency Injection
|
||||||
|
|
||||||
|
Use dependency injection to make boundaries explicit and tests practical.
|
||||||
|
|
||||||
|
- Inject external resources, clocks, random generators, HTTP clients, file
|
||||||
|
systems, queues, and database access.
|
||||||
|
- Avoid service locators unless the framework requires them.
|
||||||
|
- Keep object lifetimes explicit.
|
||||||
|
- Do not inject dependencies that are pure values or local implementation
|
||||||
|
details.
|
||||||
|
|
||||||
|
Project-specific DI rules:
|
||||||
|
|
||||||
|
- `{{DEPENDENCY_INJECTION_RULE}}`
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
Logging should support operations and debugging without leaking sensitive data.
|
||||||
|
|
||||||
|
- Use structured logs when the platform supports them.
|
||||||
|
- Include correlation or request identifiers.
|
||||||
|
- Log decisions and external failures at meaningful boundaries.
|
||||||
|
- Do not log secrets, access tokens, passwords, private keys, or full payment
|
||||||
|
data.
|
||||||
|
- Avoid noisy logs inside tight loops or high-volume paths.
|
||||||
|
|
||||||
|
Project-specific logging rules:
|
||||||
|
|
||||||
|
- `{{LOGGING_RULE}}`
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
Validation should happen at the correct boundary.
|
||||||
|
|
||||||
|
- Validate transport shape at the interface boundary.
|
||||||
|
- Validate business invariants in the domain or application layer.
|
||||||
|
- Validate persistence constraints before relying on database failures for
|
||||||
|
expected user errors.
|
||||||
|
- Return actionable validation feedback where appropriate.
|
||||||
|
|
||||||
|
Project-specific validation rules:
|
||||||
|
|
||||||
|
- `{{VALIDATION_RULE}}`
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
Errors should be explicit, observable, and safe.
|
||||||
|
|
||||||
|
- Use typed or structured errors where the language supports them.
|
||||||
|
- Do not swallow exceptions without a recovery path.
|
||||||
|
- Map internal errors to stable user-facing or client-facing responses.
|
||||||
|
- Preserve diagnostic context for logs.
|
||||||
|
- Avoid exposing stack traces or implementation details to users.
|
||||||
|
|
||||||
|
Project-specific error rules:
|
||||||
|
|
||||||
|
- `{{ERROR_HANDLING_RULE}}`
|
||||||
|
|
||||||
|
## DTO Rules
|
||||||
|
|
||||||
|
DTOs represent boundary contracts.
|
||||||
|
|
||||||
|
- Keep DTOs separate from domain models when they change for different reasons.
|
||||||
|
- Do not put business rules in DTOs.
|
||||||
|
- Version public contracts deliberately.
|
||||||
|
- Validate DTO shape before mapping to domain commands or queries.
|
||||||
|
- Avoid leaking persistence models through public APIs.
|
||||||
|
|
||||||
|
Project-specific DTO rules:
|
||||||
|
|
||||||
|
- `{{DTO_RULE}}`
|
||||||
|
|
||||||
|
## Repository Rules
|
||||||
|
|
||||||
|
Repositories, gateways, or data access abstractions should express persistence
|
||||||
|
intent without hiding important consistency behavior.
|
||||||
|
|
||||||
|
- Keep query methods specific enough to reveal purpose.
|
||||||
|
- Avoid generic repositories when they obscure domain behavior.
|
||||||
|
- Document transaction boundaries.
|
||||||
|
- Make idempotency explicit for write operations where retries are possible.
|
||||||
|
|
||||||
|
Project-specific repository rules:
|
||||||
|
|
||||||
|
- `{{REPOSITORY_RULE}}`
|
||||||
|
|
||||||
|
## Service Rules
|
||||||
|
|
||||||
|
Services should coordinate use cases, not become unbounded containers.
|
||||||
|
|
||||||
|
- Prefer cohesive application services around use cases.
|
||||||
|
- Keep domain rules in domain objects or domain services.
|
||||||
|
- Keep infrastructure calls behind clear interfaces.
|
||||||
|
- Avoid services named only after technical actions such as `Manager`,
|
||||||
|
`Helper`, or `Processor` unless the meaning is precise in context.
|
||||||
|
|
||||||
|
Project-specific service rules:
|
||||||
|
|
||||||
|
- `{{SERVICE_RULE}}`
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
Tests should match risk and behavior.
|
||||||
|
|
||||||
|
- Unit test domain logic and pure transformations.
|
||||||
|
- Integration test database, queue, file, network, and framework boundaries.
|
||||||
|
- End-to-end test critical user journeys.
|
||||||
|
- Regression test bugs before or with the fix.
|
||||||
|
- Keep tests deterministic and independent where practical.
|
||||||
|
|
||||||
|
Project-specific testing rules:
|
||||||
|
|
||||||
|
- `{{TESTING_RULE}}`
|
||||||
|
|
||||||
|
## Git Workflow
|
||||||
|
|
||||||
|
Use [branching.md](branching.md) for branch strategy.
|
||||||
|
|
||||||
|
Default expectations:
|
||||||
|
|
||||||
|
- Keep commits focused and reviewable.
|
||||||
|
- Write commit messages that describe the reason and outcome.
|
||||||
|
- Rebase or merge according to the project branch policy.
|
||||||
|
- Do not mix unrelated refactors with behavior changes.
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
Pull requests should explain what changed, why it changed, and how it was
|
||||||
|
validated.
|
||||||
|
|
||||||
|
Recommended PR sections:
|
||||||
|
|
||||||
|
- Summary.
|
||||||
|
- Scope.
|
||||||
|
- Validation.
|
||||||
|
- Risks.
|
||||||
|
- Screenshots or recordings for UI changes.
|
||||||
|
- Migration or deployment notes when relevant.
|
||||||
|
|
||||||
|
Use [CHECKLISTS.md](CHECKLISTS.md) before requesting review.
|
||||||
|
|
||||||
|
## Code Reviews
|
||||||
|
|
||||||
|
Reviews should prioritize correctness and maintainability.
|
||||||
|
|
||||||
|
Review for:
|
||||||
|
|
||||||
|
- Behavior and edge cases.
|
||||||
|
- Security and authorization.
|
||||||
|
- Data integrity.
|
||||||
|
- Architecture boundaries.
|
||||||
|
- Test quality.
|
||||||
|
- Operational impact.
|
||||||
|
- Readability.
|
||||||
|
|
||||||
|
Style comments should reference documented conventions or automated tooling
|
||||||
|
where possible.
|
||||||
@@ -0,0 +1,247 @@
|
|||||||
|
# Decisions
|
||||||
|
|
||||||
|
This document contains Architecture Decision Records (ADRs).
|
||||||
|
|
||||||
|
Use ADRs for decisions that materially affect architecture, operations,
|
||||||
|
security, team workflow, data ownership, public contracts, or long-term
|
||||||
|
maintainability.
|
||||||
|
|
||||||
|
For architecture context, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
||||||
|
For project constraints, see [PROJECT.md](PROJECT.md).
|
||||||
|
|
||||||
|
## Status Values
|
||||||
|
|
||||||
|
- Proposed: under discussion.
|
||||||
|
- Accepted: current decision.
|
||||||
|
- Superseded: replaced by a newer decision.
|
||||||
|
- Deprecated: no longer recommended, but still present.
|
||||||
|
- Rejected: considered and intentionally not chosen.
|
||||||
|
|
||||||
|
## ADR Index
|
||||||
|
|
||||||
|
| ID | Title | Status | Date |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| ADR-000 | ADR template | Accepted | `{{DATE}}` |
|
||||||
|
| ADR-001 | Example: Start with a modular monolith | Example | 2026-06-28 |
|
||||||
|
| ADR-002 | Example: Keep project documentation in the repository | Example | 2026-06-28 |
|
||||||
|
| ADR-003 | Example: Require explicit validation evidence before merge | Example | 2026-06-28 |
|
||||||
|
|
||||||
|
## ADR-000: ADR Template
|
||||||
|
|
||||||
|
### Title
|
||||||
|
|
||||||
|
`{{DECISION_TITLE}}`
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
`{{STATUS}}`
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
`{{DATE}}`
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
`{{CONTEXT}}`
|
||||||
|
|
||||||
|
Describe the environment, constraints, project stage, team needs, and forces
|
||||||
|
that make the decision necessary.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
`{{PROBLEM}}`
|
||||||
|
|
||||||
|
State the specific problem being solved. Avoid combining unrelated decisions.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| `{{ALTERNATIVE_1}}` | `{{ALTERNATIVE_1_SUMMARY}}` |
|
||||||
|
| `{{ALTERNATIVE_2}}` | `{{ALTERNATIVE_2_SUMMARY}}` |
|
||||||
|
| `{{ALTERNATIVE_3}}` | `{{ALTERNATIVE_3_SUMMARY}}` |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- `{{PRO}}`
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- `{{CON}}`
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
`{{DECISION}}`
|
||||||
|
|
||||||
|
Write the chosen option and why it best fits the current constraints.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- `{{CONSEQUENCE}}`
|
||||||
|
|
||||||
|
Document expected benefits, costs, operational impacts, migration needs, and
|
||||||
|
future review triggers.
|
||||||
|
|
||||||
|
## ADR-001: Example: Start With A Modular Monolith
|
||||||
|
|
||||||
|
### Title
|
||||||
|
|
||||||
|
Start with a modular monolith before introducing microservices.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
The fictional project `Atlas Desk` is a new workflow application with one small
|
||||||
|
team, one primary database, and requirements that are still evolving.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
The team needs clear module boundaries without accepting the operational cost of
|
||||||
|
distributed services too early.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| Layered monolith | Simple to build, but feature boundaries may become unclear. |
|
||||||
|
| Modular monolith | Strong internal boundaries with one deployable unit. |
|
||||||
|
| Microservices | Independent deployments, but higher operational and data consistency cost. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Preserves deployment simplicity.
|
||||||
|
- Supports clear module ownership.
|
||||||
|
- Avoids premature distributed transactions and network failure modes.
|
||||||
|
- Allows extraction of services later when boundaries are proven.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Requires discipline to maintain module boundaries.
|
||||||
|
- Independent scaling by module is limited.
|
||||||
|
- Poor internal boundaries can still create a tightly coupled system.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Use a modular monolith as the initial architecture.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- Module boundaries must be documented in [ARCHITECTURE.md](ARCHITECTURE.md).
|
||||||
|
- Cross-module access must go through public interfaces.
|
||||||
|
- Service extraction can be reconsidered when team scale, traffic, or ownership
|
||||||
|
pressure justifies it.
|
||||||
|
|
||||||
|
## ADR-002: Example: Keep Project Documentation In The Repository
|
||||||
|
|
||||||
|
### Title
|
||||||
|
|
||||||
|
Keep durable engineering documentation in the source repository.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
The project will use issue trackers and chat for coordination, but architecture,
|
||||||
|
setup, and operating knowledge must remain discoverable by humans and AI agents.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
External documentation often drifts from code and is harder for development
|
||||||
|
tools to discover during implementation.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| Repository documentation | Versioned with code and easy for agents to read. |
|
||||||
|
| Wiki | Easier non-developer editing, but often drifts from code changes. |
|
||||||
|
| Chat-only knowledge | Fast, but not durable or discoverable. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Documentation changes can be reviewed with code.
|
||||||
|
- Agents and developers can discover project context locally.
|
||||||
|
- Historical context remains connected to commits.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Non-developers may find editing less convenient.
|
||||||
|
- Documentation quality still requires review discipline.
|
||||||
|
- Large diagrams or rich media may need external tooling.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Keep durable engineering documentation in the repository under `docs/`.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- Pull requests that change architecture or operations should update docs.
|
||||||
|
- Temporary planning can live elsewhere, but accepted decisions belong here.
|
||||||
|
- Links must be reviewed as part of documentation changes.
|
||||||
|
|
||||||
|
## ADR-003: Example: Require Explicit Validation Evidence Before Merge
|
||||||
|
|
||||||
|
### Title
|
||||||
|
|
||||||
|
Require explicit validation evidence before merging changes.
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Example
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
The project may use AI-assisted development and multiple contributors. Reviewers
|
||||||
|
need a reliable way to understand how changes were checked.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Pull requests without validation evidence increase review time and regression
|
||||||
|
risk.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| No required evidence | Fastest locally, but makes review less reliable. |
|
||||||
|
| Validation summary in PR | Lightweight and visible to reviewers. |
|
||||||
|
| Full test report artifact only | Detailed, but harder to scan for small changes. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Reviewers can evaluate risk quickly.
|
||||||
|
- Missing tests or blocked checks are visible.
|
||||||
|
- AI-generated changes become easier to trust or challenge.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Contributors must spend time recording checks.
|
||||||
|
- Some exploratory changes may need a lighter process before formal review.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Every pull request must include a short validation section listing commands,
|
||||||
|
manual checks, or reasons validation could not be run.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- PR templates should include validation.
|
||||||
|
- Reviewers can block merges when risk is high and evidence is missing.
|
||||||
|
- Failed or skipped validation must be explained.
|
||||||
+185
@@ -0,0 +1,185 @@
|
|||||||
|
# Project
|
||||||
|
|
||||||
|
This document is the source of truth for project intent, scope, runtime facts,
|
||||||
|
and operational expectations.
|
||||||
|
|
||||||
|
For implementation structure, see [ARCHITECTURE.md](ARCHITECTURE.md).
|
||||||
|
For engineering standards, see [CONVENTIONS.md](CONVENTIONS.md).
|
||||||
|
For delivery workflow, see [workflow.md](workflow.md).
|
||||||
|
|
||||||
|
## Project Identity
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Project name | `{{PROJECT_NAME}}` |
|
||||||
|
| Repository | `{{REPOSITORY_URL}}` |
|
||||||
|
| Primary owner | `{{OWNER}}` |
|
||||||
|
| Status | `{{STATUS}}` |
|
||||||
|
| Target users | `{{TARGET_USERS}}` |
|
||||||
|
|
||||||
|
## Vision
|
||||||
|
|
||||||
|
`{{PROJECT_VISION}}`
|
||||||
|
|
||||||
|
Describe the long-term purpose of the project in one or two paragraphs.
|
||||||
|
The vision should explain why the project exists, not how it is implemented.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- `{{GOAL_1}}`
|
||||||
|
- `{{GOAL_2}}`
|
||||||
|
- `{{GOAL_3}}`
|
||||||
|
|
||||||
|
Goals should be measurable enough to guide trade-offs.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- `{{NON_GOAL_1}}`
|
||||||
|
- `{{NON_GOAL_2}}`
|
||||||
|
|
||||||
|
Non-goals prevent accidental scope expansion.
|
||||||
|
|
||||||
|
## Functional Requirements
|
||||||
|
|
||||||
|
| ID | Requirement | Priority | Status |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| FR-001 | `{{FUNCTIONAL_REQUIREMENT}}` | Must | Proposed |
|
||||||
|
|
||||||
|
## Non-Functional Requirements
|
||||||
|
|
||||||
|
| Category | Requirement | Measurement |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Availability | `{{AVAILABILITY_REQUIREMENT}}` | `{{AVAILABILITY_MEASURE}}` |
|
||||||
|
| Performance | `{{PERFORMANCE_REQUIREMENT}}` | `{{PERFORMANCE_MEASURE}}` |
|
||||||
|
| Security | `{{SECURITY_REQUIREMENT}}` | `{{SECURITY_MEASURE}}` |
|
||||||
|
| Privacy | `{{PRIVACY_REQUIREMENT}}` | `{{PRIVACY_MEASURE}}` |
|
||||||
|
| Maintainability | `{{MAINTAINABILITY_REQUIREMENT}}` | `{{MAINTAINABILITY_MEASURE}}` |
|
||||||
|
|
||||||
|
## Users And Roles
|
||||||
|
|
||||||
|
| Role | Description | Key Permissions |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `{{ROLE_NAME}}` | `{{ROLE_DESCRIPTION}}` | `{{ROLE_PERMISSIONS}}` |
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Area | Choice | Notes |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Language | `{{LANGUAGE}}` | `{{LANGUAGE_NOTES}}` |
|
||||||
|
| Framework | `{{FRAMEWORK}}` | `{{FRAMEWORK_NOTES}}` |
|
||||||
|
| Frontend | `{{FRONTEND}}` | `{{FRONTEND_NOTES}}` |
|
||||||
|
| Backend | `{{BACKEND}}` | `{{BACKEND_NOTES}}` |
|
||||||
|
| Database | `{{DATABASE}}` | `{{DATABASE_NOTES}}` |
|
||||||
|
| Messaging | `{{MESSAGING}}` | `{{MESSAGING_NOTES}}` |
|
||||||
|
| Search | `{{SEARCH}}` | `{{SEARCH_NOTES}}` |
|
||||||
|
| Cache | `{{CACHE}}` | `{{CACHE_NOTES}}` |
|
||||||
|
|
||||||
|
## Runtime
|
||||||
|
|
||||||
|
| Environment | Purpose | URL or Entry Point | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Local | Development | `{{LOCAL_URL}}` | `{{LOCAL_NOTES}}` |
|
||||||
|
| Test | Automated validation | `{{TEST_URL}}` | `{{TEST_NOTES}}` |
|
||||||
|
| Staging | Release verification | `{{STAGING_URL}}` | `{{STAGING_NOTES}}` |
|
||||||
|
| Production | Live system | `{{PRODUCTION_URL}}` | `{{PRODUCTION_NOTES}}` |
|
||||||
|
|
||||||
|
## Frameworks
|
||||||
|
|
||||||
|
Document framework-specific expectations here only when they affect how the
|
||||||
|
project is built, tested, deployed, or maintained.
|
||||||
|
|
||||||
|
- `{{FRAMEWORK_CONSTRAINT}}`
|
||||||
|
- `{{FRAMEWORK_EXTENSION_POINT}}`
|
||||||
|
|
||||||
|
## Infrastructure
|
||||||
|
|
||||||
|
| Component | Provider | Responsibility | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Hosting | `{{HOSTING_PROVIDER}}` | `{{HOSTING_RESPONSIBILITY}}` | `{{HOSTING_NOTES}}` |
|
||||||
|
| Storage | `{{STORAGE_PROVIDER}}` | `{{STORAGE_RESPONSIBILITY}}` | `{{STORAGE_NOTES}}` |
|
||||||
|
| Network | `{{NETWORK_PROVIDER}}` | `{{NETWORK_RESPONSIBILITY}}` | `{{NETWORK_NOTES}}` |
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Database engine | `{{DATABASE}}` |
|
||||||
|
| Migration tool | `{{MIGRATION_TOOL}}` |
|
||||||
|
| Backup strategy | `{{BACKUP_STRATEGY}}` |
|
||||||
|
| Restore strategy | `{{RESTORE_STRATEGY}}` |
|
||||||
|
| Data retention | `{{DATA_RETENTION}}` |
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
| Pipeline | Trigger | Required Checks | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| `{{PIPELINE_NAME}}` | `{{PIPELINE_TRIGGER}}` | `{{PIPELINE_CHECKS}}` | `{{PIPELINE_NOTES}}` |
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
| Area | Policy |
|
||||||
|
| --- | --- |
|
||||||
|
| Deployment strategy | `{{DEPLOYMENT}}` |
|
||||||
|
| Rollback strategy | `{{ROLLBACK_STRATEGY}}` |
|
||||||
|
| Release owner | `{{RELEASE_OWNER}}` |
|
||||||
|
| Change window | `{{CHANGE_WINDOW}}` |
|
||||||
|
|
||||||
|
See [release-process.md](release-process.md) for release execution.
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Authentication method | `{{AUTHENTICATION_METHOD}}` |
|
||||||
|
| Identity provider | `{{IDENTITY_PROVIDER}}` |
|
||||||
|
| Session model | `{{SESSION_MODEL}}` |
|
||||||
|
| Token lifetime | `{{TOKEN_LIFETIME}}` |
|
||||||
|
|
||||||
|
## Authorization
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Authorization model | `{{AUTHORIZATION_MODEL}}` |
|
||||||
|
| Role source | `{{ROLE_SOURCE}}` |
|
||||||
|
| Policy location | `{{POLICY_LOCATION}}` |
|
||||||
|
| Audit requirements | `{{AUTHORIZATION_AUDIT_REQUIREMENTS}}` |
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Logging library | `{{LOGGING_LIBRARY}}` |
|
||||||
|
| Log sink | `{{LOG_SINK}}` |
|
||||||
|
| Correlation ID | `{{CORRELATION_ID_POLICY}}` |
|
||||||
|
| Sensitive data policy | `{{LOG_SENSITIVE_DATA_POLICY}}` |
|
||||||
|
|
||||||
|
## Monitoring
|
||||||
|
|
||||||
|
| Signal | Tool | Alert Policy |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Availability | `{{AVAILABILITY_TOOL}}` | `{{AVAILABILITY_ALERT_POLICY}}` |
|
||||||
|
| Errors | `{{ERROR_TOOL}}` | `{{ERROR_ALERT_POLICY}}` |
|
||||||
|
| Performance | `{{PERFORMANCE_TOOL}}` | `{{PERFORMANCE_ALERT_POLICY}}` |
|
||||||
|
| Business metrics | `{{BUSINESS_METRICS_TOOL}}` | `{{BUSINESS_ALERT_POLICY}}` |
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
| Test Type | Tooling | Required When |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Unit | `{{UNIT_TEST_TOOL}}` | `{{UNIT_TEST_POLICY}}` |
|
||||||
|
| Integration | `{{INTEGRATION_TEST_TOOL}}` | `{{INTEGRATION_TEST_POLICY}}` |
|
||||||
|
| End-to-end | `{{E2E_TEST_TOOL}}` | `{{E2E_TEST_POLICY}}` |
|
||||||
|
| Performance | `{{PERFORMANCE_TEST_TOOL}}` | `{{PERFORMANCE_TEST_POLICY}}` |
|
||||||
|
| Security | `{{SECURITY_TEST_TOOL}}` | `{{SECURITY_TEST_POLICY}}` |
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
| Milestone | Target | Outcome |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `{{MILESTONE}}` | `{{TARGET_DATE}}` | `{{OUTCOME}}` |
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
| Question | Owner | Needed By | Status |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| `{{OPEN_QUESTION}}` | `{{QUESTION_OWNER}}` | `{{NEEDED_BY}}` | Open |
|
||||||
+310
@@ -0,0 +1,310 @@
|
|||||||
|
# Prompts
|
||||||
|
|
||||||
|
This file is a reusable engineering prompt library for humans and AI coding
|
||||||
|
agents.
|
||||||
|
|
||||||
|
Use these prompts together with [AGENTS.md](../AGENTS.md),
|
||||||
|
[PROJECT.md](PROJECT.md), [ARCHITECTURE.md](ARCHITECTURE.md), and
|
||||||
|
[CONVENTIONS.md](CONVENTIONS.md).
|
||||||
|
|
||||||
|
## Prompt Pattern
|
||||||
|
|
||||||
|
Strong prompts include:
|
||||||
|
|
||||||
|
- Objective.
|
||||||
|
- Relevant files, URLs, tickets, or logs.
|
||||||
|
- Constraints and non-goals.
|
||||||
|
- Expected output.
|
||||||
|
- Validation expectations.
|
||||||
|
- Whether the agent should implement, plan only, or review only.
|
||||||
|
|
||||||
|
## Feature Development
|
||||||
|
|
||||||
|
```text
|
||||||
|
Act as a senior software engineer in this repository.
|
||||||
|
|
||||||
|
Objective:
|
||||||
|
Implement {{FEATURE_NAME}}.
|
||||||
|
|
||||||
|
Context:
|
||||||
|
- Product goal: {{PRODUCT_GOAL}}
|
||||||
|
- Relevant docs: docs/PROJECT.md, docs/ARCHITECTURE.md, docs/CONVENTIONS.md
|
||||||
|
- Relevant files: {{RELEVANT_FILES}}
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
- {{REQUIREMENT_1}}
|
||||||
|
- {{REQUIREMENT_2}}
|
||||||
|
|
||||||
|
Non-goals:
|
||||||
|
- {{NON_GOAL_1}}
|
||||||
|
|
||||||
|
Before coding:
|
||||||
|
- Inspect the current implementation.
|
||||||
|
- Identify ambiguity.
|
||||||
|
- Ask concise questions if confidence is below 95%.
|
||||||
|
|
||||||
|
After coding:
|
||||||
|
- Run the strongest practical validation.
|
||||||
|
- Summarize changed files, validation, and residual risk.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Bug Investigation
|
||||||
|
|
||||||
|
```text
|
||||||
|
Investigate this bug before changing code.
|
||||||
|
|
||||||
|
Observed behavior:
|
||||||
|
{{OBSERVED_BEHAVIOR}}
|
||||||
|
|
||||||
|
Expected behavior:
|
||||||
|
{{EXPECTED_BEHAVIOR}}
|
||||||
|
|
||||||
|
Evidence:
|
||||||
|
{{LOGS_SCREENSHOTS_OR_STEPS}}
|
||||||
|
|
||||||
|
Task:
|
||||||
|
- Reproduce or reason from available evidence.
|
||||||
|
- Identify the most likely root cause.
|
||||||
|
- Locate the affected code path.
|
||||||
|
- Propose the smallest maintainable fix.
|
||||||
|
- Implement only after the cause is understood.
|
||||||
|
- Add or update regression coverage where practical.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Root Cause Analysis
|
||||||
|
|
||||||
|
```text
|
||||||
|
Perform a root cause analysis for {{INCIDENT_OR_DEFECT}}.
|
||||||
|
|
||||||
|
Include:
|
||||||
|
- Timeline.
|
||||||
|
- User impact.
|
||||||
|
- Technical trigger.
|
||||||
|
- Root cause.
|
||||||
|
- Contributing factors.
|
||||||
|
- Detection gap.
|
||||||
|
- Corrective actions.
|
||||||
|
- Preventive actions.
|
||||||
|
|
||||||
|
Separate confirmed facts from hypotheses.
|
||||||
|
Do not assign blame to individuals.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Refactoring
|
||||||
|
|
||||||
|
```text
|
||||||
|
Refactor {{AREA}} to improve {{QUALITY_GOAL}}.
|
||||||
|
|
||||||
|
Constraints:
|
||||||
|
- Preserve behavior.
|
||||||
|
- Keep public contracts stable unless explicitly approved.
|
||||||
|
- Avoid broad unrelated cleanup.
|
||||||
|
- Follow docs/ARCHITECTURE.md and docs/CONVENTIONS.md.
|
||||||
|
|
||||||
|
Process:
|
||||||
|
- Inspect existing patterns.
|
||||||
|
- Identify tests or checks that protect behavior.
|
||||||
|
- Make small mechanical changes first.
|
||||||
|
- Run validation after meaningful steps.
|
||||||
|
- Summarize behavior-preservation evidence.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Review the architecture of {{SYSTEM_OR_MODULE}}.
|
||||||
|
|
||||||
|
Use:
|
||||||
|
- docs/PROJECT.md
|
||||||
|
- docs/ARCHITECTURE.md
|
||||||
|
- docs/DECISIONS.md
|
||||||
|
- Relevant source files
|
||||||
|
|
||||||
|
Focus on:
|
||||||
|
- Boundary clarity.
|
||||||
|
- Dependency direction.
|
||||||
|
- Data ownership.
|
||||||
|
- Failure modes.
|
||||||
|
- Security assumptions.
|
||||||
|
- Operational complexity.
|
||||||
|
- Maintainability over the next {{TIME_HORIZON}}.
|
||||||
|
|
||||||
|
Return:
|
||||||
|
- Findings ordered by severity.
|
||||||
|
- Trade-offs.
|
||||||
|
- Recommended decisions or ADR updates.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Security Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Perform a security review of {{SCOPE}}.
|
||||||
|
|
||||||
|
Focus on:
|
||||||
|
- Authentication.
|
||||||
|
- Authorization.
|
||||||
|
- Input validation.
|
||||||
|
- Output encoding.
|
||||||
|
- Secrets handling.
|
||||||
|
- Data exposure.
|
||||||
|
- Dependency risk.
|
||||||
|
- Logging of sensitive data.
|
||||||
|
- SSRF, injection, XSS, CSRF, path traversal, and insecure deserialization where relevant.
|
||||||
|
|
||||||
|
For each finding include:
|
||||||
|
- Impact.
|
||||||
|
- Exploitability.
|
||||||
|
- Evidence.
|
||||||
|
- Recommended fix.
|
||||||
|
- Validation strategy.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Performance Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Review performance risk in {{SCOPE}}.
|
||||||
|
|
||||||
|
Include:
|
||||||
|
- Hot paths.
|
||||||
|
- Algorithmic complexity.
|
||||||
|
- Database query behavior.
|
||||||
|
- Caching behavior.
|
||||||
|
- Network calls.
|
||||||
|
- Rendering or UI bottlenecks.
|
||||||
|
- Resource usage.
|
||||||
|
- Measurement gaps.
|
||||||
|
|
||||||
|
Recommend improvements only when they are justified by evidence, constraints, or clear risk.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
```text
|
||||||
|
Improve documentation for {{AREA}}.
|
||||||
|
|
||||||
|
Goals:
|
||||||
|
- Make setup and maintenance easier.
|
||||||
|
- Remove outdated or duplicated information.
|
||||||
|
- Add cross links to related docs.
|
||||||
|
- Keep one source of truth per topic.
|
||||||
|
|
||||||
|
Validate:
|
||||||
|
- Links are correct.
|
||||||
|
- Commands are current.
|
||||||
|
- Examples are realistic.
|
||||||
|
- The document is useful to a new contributor.
|
||||||
|
```
|
||||||
|
|
||||||
|
## API Design
|
||||||
|
|
||||||
|
```text
|
||||||
|
Design or review the API for {{CAPABILITY}}.
|
||||||
|
|
||||||
|
Include:
|
||||||
|
- Consumers.
|
||||||
|
- Resource or command model.
|
||||||
|
- Request and response shapes.
|
||||||
|
- Validation errors.
|
||||||
|
- Authorization rules.
|
||||||
|
- Idempotency.
|
||||||
|
- Pagination or filtering.
|
||||||
|
- Versioning.
|
||||||
|
- Backward compatibility.
|
||||||
|
- Observability.
|
||||||
|
|
||||||
|
Prefer stable contracts over exposing internal persistence models.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Database Design
|
||||||
|
|
||||||
|
```text
|
||||||
|
Design or review database changes for {{CAPABILITY}}.
|
||||||
|
|
||||||
|
Include:
|
||||||
|
- Entities and ownership.
|
||||||
|
- Relationships.
|
||||||
|
- Constraints.
|
||||||
|
- Indexes.
|
||||||
|
- Migration strategy.
|
||||||
|
- Rollback strategy.
|
||||||
|
- Backfill needs.
|
||||||
|
- Data retention.
|
||||||
|
- Privacy concerns.
|
||||||
|
- Query patterns.
|
||||||
|
|
||||||
|
Do not implement destructive migrations without explicit approval.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Test Generation
|
||||||
|
|
||||||
|
```text
|
||||||
|
Generate tests for {{SCOPE}}.
|
||||||
|
|
||||||
|
Use the repository's existing test patterns.
|
||||||
|
|
||||||
|
Cover:
|
||||||
|
- Happy path.
|
||||||
|
- Boundary conditions.
|
||||||
|
- Authorization or permission behavior when relevant.
|
||||||
|
- Error handling.
|
||||||
|
- Regression cases.
|
||||||
|
|
||||||
|
Avoid brittle tests that depend on incidental implementation details.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Review the provided changes as a senior engineer.
|
||||||
|
|
||||||
|
Prioritize:
|
||||||
|
- Bugs.
|
||||||
|
- Security issues.
|
||||||
|
- Data loss risk.
|
||||||
|
- Behavioral regressions.
|
||||||
|
- Missing validation.
|
||||||
|
- Maintainability issues.
|
||||||
|
|
||||||
|
Return findings first, ordered by severity, with file and line references where available.
|
||||||
|
Keep summary secondary.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pull Request Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Review this pull request.
|
||||||
|
|
||||||
|
Use:
|
||||||
|
- PR description.
|
||||||
|
- Diff.
|
||||||
|
- Linked issue or requirement.
|
||||||
|
- Relevant project docs.
|
||||||
|
|
||||||
|
Assess:
|
||||||
|
- Whether the change solves the stated problem.
|
||||||
|
- Whether the implementation fits the architecture.
|
||||||
|
- Whether tests and validation match the risk.
|
||||||
|
- Whether rollout or migration notes are missing.
|
||||||
|
|
||||||
|
Return:
|
||||||
|
- Blocking findings.
|
||||||
|
- Non-blocking suggestions.
|
||||||
|
- Questions.
|
||||||
|
- Merge readiness.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Technical Debt Review
|
||||||
|
|
||||||
|
```text
|
||||||
|
Assess technical debt in {{SCOPE}}.
|
||||||
|
|
||||||
|
Classify findings by:
|
||||||
|
- User impact.
|
||||||
|
- Engineering drag.
|
||||||
|
- Risk.
|
||||||
|
- Estimated effort.
|
||||||
|
- Suggested sequencing.
|
||||||
|
|
||||||
|
Do not recommend rewrites unless incremental improvement is clearly worse.
|
||||||
|
Prefer concrete next steps over broad critique.
|
||||||
|
```
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# Branching Strategy
|
||||||
|
|
||||||
|
This document defines the default Git branching strategy.
|
||||||
|
|
||||||
|
For delivery workflow, see [workflow.md](workflow.md).
|
||||||
|
For pull request expectations, see [CONVENTIONS.md](CONVENTIONS.md#pull-requests).
|
||||||
|
|
||||||
|
## Default Model
|
||||||
|
|
||||||
|
Use a simple trunk-based model unless the project has a clear reason to add
|
||||||
|
long-lived release branches.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
gitGraph
|
||||||
|
commit id: "main"
|
||||||
|
branch feature
|
||||||
|
checkout feature
|
||||||
|
commit id: "work"
|
||||||
|
commit id: "validate"
|
||||||
|
checkout main
|
||||||
|
merge feature
|
||||||
|
commit id: "release"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Branch Types
|
||||||
|
|
||||||
|
| Type | Pattern | Purpose |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Feature | `feature/{{short-description}}` | New user-facing or system capability. |
|
||||||
|
| Bug fix | `fix/{{short-description}}` | Defect correction. |
|
||||||
|
| Refactor | `refactor/{{short-description}}` | Behavior-preserving structural improvement. |
|
||||||
|
| Documentation | `docs/{{short-description}}` | Documentation-only changes. |
|
||||||
|
| Chore | `chore/{{short-description}}` | Maintenance work with no product behavior change. |
|
||||||
|
| Release | `release/{{version}}` | Optional stabilization branch for release trains. |
|
||||||
|
| Hotfix | `hotfix/{{short-description}}` | Urgent production correction. |
|
||||||
|
|
||||||
|
## Main Branch
|
||||||
|
|
||||||
|
The `main` branch should remain deployable or releasable according to the
|
||||||
|
project's release model.
|
||||||
|
|
||||||
|
Minimum expectations:
|
||||||
|
|
||||||
|
- Required checks pass.
|
||||||
|
- Changes are reviewed when the project requires review.
|
||||||
|
- Risky migrations and config changes are documented.
|
||||||
|
- Direct pushes are limited to repository maintainers or automation.
|
||||||
|
|
||||||
|
## Feature Branches
|
||||||
|
|
||||||
|
Feature branches should be short lived.
|
||||||
|
|
||||||
|
- Keep scope focused.
|
||||||
|
- Rebase or merge from `main` according to project policy.
|
||||||
|
- Delete branches after merge.
|
||||||
|
- Avoid stacking unrelated changes.
|
||||||
|
|
||||||
|
## Release Branches
|
||||||
|
|
||||||
|
Use release branches only when needed for stabilization, compliance, or release
|
||||||
|
train coordination.
|
||||||
|
|
||||||
|
Release branches should receive:
|
||||||
|
|
||||||
|
- Critical fixes.
|
||||||
|
- Release documentation.
|
||||||
|
- Version updates.
|
||||||
|
- No unrelated refactors.
|
||||||
|
|
||||||
|
## Hotfixes
|
||||||
|
|
||||||
|
Hotfixes should prioritize production restoration.
|
||||||
|
|
||||||
|
Process:
|
||||||
|
|
||||||
|
1. Create a hotfix branch from the deployed commit or release branch.
|
||||||
|
2. Apply the smallest safe fix.
|
||||||
|
3. Validate the specific failure path.
|
||||||
|
4. Release.
|
||||||
|
5. Merge the hotfix back into `main`.
|
||||||
|
6. Add follow-up work for broader cleanup if needed.
|
||||||
|
|
||||||
|
## Commit Messages
|
||||||
|
|
||||||
|
Use meaningful commit messages that explain the outcome.
|
||||||
|
|
||||||
|
Recommended format:
|
||||||
|
|
||||||
|
```text
|
||||||
|
{{type}}: {{short imperative summary}}
|
||||||
|
|
||||||
|
{{optional context, rationale, or validation notes}}
|
||||||
|
```
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- `docs: add starter architecture guide`
|
||||||
|
- `fix: prevent duplicate invoice submission`
|
||||||
|
- `refactor: isolate payment gateway retries`
|
||||||
|
|
||||||
|
## Merge Policy
|
||||||
|
|
||||||
|
Choose one policy per project:
|
||||||
|
|
||||||
|
| Policy | Best When |
|
||||||
|
| --- | --- |
|
||||||
|
| Squash merge | Small teams want clean history and one commit per PR. |
|
||||||
|
| Merge commit | Teams want to preserve branch context. |
|
||||||
|
| Rebase merge | Teams want linear history with individual commits. |
|
||||||
|
|
||||||
|
Record the selected policy in [PROJECT.md](PROJECT.md) or this file.
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
# Release Process
|
||||||
|
|
||||||
|
This document defines the default release process.
|
||||||
|
|
||||||
|
For daily delivery flow, see [workflow.md](workflow.md).
|
||||||
|
For branch policy, see [branching.md](branching.md).
|
||||||
|
For release checklist, see [CHECKLISTS.md](CHECKLISTS.md#release).
|
||||||
|
|
||||||
|
## Release Principles
|
||||||
|
|
||||||
|
- Release small changes when practical.
|
||||||
|
- Prefer repeatable automation over manual steps.
|
||||||
|
- Validate before and after deployment.
|
||||||
|
- Keep rollback or recovery options ready.
|
||||||
|
- Record production-impacting decisions.
|
||||||
|
|
||||||
|
## Release Types
|
||||||
|
|
||||||
|
| Type | Description | Example |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Standard | Planned release through the normal pipeline. | Weekly feature release. |
|
||||||
|
| Hotfix | Urgent production fix. | Authorization regression fix. |
|
||||||
|
| Experimental | Limited rollout or feature flag release. | Beta feature for selected users. |
|
||||||
|
| Infrastructure | Runtime, hosting, network, or dependency change. | Database engine upgrade. |
|
||||||
|
|
||||||
|
## Versioning
|
||||||
|
|
||||||
|
Choose the versioning model that matches the project:
|
||||||
|
|
||||||
|
- Semantic versioning for libraries, APIs, SDKs, and installable packages.
|
||||||
|
- Calendar versioning for operational products with frequent releases.
|
||||||
|
- Build numbers or commit SHAs for internal services.
|
||||||
|
|
||||||
|
Document the chosen model in [PROJECT.md](PROJECT.md).
|
||||||
|
|
||||||
|
## Readiness
|
||||||
|
|
||||||
|
Before release:
|
||||||
|
|
||||||
|
- Scope is confirmed.
|
||||||
|
- Required checks pass.
|
||||||
|
- Migrations are reviewed.
|
||||||
|
- Configuration is ready.
|
||||||
|
- Secrets are present in the target environment.
|
||||||
|
- Rollback or recovery plan exists.
|
||||||
|
- Monitoring is available.
|
||||||
|
- Stakeholders know the release window when needed.
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
Deployment steps:
|
||||||
|
|
||||||
|
1. Confirm target environment.
|
||||||
|
2. Confirm release version or commit.
|
||||||
|
3. Run pre-deploy checks.
|
||||||
|
4. Deploy.
|
||||||
|
5. Run migrations when required by the release plan.
|
||||||
|
6. Run smoke tests.
|
||||||
|
7. Monitor health and error signals.
|
||||||
|
8. Announce completion or rollback.
|
||||||
|
|
||||||
|
## Smoke Tests
|
||||||
|
|
||||||
|
Smoke tests should prove that the release is alive and the most important path
|
||||||
|
works.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- Health endpoint returns success.
|
||||||
|
- Application loads.
|
||||||
|
- Login works.
|
||||||
|
- Critical API endpoint succeeds.
|
||||||
|
- Background worker starts.
|
||||||
|
- Database connectivity is healthy.
|
||||||
|
|
||||||
|
## Rollback And Recovery
|
||||||
|
|
||||||
|
Rollback planning should address:
|
||||||
|
|
||||||
|
- Application artifact rollback.
|
||||||
|
- Database migration rollback or forward fix.
|
||||||
|
- Configuration rollback.
|
||||||
|
- Feature flag disablement.
|
||||||
|
- Queue or job replay behavior.
|
||||||
|
- External dependency failure.
|
||||||
|
|
||||||
|
If database changes are not reversible, document the recovery path before
|
||||||
|
deployment.
|
||||||
|
|
||||||
|
## Post-Release Review
|
||||||
|
|
||||||
|
After release:
|
||||||
|
|
||||||
|
- Confirm monitoring is quiet or expected.
|
||||||
|
- Record incidents or anomalies.
|
||||||
|
- Update docs if release steps drifted.
|
||||||
|
- Add follow-up tasks for manual work discovered during release.
|
||||||
|
- Capture lessons in checklists or ADRs when they change future behavior.
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
# Repository Setup
|
||||||
|
|
||||||
|
This document explains how to use the Engineering Starter Kit for a new project.
|
||||||
|
|
||||||
|
For the recommended documentation flow, see [../README.md](../README.md).
|
||||||
|
For the AI-agent contract, see [../AGENTS.md](../AGENTS.md).
|
||||||
|
|
||||||
|
## Bootstrap Options
|
||||||
|
|
||||||
|
Choose one:
|
||||||
|
|
||||||
|
| Option | Use When |
|
||||||
|
| --- | --- |
|
||||||
|
| Copy repository | You want a simple starting point without preserving starter-kit history. |
|
||||||
|
| Template repository | Your Git host supports creating repositories from a template. |
|
||||||
|
| Subtree or vendor copy | You want to periodically pull updates from this kit. |
|
||||||
|
|
||||||
|
Do not use this starter kit as a runtime dependency. It is project scaffolding
|
||||||
|
and documentation architecture.
|
||||||
|
|
||||||
|
## Initial Setup
|
||||||
|
|
||||||
|
1. Create the new repository.
|
||||||
|
2. Copy the starter-kit files.
|
||||||
|
3. Replace placeholder values such as `{{PROJECT_NAME}}`, `{{LANGUAGE}}`,
|
||||||
|
`{{FRAMEWORK}}`, `{{DATABASE}}`, and `{{DEPLOYMENT}}`.
|
||||||
|
4. Delete sections that are not relevant to the project.
|
||||||
|
5. Add project-specific setup commands.
|
||||||
|
6. Commit the initialized documentation before major implementation work.
|
||||||
|
|
||||||
|
## Recommended First Commit
|
||||||
|
|
||||||
|
The first commit should establish:
|
||||||
|
|
||||||
|
- `README.md`.
|
||||||
|
- `AGENTS.md`.
|
||||||
|
- `docs/PROJECT.md`.
|
||||||
|
- `docs/ARCHITECTURE.md`.
|
||||||
|
- `docs/CONVENTIONS.md`.
|
||||||
|
- `docs/DECISIONS.md`.
|
||||||
|
- `.gitignore`.
|
||||||
|
- Tooling or source skeleton if already known.
|
||||||
|
|
||||||
|
## Project-Specific Customization
|
||||||
|
|
||||||
|
Update these files first:
|
||||||
|
|
||||||
|
| File | Required Customization |
|
||||||
|
| --- | --- |
|
||||||
|
| [PROJECT.md](PROJECT.md) | Vision, requirements, stack, environments, operations, and roadmap. |
|
||||||
|
| [ARCHITECTURE.md](ARCHITECTURE.md) | Architecture style, folder structure, module boundaries, and flows. |
|
||||||
|
| [CONVENTIONS.md](CONVENTIONS.md) | Language, framework, testing, review, and repository-specific rules. |
|
||||||
|
| [DECISIONS.md](DECISIONS.md) | Accepted project decisions. Remove examples when real ADRs exist. |
|
||||||
|
| [workflow.md](workflow.md) | Delivery steps, required checks, and review expectations. |
|
||||||
|
| [branching.md](branching.md) | Branch naming and merge policy. |
|
||||||
|
| [release-process.md](release-process.md) | Release, rollback, and monitoring expectations. |
|
||||||
|
|
||||||
|
## Placeholder Policy
|
||||||
|
|
||||||
|
Before a project is considered initialized:
|
||||||
|
|
||||||
|
- Replace placeholders when the answer is known.
|
||||||
|
- Keep placeholders only when the unknown is intentional.
|
||||||
|
- Track important unknowns in [PROJECT.md](PROJECT.md#open-questions).
|
||||||
|
- Do not leave placeholders in public-facing documentation.
|
||||||
|
|
||||||
|
## AI Agent Setup
|
||||||
|
|
||||||
|
For AI-assisted projects:
|
||||||
|
|
||||||
|
1. Keep [../AGENTS.md](../AGENTS.md) at the repository root.
|
||||||
|
2. Tell agents to read `AGENTS.md` before making changes.
|
||||||
|
3. Keep architecture and conventions current enough for agents to follow them.
|
||||||
|
4. Require final summaries to include changed files, validation, and risk.
|
||||||
|
|
||||||
|
## Documentation Review
|
||||||
|
|
||||||
|
After setup:
|
||||||
|
|
||||||
|
- Check every relative link.
|
||||||
|
- Remove duplicated guidance.
|
||||||
|
- Verify each document has one responsibility.
|
||||||
|
- Confirm examples are marked as examples.
|
||||||
|
- Confirm project-specific docs do not describe the starter kit itself.
|
||||||
|
|
||||||
|
## When To Add More Documents
|
||||||
|
|
||||||
|
Add a new document only when:
|
||||||
|
|
||||||
|
- The topic is durable.
|
||||||
|
- The topic has a clear owner or responsibility.
|
||||||
|
- The content would otherwise make another document unfocused.
|
||||||
|
- The document will be maintained.
|
||||||
|
|
||||||
|
Good candidates:
|
||||||
|
|
||||||
|
- `docs/security.md`
|
||||||
|
- `docs/operations.md`
|
||||||
|
- `docs/api.md`
|
||||||
|
- `docs/testing.md`
|
||||||
|
- `docs/runbooks/`
|
||||||
|
|
||||||
|
Avoid creating documents for temporary plans that belong in issues or pull
|
||||||
|
requests.
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
# Development Workflow
|
||||||
|
|
||||||
|
This document defines the default path from idea to released change.
|
||||||
|
|
||||||
|
For branch policy, see [branching.md](branching.md).
|
||||||
|
For release execution, see [release-process.md](release-process.md).
|
||||||
|
For task quality gates, see [CHECKLISTS.md](CHECKLISTS.md).
|
||||||
|
|
||||||
|
## Workflow Overview
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
Idea["Idea or Issue"]
|
||||||
|
Clarify["Clarify Scope"]
|
||||||
|
Design["Design or Plan"]
|
||||||
|
Implement["Implement"]
|
||||||
|
Validate["Validate"]
|
||||||
|
Review["Review"]
|
||||||
|
Merge["Merge"]
|
||||||
|
Release["Release"]
|
||||||
|
Learn["Review Outcome"]
|
||||||
|
|
||||||
|
Idea --> Clarify
|
||||||
|
Clarify --> Design
|
||||||
|
Design --> Implement
|
||||||
|
Implement --> Validate
|
||||||
|
Validate --> Review
|
||||||
|
Review --> Merge
|
||||||
|
Merge --> Release
|
||||||
|
Release --> Learn
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1. Clarify Scope
|
||||||
|
|
||||||
|
Before implementation:
|
||||||
|
|
||||||
|
- Define the objective.
|
||||||
|
- Identify users or systems affected.
|
||||||
|
- Confirm acceptance criteria.
|
||||||
|
- Identify non-goals.
|
||||||
|
- Note security, data, migration, and deployment risk.
|
||||||
|
|
||||||
|
If the task is ambiguous, resolve ambiguity before writing code.
|
||||||
|
|
||||||
|
## 2. Design Or Plan
|
||||||
|
|
||||||
|
Use a lightweight plan for most changes.
|
||||||
|
|
||||||
|
Create or update an ADR in [DECISIONS.md](DECISIONS.md) when the change affects:
|
||||||
|
|
||||||
|
- Architecture style.
|
||||||
|
- Module boundaries.
|
||||||
|
- Data ownership.
|
||||||
|
- Security model.
|
||||||
|
- Deployment strategy.
|
||||||
|
- Public contracts.
|
||||||
|
- Long-term operating cost.
|
||||||
|
|
||||||
|
## 3. Implement
|
||||||
|
|
||||||
|
Implementation expectations:
|
||||||
|
|
||||||
|
- Work in a focused branch unless the project policy says otherwise.
|
||||||
|
- Read existing code before editing.
|
||||||
|
- Follow [CONVENTIONS.md](CONVENTIONS.md).
|
||||||
|
- Keep commits logically grouped.
|
||||||
|
- Update documentation with behavior, setup, or architecture changes.
|
||||||
|
|
||||||
|
## 4. Validate
|
||||||
|
|
||||||
|
Use the strongest practical validation for the change:
|
||||||
|
|
||||||
|
- Build or type checks.
|
||||||
|
- Unit tests.
|
||||||
|
- Integration tests.
|
||||||
|
- End-to-end tests.
|
||||||
|
- Manual UI or API checks.
|
||||||
|
- Documentation link checks.
|
||||||
|
|
||||||
|
Record validation evidence in the pull request or final work summary.
|
||||||
|
|
||||||
|
## 5. Review
|
||||||
|
|
||||||
|
Review should answer:
|
||||||
|
|
||||||
|
- Does the change solve the stated problem?
|
||||||
|
- Is it consistent with [ARCHITECTURE.md](ARCHITECTURE.md)?
|
||||||
|
- Does it follow [CONVENTIONS.md](CONVENTIONS.md)?
|
||||||
|
- Are risks and rollback needs clear?
|
||||||
|
- Is validation sufficient?
|
||||||
|
|
||||||
|
## 6. Merge
|
||||||
|
|
||||||
|
Before merge:
|
||||||
|
|
||||||
|
- Required checks pass.
|
||||||
|
- Review comments are resolved.
|
||||||
|
- Branch is up to date according to project policy.
|
||||||
|
- Release notes or changelog entries are added when relevant.
|
||||||
|
|
||||||
|
## 7. Release
|
||||||
|
|
||||||
|
Follow [release-process.md](release-process.md).
|
||||||
|
|
||||||
|
Release work should include:
|
||||||
|
|
||||||
|
- Final readiness check.
|
||||||
|
- Deployment.
|
||||||
|
- Smoke test.
|
||||||
|
- Monitoring.
|
||||||
|
- Rollback readiness.
|
||||||
|
|
||||||
|
## 8. Review Outcome
|
||||||
|
|
||||||
|
After meaningful releases or incidents:
|
||||||
|
|
||||||
|
- Capture what worked.
|
||||||
|
- Capture what failed.
|
||||||
|
- Update checklists, docs, tests, or runbooks.
|
||||||
|
- Add ADRs for decisions that emerged during delivery.
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
# Atlas Desk Architecture
|
||||||
|
|
||||||
|
Atlas Desk uses a modular monolith with a Vue frontend, ASP.NET Core API, and
|
||||||
|
PostgreSQL database.
|
||||||
|
|
||||||
|
## High-Level Overview
|
||||||
|
|
||||||
|
The system is deployed as one backend service and one frontend artifact. The
|
||||||
|
backend owns authentication integration, authorization, request workflows, audit
|
||||||
|
events, and persistence. The frontend renders queue workflows and calls the API.
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
User["Support User"]
|
||||||
|
Browser["Vue SPA"]
|
||||||
|
API["ASP.NET Core API"]
|
||||||
|
Modules["Application Modules"]
|
||||||
|
Domain["Domain Model"]
|
||||||
|
Database["PostgreSQL"]
|
||||||
|
IdP["Identity Provider"]
|
||||||
|
|
||||||
|
User --> Browser
|
||||||
|
Browser --> API
|
||||||
|
API --> Modules
|
||||||
|
Modules --> Domain
|
||||||
|
Modules --> Database
|
||||||
|
API --> IdP
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture Style
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Style | Modular monolith |
|
||||||
|
| Primary reason | Small team, shared database, evolving domain boundaries. |
|
||||||
|
| Main trade-off | Requires discipline to prevent module coupling. |
|
||||||
|
| Related decision | ADR-001 in `DECISIONS.example.md`. |
|
||||||
|
|
||||||
|
## Folder Structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
atlas-desk/
|
||||||
|
backend/
|
||||||
|
src/
|
||||||
|
Requests/
|
||||||
|
Users/
|
||||||
|
Reporting/
|
||||||
|
Shared/
|
||||||
|
tests/
|
||||||
|
frontend/
|
||||||
|
src/
|
||||||
|
features/
|
||||||
|
shared/
|
||||||
|
tests/
|
||||||
|
docs/
|
||||||
|
```
|
||||||
|
|
||||||
|
| Folder | Responsibility |
|
||||||
|
| --- | --- |
|
||||||
|
| `backend/src/Requests` | Request lifecycle, assignment, notes, and closure. |
|
||||||
|
| `backend/src/Users` | User profile and role synchronization. |
|
||||||
|
| `backend/src/Reporting` | Queue health and manager dashboards. |
|
||||||
|
| `frontend/src/features` | User-facing feature modules. |
|
||||||
|
| `frontend/src/shared` | Reusable UI and API utilities. |
|
||||||
|
|
||||||
|
## Module Responsibilities
|
||||||
|
|
||||||
|
| Module | Responsibility | Owned Data | Public Interface |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Requests | Support request workflow. | Requests, notes, assignments, audit events. | Request commands and query endpoints. |
|
||||||
|
| Users | Local user profile and role cache. | Users and role snapshots. | User lookup service. |
|
||||||
|
| Reporting | Aggregated queue health views. | Read models derived from requests. | Reporting queries. |
|
||||||
|
|
||||||
|
## Dependency Rules
|
||||||
|
|
||||||
|
- Feature modules may depend on `Shared`.
|
||||||
|
- `Reporting` reads request data through query interfaces, not direct mutation.
|
||||||
|
- Domain rules do not depend on HTTP, Vue, or database APIs.
|
||||||
|
- Infrastructure implementations depend inward on application contracts.
|
||||||
|
|
||||||
|
## Request Flow
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
sequenceDiagram
|
||||||
|
participant Browser
|
||||||
|
participant API
|
||||||
|
participant Auth
|
||||||
|
participant Requests
|
||||||
|
participant Database
|
||||||
|
|
||||||
|
Browser->>API: POST /api/requests/{id}/assign
|
||||||
|
API->>Auth: Check Manager or Agent policy
|
||||||
|
API->>Requests: AssignRequest command
|
||||||
|
Requests->>Database: Save assignment and audit event
|
||||||
|
Database-->>Requests: Commit result
|
||||||
|
Requests-->>API: Updated request summary
|
||||||
|
API-->>Browser: 200 OK
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
| Data | Source | Owner | Storage | Consumers |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| Support request | Agent or imported email | Requests module | PostgreSQL | Agents, managers, reporting. |
|
||||||
|
| User role | Identity provider | Users module | PostgreSQL role snapshot | Authorization policies. |
|
||||||
|
| Queue metrics | Request state changes | Reporting module | Materialized query table | Manager dashboard. |
|
||||||
|
|
||||||
|
## Domain Model
|
||||||
|
|
||||||
|
| Concept | Meaning | Invariants |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Request | A customer support item requiring work. | Must have status, priority, creator, and audit history. |
|
||||||
|
| Assignment | Ownership of a request by a user. | Only active users can own open requests. |
|
||||||
|
| Audit Event | Immutable record of important workflow action. | Cannot be edited after creation. |
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
| Integration | Direction | Protocol | Reliability Expectations |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Identity provider | Outbound | OpenID Connect | Login must fail closed if identity cannot be verified. |
|
||||||
|
| Email notifications | Outbound | SMTP or provider API | Retry transient failures; never block core assignment transaction. |
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
| Area | Policy |
|
||||||
|
| --- | --- |
|
||||||
|
| Authentication | All application routes require authenticated users. |
|
||||||
|
| Authorization | Backend policies enforce role and ownership checks. |
|
||||||
|
| Secrets | Secrets are environment-provided and never committed. |
|
||||||
|
| Input validation | API validates DTO shape before command execution. |
|
||||||
|
| Output encoding | Frontend renders user content safely through framework escaping. |
|
||||||
|
| Audit logging | Assignment, closure, and role changes create audit events. |
|
||||||
|
| Dependency security | CI runs dependency audit before release. |
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
| Error Type | Handling Policy | User/Client Response |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Validation error | Return field-level errors. | 400 with validation details. |
|
||||||
|
| Domain error | Return stable problem code. | 409 or 422 with safe message. |
|
||||||
|
| Infrastructure error | Log with correlation ID and retry if safe. | 503 for transient failures. |
|
||||||
|
| Unexpected error | Log, alert if elevated, hide details. | 500 with correlation ID. |
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
| Concern | Expectation | Measurement |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Latency | P95 below 300 ms for core endpoints. | API metrics. |
|
||||||
|
| Throughput | 100 concurrent active users. | Load test before production launch. |
|
||||||
|
| Resource usage | Single service fits standard container profile. | Runtime metrics. |
|
||||||
|
|
||||||
|
## Scalability
|
||||||
|
|
||||||
|
| Dimension | Current Strategy | Future Strategy |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Traffic | Single API service with horizontal scaling. | Split reporting read model if dashboards become expensive. |
|
||||||
|
| Data volume | PostgreSQL indexes for active queue queries. | Archive closed requests older than retention threshold. |
|
||||||
|
| Team size | Module ownership within one repo. | Extract services only after boundaries and ownership stabilize. |
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# Atlas Desk Conventions
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
- Use support-domain language: request, assignment, note, queue, audit event.
|
||||||
|
- Use `Async` suffix for asynchronous backend methods.
|
||||||
|
- Name Vue components by feature and purpose, such as `RequestDetailPanel`.
|
||||||
|
- Name authorization policies by action, such as `CanAssignRequest`.
|
||||||
|
|
||||||
|
## File Organization
|
||||||
|
|
||||||
|
- Keep backend files under their owning module.
|
||||||
|
- Keep Vue components below 250 lines when practical.
|
||||||
|
- Co-locate component tests with feature components.
|
||||||
|
- Keep generated API types in `frontend/src/shared/api/generated`.
|
||||||
|
|
||||||
|
## Folder Organization
|
||||||
|
|
||||||
|
| Folder | Rule |
|
||||||
|
| --- | --- |
|
||||||
|
| `backend/src/Requests` | Owns request workflow commands, queries, and domain rules. |
|
||||||
|
| `backend/src/Shared` | Contains cross-cutting primitives only. |
|
||||||
|
| `frontend/src/features/requests` | Owns request screens and feature-specific components. |
|
||||||
|
| `frontend/src/shared` | Contains reusable UI primitives and API utilities. |
|
||||||
|
|
||||||
|
## Dependency Injection
|
||||||
|
|
||||||
|
- Register backend services by module.
|
||||||
|
- Inject clocks, email clients, database contexts, and external gateways.
|
||||||
|
- Do not inject primitive configuration values directly into domain classes.
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
- Use structured logs with `requestId` and `userId` where available.
|
||||||
|
- Log workflow transitions at information level.
|
||||||
|
- Log authorization denials at warning level only when they indicate suspicious behavior.
|
||||||
|
- Do not log customer message bodies.
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
- Validate API DTO shape at the API boundary.
|
||||||
|
- Validate workflow invariants inside request commands.
|
||||||
|
- Validate authorization before loading sensitive detail views.
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- Use stable problem codes for client-visible API errors.
|
||||||
|
- Return validation errors as field-level responses.
|
||||||
|
- Include correlation IDs in error responses.
|
||||||
|
- Do not expose stack traces outside local development.
|
||||||
|
|
||||||
|
## DTO Rules
|
||||||
|
|
||||||
|
- API DTOs are separate from persistence entities.
|
||||||
|
- Request detail DTOs must not include internal audit metadata unless the user has manager or auditor access.
|
||||||
|
- Public API changes require a changelog entry.
|
||||||
|
|
||||||
|
## Repository Rules
|
||||||
|
|
||||||
|
- Keep queries explicit, such as `FindOpenRequestsForQueue`.
|
||||||
|
- Do not add generic repository abstractions over the database context.
|
||||||
|
- Write operations that can be retried must be idempotent or transactionally protected.
|
||||||
|
|
||||||
|
## Service Rules
|
||||||
|
|
||||||
|
- Application services coordinate commands and queries.
|
||||||
|
- Domain services contain request workflow rules only when the rule spans entities.
|
||||||
|
- External email delivery is behind an interface.
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- Unit test request state transitions.
|
||||||
|
- Integration test authorization and database persistence.
|
||||||
|
- End-to-end test create, assign, comment, and close workflows.
|
||||||
|
- Add regression tests for production defects.
|
||||||
|
|
||||||
|
## Git Workflow
|
||||||
|
|
||||||
|
- Branch names use `feature/`, `fix/`, `refactor/`, `docs/`, or `hotfix/`.
|
||||||
|
- Squash merge pull requests into `main`.
|
||||||
|
- Commit messages use imperative summaries.
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
- Include summary, validation, risk, and screenshots for UI changes.
|
||||||
|
- Include migration notes when database schema changes.
|
||||||
|
- Keep unrelated refactors in separate pull requests.
|
||||||
|
|
||||||
|
## Code Reviews
|
||||||
|
|
||||||
|
- Block on correctness, security, data integrity, missing validation, or unclear ownership.
|
||||||
|
- Prefer suggestions for style issues that are not covered by tooling.
|
||||||
|
- Ask for ADR updates when a decision changes system structure.
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
# Atlas Desk Decisions
|
||||||
|
|
||||||
|
## ADR-001: Start With A Modular Monolith
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
Atlas Desk is new, the team is small, and the request workflow domain is still
|
||||||
|
evolving. The system needs clear boundaries, but it does not yet need
|
||||||
|
independent service deployments.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
The team must choose an architecture that supports maintainability without
|
||||||
|
adding unnecessary operational complexity.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| Layered monolith | Simple, but feature ownership can blur over time. |
|
||||||
|
| Modular monolith | Clear module boundaries with one deployable unit. |
|
||||||
|
| Microservices | Strong service isolation but adds network, deployment, and data consistency cost. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Keeps deployment simple.
|
||||||
|
- Supports explicit module ownership.
|
||||||
|
- Allows future service extraction if boundaries prove stable.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Requires discipline to maintain module boundaries.
|
||||||
|
- Scaling is initially at the application level, not module level.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Use a modular monolith for the first production release.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- Module dependency rules are documented in the architecture guide.
|
||||||
|
- Cross-module writes are not allowed without an application-level command.
|
||||||
|
- Microservice extraction will be reconsidered only after measured pressure.
|
||||||
|
|
||||||
|
## ADR-002: Use PostgreSQL As The Primary Data Store
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
Atlas Desk needs transactional consistency for request state, assignment, notes,
|
||||||
|
and audit events.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
The team needs a reliable primary database that supports relational queries,
|
||||||
|
transactions, and reporting-friendly indexes.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| PostgreSQL | Strong relational database with good operational support. |
|
||||||
|
| Document database | Flexible schema but weaker fit for transactional queue workflows. |
|
||||||
|
| Embedded database | Simple locally but not suitable for shared production usage. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Strong transactions.
|
||||||
|
- Mature indexing and query capabilities.
|
||||||
|
- Good fit for reporting queries.
|
||||||
|
- Broad hosting support.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Schema changes require migration discipline.
|
||||||
|
- Query performance must be monitored as data grows.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Use PostgreSQL as the primary data store.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- Migrations must be reviewed before release.
|
||||||
|
- Integration tests should run against PostgreSQL, not an incompatible in-memory substitute.
|
||||||
|
- Backup and restore procedures are production readiness requirements.
|
||||||
|
|
||||||
|
## ADR-003: Require Backend Authorization For All Sensitive Actions
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
|
||||||
|
### Date
|
||||||
|
|
||||||
|
2026-06-28
|
||||||
|
|
||||||
|
### Context
|
||||||
|
|
||||||
|
The frontend hides actions based on role, but API clients cannot be trusted to
|
||||||
|
enforce authorization.
|
||||||
|
|
||||||
|
### Problem
|
||||||
|
|
||||||
|
Sensitive actions such as assignment, closure, and audit viewing must be
|
||||||
|
protected even if a user bypasses the UI.
|
||||||
|
|
||||||
|
### Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| Frontend-only checks | Better user experience but not a security boundary. |
|
||||||
|
| Backend policy checks | Trusted enforcement point. |
|
||||||
|
| Database row-level security | Strong but more complex than needed initially. |
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
- Keeps authorization in a trusted boundary.
|
||||||
|
- Makes behavior testable through API integration tests.
|
||||||
|
- Supports multiple clients later.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
- Requires explicit policy coverage for each sensitive endpoint.
|
||||||
|
- UI and API authorization rules can drift without tests.
|
||||||
|
|
||||||
|
### Decision
|
||||||
|
|
||||||
|
Enforce authorization in backend policies for all sensitive actions.
|
||||||
|
|
||||||
|
### Consequences
|
||||||
|
|
||||||
|
- Frontend checks remain usability hints only.
|
||||||
|
- Authorization tests are required for each protected workflow.
|
||||||
|
- Policy changes must be reviewed as security-sensitive changes.
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
# Feature: Request Assignment
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
|
||||||
|
Allow agents and managers to assign an open support request to an active agent.
|
||||||
|
|
||||||
|
## User Or System Value
|
||||||
|
|
||||||
|
Support teams can see clear ownership for every active request and reduce
|
||||||
|
duplicate work.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Agents can assign unowned requests to themselves.
|
||||||
|
- Managers can assign requests to any active agent.
|
||||||
|
- Assignment creates an audit event.
|
||||||
|
- Closed requests cannot be reassigned.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- Automated assignment rules.
|
||||||
|
- Workload balancing.
|
||||||
|
- External notifications beyond a basic assignment event.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- [ ] An agent can assign an unowned open request to themselves.
|
||||||
|
- [ ] A manager can assign an open request to another active agent.
|
||||||
|
- [ ] A non-manager cannot assign a request to another user.
|
||||||
|
- [ ] Closed requests return a domain error when assignment is attempted.
|
||||||
|
- [ ] Every successful assignment writes an audit event.
|
||||||
|
|
||||||
|
## Architecture Notes
|
||||||
|
|
||||||
|
- Affected modules: Requests, Users.
|
||||||
|
- Dependency concerns: Requests queries Users through a user lookup interface.
|
||||||
|
- Data ownership: Requests owns assignments and audit events.
|
||||||
|
- Related ADRs: ADR-001, ADR-003.
|
||||||
|
|
||||||
|
## API Or Interface Changes
|
||||||
|
|
||||||
|
```http
|
||||||
|
POST /api/requests/{requestId}/assignment
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"assigneeUserId": "usr_123"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Successful response:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"requestId": "req_456",
|
||||||
|
"assigneeUserId": "usr_123",
|
||||||
|
"status": "open"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Data Changes
|
||||||
|
|
||||||
|
- Add `assigned_to_user_id` to requests if not already present.
|
||||||
|
- Add `RequestAssigned` audit event type.
|
||||||
|
- Index active requests by assigned user for queue views.
|
||||||
|
|
||||||
|
## Security And Authorization
|
||||||
|
|
||||||
|
- Authenticated agents can assign requests to themselves.
|
||||||
|
- Managers can assign requests to any active agent.
|
||||||
|
- Backend policies enforce assignment permissions.
|
||||||
|
- Frontend controls are not considered a security boundary.
|
||||||
|
|
||||||
|
## Testing Plan
|
||||||
|
|
||||||
|
- Unit: request assignment state transitions and closed-request rejection.
|
||||||
|
- Integration: authorization cases and audit event persistence.
|
||||||
|
- End-to-end: create request, assign, and confirm queue ownership changes.
|
||||||
|
- Manual: verify manager and agent UI states.
|
||||||
|
|
||||||
|
## Rollout Plan
|
||||||
|
|
||||||
|
Deploy backend and frontend together. Run a smoke test that assigns a staging
|
||||||
|
request as an agent and as a manager.
|
||||||
|
|
||||||
|
## Risks
|
||||||
|
|
||||||
|
- Authorization drift between UI and API.
|
||||||
|
- Assignment race when two users assign the same request at the same time.
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
- Should assignment notify the assignee immediately in the first release?
|
||||||
@@ -0,0 +1,167 @@
|
|||||||
|
# Atlas Desk
|
||||||
|
|
||||||
|
Atlas Desk is a fictional internal support workflow system for small operations
|
||||||
|
teams.
|
||||||
|
|
||||||
|
## Vision
|
||||||
|
|
||||||
|
Give support teams one reliable place to triage customer requests, assign work,
|
||||||
|
track status, and understand operational bottlenecks without relying on shared
|
||||||
|
mailboxes or spreadsheets.
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- Reduce average request triage time by 40 percent.
|
||||||
|
- Make ownership and status visible for every support request.
|
||||||
|
- Provide an audit trail for customer-impacting decisions.
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- Replace the billing system.
|
||||||
|
- Provide public customer self-service in the first release.
|
||||||
|
- Support multi-region deployment before usage requires it.
|
||||||
|
|
||||||
|
## Functional Requirements
|
||||||
|
|
||||||
|
| ID | Requirement | Priority | Status |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| FR-001 | Agents can create, assign, and close support requests. | Must | Accepted |
|
||||||
|
| FR-002 | Managers can view queue health and overdue work. | Must | Accepted |
|
||||||
|
| FR-003 | Users can add internal notes to requests. | Should | Proposed |
|
||||||
|
| FR-004 | The system sends notifications when ownership changes. | Should | Proposed |
|
||||||
|
|
||||||
|
## Non-Functional Requirements
|
||||||
|
|
||||||
|
| Category | Requirement | Measurement |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Availability | Available during support hours. | 99.5 percent monthly uptime. |
|
||||||
|
| Performance | Common list and detail views feel immediate. | P95 API latency below 300 ms for core endpoints. |
|
||||||
|
| Security | Only authorized users can view or mutate requests. | Authorization tests cover each role. |
|
||||||
|
| Privacy | Customer contact data is minimized and auditable. | Sensitive fields are excluded from debug logs. |
|
||||||
|
| Maintainability | New queue workflows can be added without rewriting the core model. | Feature modules own their workflows. |
|
||||||
|
|
||||||
|
## Users And Roles
|
||||||
|
|
||||||
|
| Role | Description | Key Permissions |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Agent | Handles support requests. | Create, update, assign, comment, close. |
|
||||||
|
| Manager | Oversees queue health. | All agent permissions plus reporting and reassignment. |
|
||||||
|
| Auditor | Reviews historical activity. | Read-only access to requests and audit events. |
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Area | Choice | Notes |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Language | C# and TypeScript | Backend and frontend use separate type systems. |
|
||||||
|
| Framework | ASP.NET Core and Vue | Conventional web application stack. |
|
||||||
|
| Frontend | Vue 3 | Single-page application. |
|
||||||
|
| Backend | ASP.NET Core | Modular monolith API. |
|
||||||
|
| Database | PostgreSQL | Primary transactional store. |
|
||||||
|
| Messaging | None initially | Reconsider if notification volume grows. |
|
||||||
|
| Search | PostgreSQL full-text search | Sufficient for initial request search. |
|
||||||
|
| Cache | None initially | Add only after measured pressure. |
|
||||||
|
|
||||||
|
## Runtime
|
||||||
|
|
||||||
|
| Environment | Purpose | URL or Entry Point | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Local | Development | `https://localhost:5173` | Frontend talks to local API. |
|
||||||
|
| Test | Automated validation | CI service containers | Uses ephemeral PostgreSQL. |
|
||||||
|
| Staging | Release verification | `https://staging.atlas-desk.example` | Mirrors production config. |
|
||||||
|
| Production | Live system | `https://atlas-desk.example` | Single-region deployment. |
|
||||||
|
|
||||||
|
## Infrastructure
|
||||||
|
|
||||||
|
| Component | Provider | Responsibility | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Hosting | Managed container platform | Run API and frontend assets. | One service initially. |
|
||||||
|
| Storage | PostgreSQL managed database | Store requests, users, audit events. | Daily backups. |
|
||||||
|
| Network | Managed load balancer | TLS and routing. | Internal admin access restricted. |
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Database engine | PostgreSQL |
|
||||||
|
| Migration tool | Entity Framework Core migrations |
|
||||||
|
| Backup strategy | Daily automated backup with 14-day retention |
|
||||||
|
| Restore strategy | Restore to staging monthly as a drill |
|
||||||
|
| Data retention | Closed requests retained for 3 years |
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
| Pipeline | Trigger | Required Checks | Notes |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| CI | Pull request and push to main | Build, unit tests, integration tests, lint | Blocks merge. |
|
||||||
|
| Deploy staging | Push to main | CI success | Automatic. |
|
||||||
|
| Deploy production | Manual approval | Staging smoke test | Release owner approves. |
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
| Area | Policy |
|
||||||
|
| --- | --- |
|
||||||
|
| Deployment strategy | Rolling container deployment |
|
||||||
|
| Rollback strategy | Redeploy previous image and disable feature flags |
|
||||||
|
| Release owner | Support platform maintainer |
|
||||||
|
| Change window | Weekdays before 15:00 local support time |
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Authentication method | OpenID Connect |
|
||||||
|
| Identity provider | Company identity provider |
|
||||||
|
| Session model | Secure HTTP-only cookie |
|
||||||
|
| Token lifetime | 8-hour workday session |
|
||||||
|
|
||||||
|
## Authorization
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Authorization model | Role-based access with policy checks |
|
||||||
|
| Role source | Identity provider group claims synchronized at login |
|
||||||
|
| Policy location | Backend authorization policies |
|
||||||
|
| Audit requirements | Assignment and close actions generate audit events |
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
| Field | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Logging library | Structured backend logging |
|
||||||
|
| Log sink | Central log service |
|
||||||
|
| Correlation ID | Created at API edge and returned in responses |
|
||||||
|
| Sensitive data policy | Do not log customer email bodies or tokens |
|
||||||
|
|
||||||
|
## Monitoring
|
||||||
|
|
||||||
|
| Signal | Tool | Alert Policy |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Availability | Health checks | Alert after 3 failed checks. |
|
||||||
|
| Errors | Error tracking | Alert on elevated 5xx rate. |
|
||||||
|
| Performance | API metrics | Alert when P95 exceeds 500 ms for 15 minutes. |
|
||||||
|
| Business metrics | Queue dashboard | Alert managers when overdue work exceeds threshold. |
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
| Test Type | Tooling | Required When |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Unit | Backend and frontend test runners | Domain rules, view logic, formatters. |
|
||||||
|
| Integration | API tests with PostgreSQL | Persistence, auth, and queue workflows. |
|
||||||
|
| End-to-end | Browser automation | Critical request lifecycle. |
|
||||||
|
| Performance | Scripted API checks | Before major queue or reporting changes. |
|
||||||
|
| Security | Dependency audit and auth tests | Each release candidate. |
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
| Milestone | Target | Outcome |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| M1 | Q1 | Request intake, assignment, and closure. |
|
||||||
|
| M2 | Q2 | Reporting dashboard and overdue alerts. |
|
||||||
|
| M3 | Q3 | Customer-visible request status page. |
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
| Question | Owner | Needed By | Status |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Should notification delivery use email only or chat integration too? | Product | M2 planning | Open |
|
||||||
|
| Is audit export required for compliance reviews? | Operations | M1 release | Open |
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
# {{PROJECT_NAME}} Architecture
|
||||||
|
|
||||||
|
## High-Level Overview
|
||||||
|
|
||||||
|
{{ARCHITECTURE_OVERVIEW}}
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
User["User"]
|
||||||
|
Interface["{{INTERFACE_LAYER}}"]
|
||||||
|
Application["{{APPLICATION_LAYER}}"]
|
||||||
|
Domain["{{DOMAIN_LAYER}}"]
|
||||||
|
Infrastructure["{{INFRASTRUCTURE_LAYER}}"]
|
||||||
|
|
||||||
|
User --> Interface
|
||||||
|
Interface --> Application
|
||||||
|
Application --> Domain
|
||||||
|
Application --> Infrastructure
|
||||||
|
```
|
||||||
|
|
||||||
|
## Architecture Style
|
||||||
|
|
||||||
|
- Style: {{ARCHITECTURE_STYLE}}
|
||||||
|
- Reason: {{ARCHITECTURE_REASON}}
|
||||||
|
- Key trade-off: {{ARCHITECTURE_TRADE_OFF}}
|
||||||
|
|
||||||
|
## Folder Structure
|
||||||
|
|
||||||
|
```text
|
||||||
|
{{PROJECT_ROOT}}/
|
||||||
|
{{SOURCE_FOLDER}}/
|
||||||
|
{{TEST_FOLDER}}/
|
||||||
|
docs/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Module Responsibilities
|
||||||
|
|
||||||
|
| Module | Responsibility | Public Interface |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| {{MODULE_NAME}} | {{MODULE_RESPONSIBILITY}} | {{PUBLIC_INTERFACE}} |
|
||||||
|
|
||||||
|
## Dependency Rules
|
||||||
|
|
||||||
|
- {{DEPENDENCY_RULE_1}}
|
||||||
|
- {{DEPENDENCY_RULE_2}}
|
||||||
|
- {{DEPENDENCY_RULE_3}}
|
||||||
|
|
||||||
|
## Request Flow
|
||||||
|
|
||||||
|
{{REQUEST_FLOW}}
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
{{DATA_FLOW}}
|
||||||
|
|
||||||
|
## Domain Model
|
||||||
|
|
||||||
|
| Concept | Meaning | Invariants |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| {{DOMAIN_CONCEPT}} | {{DOMAIN_MEANING}} | {{DOMAIN_INVARIANTS}} |
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
| Integration | Direction | Protocol | Failure Policy |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| {{INTEGRATION}} | {{DIRECTION}} | {{PROTOCOL}} | {{FAILURE_POLICY}} |
|
||||||
|
|
||||||
|
## Security
|
||||||
|
|
||||||
|
- Authentication: {{AUTHENTICATION_POLICY}}
|
||||||
|
- Authorization: {{AUTHORIZATION_POLICY}}
|
||||||
|
- Secrets: {{SECRETS_POLICY}}
|
||||||
|
- Input validation: {{INPUT_VALIDATION_POLICY}}
|
||||||
|
- Audit logging: {{AUDIT_LOGGING_POLICY}}
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
{{ERROR_HANDLING_POLICY}}
|
||||||
|
|
||||||
|
## Performance And Scalability
|
||||||
|
|
||||||
|
- Latency target: {{LATENCY_TARGET}}
|
||||||
|
- Throughput target: {{THROUGHPUT_TARGET}}
|
||||||
|
- Scaling strategy: {{SCALING_STRATEGY}}
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
# {{PROJECT_NAME}} Conventions
|
||||||
|
|
||||||
|
## Naming
|
||||||
|
|
||||||
|
- {{NAMING_RULE}}
|
||||||
|
|
||||||
|
## File Organization
|
||||||
|
|
||||||
|
- {{FILE_ORGANIZATION_RULE}}
|
||||||
|
|
||||||
|
## Folder Organization
|
||||||
|
|
||||||
|
- {{FOLDER_ORGANIZATION_RULE}}
|
||||||
|
|
||||||
|
## Dependency Injection
|
||||||
|
|
||||||
|
- {{DEPENDENCY_INJECTION_RULE}}
|
||||||
|
|
||||||
|
## Logging
|
||||||
|
|
||||||
|
- {{LOGGING_RULE}}
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
|
||||||
|
- {{VALIDATION_RULE}}
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- {{ERROR_HANDLING_RULE}}
|
||||||
|
|
||||||
|
## DTO Rules
|
||||||
|
|
||||||
|
- {{DTO_RULE}}
|
||||||
|
|
||||||
|
## Repository Rules
|
||||||
|
|
||||||
|
- {{REPOSITORY_RULE}}
|
||||||
|
|
||||||
|
## Service Rules
|
||||||
|
|
||||||
|
- {{SERVICE_RULE}}
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- Unit tests: {{UNIT_TEST_RULE}}
|
||||||
|
- Integration tests: {{INTEGRATION_TEST_RULE}}
|
||||||
|
- End-to-end tests: {{E2E_TEST_RULE}}
|
||||||
|
|
||||||
|
## Git Workflow
|
||||||
|
|
||||||
|
- Branch naming: {{BRANCH_NAMING}}
|
||||||
|
- Merge policy: {{MERGE_POLICY}}
|
||||||
|
- Commit style: {{COMMIT_STYLE}}
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
- {{PULL_REQUEST_RULE}}
|
||||||
|
|
||||||
|
## Code Reviews
|
||||||
|
|
||||||
|
- {{CODE_REVIEW_RULE}}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# ADR-{{ADR_NUMBER}}: {{DECISION_TITLE}}
|
||||||
|
|
||||||
|
## Status
|
||||||
|
|
||||||
|
{{STATUS}}
|
||||||
|
|
||||||
|
## Date
|
||||||
|
|
||||||
|
{{DATE}}
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
{{CONTEXT}}
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
{{PROBLEM}}
|
||||||
|
|
||||||
|
## Alternatives
|
||||||
|
|
||||||
|
| Alternative | Summary |
|
||||||
|
| --- | --- |
|
||||||
|
| {{ALTERNATIVE_1}} | {{ALTERNATIVE_1_SUMMARY}} |
|
||||||
|
| {{ALTERNATIVE_2}} | {{ALTERNATIVE_2_SUMMARY}} |
|
||||||
|
| {{ALTERNATIVE_3}} | {{ALTERNATIVE_3_SUMMARY}} |
|
||||||
|
|
||||||
|
## Pros
|
||||||
|
|
||||||
|
- {{PRO_1}}
|
||||||
|
- {{PRO_2}}
|
||||||
|
|
||||||
|
## Cons
|
||||||
|
|
||||||
|
- {{CON_1}}
|
||||||
|
- {{CON_2}}
|
||||||
|
|
||||||
|
## Decision
|
||||||
|
|
||||||
|
{{DECISION}}
|
||||||
|
|
||||||
|
## Consequences
|
||||||
|
|
||||||
|
- {{CONSEQUENCE_1}}
|
||||||
|
- {{CONSEQUENCE_2}}
|
||||||
|
|
||||||
|
## Review Triggers
|
||||||
|
|
||||||
|
- {{REVIEW_TRIGGER}}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# Feature: {{FEATURE_NAME}}
|
||||||
|
|
||||||
|
## Objective
|
||||||
|
|
||||||
|
{{FEATURE_OBJECTIVE}}
|
||||||
|
|
||||||
|
## User Or System Value
|
||||||
|
|
||||||
|
{{USER_OR_SYSTEM_VALUE}}
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- {{REQUIREMENT_1}}
|
||||||
|
- {{REQUIREMENT_2}}
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- {{NON_GOAL_1}}
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
|
||||||
|
- [ ] {{ACCEPTANCE_CRITERION_1}}
|
||||||
|
- [ ] {{ACCEPTANCE_CRITERION_2}}
|
||||||
|
|
||||||
|
## Architecture Notes
|
||||||
|
|
||||||
|
- Affected modules: {{AFFECTED_MODULES}}
|
||||||
|
- Dependency concerns: {{DEPENDENCY_CONCERNS}}
|
||||||
|
- Data ownership: {{DATA_OWNERSHIP}}
|
||||||
|
- Related ADRs: {{RELATED_ADRS}}
|
||||||
|
|
||||||
|
## API Or Interface Changes
|
||||||
|
|
||||||
|
{{API_OR_INTERFACE_CHANGES}}
|
||||||
|
|
||||||
|
## Data Changes
|
||||||
|
|
||||||
|
{{DATA_CHANGES}}
|
||||||
|
|
||||||
|
## Security And Authorization
|
||||||
|
|
||||||
|
{{SECURITY_AND_AUTHORIZATION}}
|
||||||
|
|
||||||
|
## Testing Plan
|
||||||
|
|
||||||
|
- Unit: {{UNIT_TEST_PLAN}}
|
||||||
|
- Integration: {{INTEGRATION_TEST_PLAN}}
|
||||||
|
- End-to-end: {{E2E_TEST_PLAN}}
|
||||||
|
- Manual: {{MANUAL_TEST_PLAN}}
|
||||||
|
|
||||||
|
## Rollout Plan
|
||||||
|
|
||||||
|
{{ROLLOUT_PLAN}}
|
||||||
|
|
||||||
|
## Risks
|
||||||
|
|
||||||
|
- {{RISK_1}}
|
||||||
|
- {{RISK_2}}
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
- {{OPEN_QUESTION}}
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
# {{PROJECT_NAME}}
|
||||||
|
|
||||||
|
## Vision
|
||||||
|
|
||||||
|
{{PROJECT_VISION}}
|
||||||
|
|
||||||
|
## Goals
|
||||||
|
|
||||||
|
- {{GOAL_1}}
|
||||||
|
- {{GOAL_2}}
|
||||||
|
- {{GOAL_3}}
|
||||||
|
|
||||||
|
## Non-Goals
|
||||||
|
|
||||||
|
- {{NON_GOAL_1}}
|
||||||
|
- {{NON_GOAL_2}}
|
||||||
|
|
||||||
|
## Functional Requirements
|
||||||
|
|
||||||
|
| ID | Requirement | Priority |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| FR-001 | {{FUNCTIONAL_REQUIREMENT}} | Must |
|
||||||
|
|
||||||
|
## Non-Functional Requirements
|
||||||
|
|
||||||
|
| Category | Requirement |
|
||||||
|
| --- | --- |
|
||||||
|
| Performance | {{PERFORMANCE_REQUIREMENT}} |
|
||||||
|
| Security | {{SECURITY_REQUIREMENT}} |
|
||||||
|
| Availability | {{AVAILABILITY_REQUIREMENT}} |
|
||||||
|
| Maintainability | {{MAINTAINABILITY_REQUIREMENT}} |
|
||||||
|
|
||||||
|
## Tech Stack
|
||||||
|
|
||||||
|
| Area | Choice |
|
||||||
|
| --- | --- |
|
||||||
|
| Language | {{LANGUAGE}} |
|
||||||
|
| Framework | {{FRAMEWORK}} |
|
||||||
|
| Database | {{DATABASE}} |
|
||||||
|
| Deployment | {{DEPLOYMENT}} |
|
||||||
|
|
||||||
|
## Runtime
|
||||||
|
|
||||||
|
| Environment | URL or Entry Point | Notes |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Local | {{LOCAL_URL}} | {{LOCAL_NOTES}} |
|
||||||
|
| Staging | {{STAGING_URL}} | {{STAGING_NOTES}} |
|
||||||
|
| Production | {{PRODUCTION_URL}} | {{PRODUCTION_NOTES}} |
|
||||||
|
|
||||||
|
## Infrastructure
|
||||||
|
|
||||||
|
- Hosting: {{HOSTING}}
|
||||||
|
- Storage: {{STORAGE}}
|
||||||
|
- Network: {{NETWORK}}
|
||||||
|
- Secrets: {{SECRETS}}
|
||||||
|
|
||||||
|
## Authentication And Authorization
|
||||||
|
|
||||||
|
- Authentication: {{AUTHENTICATION}}
|
||||||
|
- Authorization: {{AUTHORIZATION}}
|
||||||
|
- Roles or policies: {{ROLES_OR_POLICIES}}
|
||||||
|
|
||||||
|
## Logging And Monitoring
|
||||||
|
|
||||||
|
- Logging: {{LOGGING}}
|
||||||
|
- Monitoring: {{MONITORING}}
|
||||||
|
- Alerting: {{ALERTING}}
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
- Unit tests: {{UNIT_TESTS}}
|
||||||
|
- Integration tests: {{INTEGRATION_TESTS}}
|
||||||
|
- End-to-end tests: {{E2E_TESTS}}
|
||||||
|
- Manual checks: {{MANUAL_CHECKS}}
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
- CI: {{CI}}
|
||||||
|
- CD: {{CD}}
|
||||||
|
- Required checks: {{REQUIRED_CHECKS}}
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
| Milestone | Outcome |
|
||||||
|
| --- | --- |
|
||||||
|
| {{MILESTONE}} | {{OUTCOME}} |
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
- {{OPEN_QUESTION}}
|
||||||
Reference in New Issue
Block a user