# Mandatory Phase Artifacts

Every implementation phase **automatically** includes the artifacts below unless the phase is explicitly **documentation-only** or an item is marked **N/A** with written justification tied to the phase boundary.

This list is normative. Agents must not wait for the phase prompt to restate it. ([ADR-018](../architecture/adr/ADR-018.md))

## Artifact Matrix

| # | Artifact | Required when | Primary standard |
| --- | --- | --- | --- |
| 0 | Enterprise Phase Discovery | Always (before Implementation) | [enterprise-phase-discovery.md](enterprise-phase-discovery.md) |
| 1 | Business Analysis | Always (implementation phases) | [phase-template.md](phase-template.md) · [definition-of-done.md](definition-of-done.md) |
| 2 | Architecture Validation | Always | [development-loop.md](development-loop.md) · ADRs · [module-boundaries.md](../architecture/module-boundaries.md) |
| 3 | Domain Modeling | New/changed domain surface | Phase doc Domain Model section |
| 4 | Aggregate Design | New/changed aggregates | [entity-template.md](entity-template.md) · DDD aggregate rules |
| 5 | Entity Design | New/changed tables/models | [entity-template.md](entity-template.md) |
| 6 | DTO Design | Any API surface | [api-template.md](api-template.md) |
| 7 | Repository Design | Persistence for aggregates | [repository-template.md](repository-template.md) |
| 8 | Service Design | Business logic | [service-layer-template.md](service-layer-template.md) |
| 9 | Specification Pattern | Reusable predicates / query specs | `app/specifications/` · service-layer template |
| 10 | Policy Layer | Authz, entitlement, domain policies | `app/policies/` · authorization architecture |
| 11 | Commands | State-changing use cases | `app/commands/` or explicit service command methods |
| 12 | Queries | Read use cases | `app/queries/` or explicit query services |
| 13 | REST APIs | Externalizable capabilities | [api-template.md](api-template.md) |
| 14 | Capability APIs | Platform/discoverable services | `/capabilities` |
| 15 | Health APIs | Every runnable service | `/health` |
| 16 | Metrics | Runnable services with ops surface | `/metrics` or justified N/A |
| 17 | Permission APIs / tree | Privileged operations | `{service}.*` · permission registration |
| 18 | OpenAPI Documentation | Any new/changed HTTP routes | FastAPI OpenAPI / exported schema |
| 19 | Validation Layer | Any input or domain rule | Pydantic + `app/validators/` |
| 20 | Pagination | Collection list endpoints | Shared page meta |
| 21 | Filtering | List endpoints with attributes | Query params + repository filters |
| 22 | Sorting | List endpoints | Stable sort keys documented |
| 23 | Searching | List endpoints with text find | Search params + indexed fields where needed |
| 24 | Soft Delete | Master/business records | [entity-template.md](entity-template.md) |
| 25 | Optimistic Locking | Concurrent update risk | Version/row version column |
| 26 | Audit Trail | State-changing business actions | Audit tables / audit service |
| 27 | Outbox Events | Cross-service-relevant changes | [event-template.md](event-template.md) · [ADR-006](../architecture/adr/ADR-006.md) |
| 28 | Tenant Isolation | All business data | [ADR-003](../architecture/adr/ADR-003.md) |
| 29 | Migration | Schema changes | Alembic in owning service only |
| 30 | Seed Data | Bootstrap/reference data required | Idempotent seeds documented |
| 31 | Background Jobs | Async/scheduled work in scope | Celery/worker pattern of the service |
| 32 | Configuration | Always for runtime services | Env / settings — no secrets in code |
| 33 | Feature Flags | Gated capabilities in scope | Entitlement / toggle pattern |
| 34 | Provider Interfaces | External systems | `app/providers/` protocols · [provider-registry.md](../provider-registry.md) |
| 35 | Dependency Injection | Always | Explicit FastAPI/deps or constructor injection |
| 36 | Unit Tests | Always when logic exists | [testing-template.md](testing-template.md) |
| 37 | Integration Tests | Always when APIs/flows exist | [testing-template.md](testing-template.md) |
| 38 | Architecture Tests | Service/module code phases | Boundary / layering tests |
| 39 | Security Tests | Privileged or tenant APIs | Authn/authz negatives |
| 40 | Performance Validation | Hot paths or lists | Indexes, N+1 guard, timing N/A justified |
| 41 | Documentation | Always | [documentation-template.md](documentation-template.md) |
| 42 | Self Audit | Always | [development-loop.md](development-loop.md) |
| 43 | Service Snapshot | Service-scoped phases on Complete | [service-snapshot-policy.md](service-snapshot-policy.md) · Project Index `snapshot_file` |
| 44 | Project Index Update | Service registration or phase Complete | [project-index.yaml](project-index.yaml) |

## Package Layout Expectation

For implementation phases inside a service, prefer (create when missing for in-scope work):

```
app/
  api/v1/
  commands/
  queries/
  policies/
  specifications/
  validators/
  providers/
  services/
  repositories/
  models/
  schemas/
  events/
  permissions/
  tests/
```

Existing services that use equivalent patterns (command methods on services, inline specs) may keep their style **if** responsibilities are equally covered and documented. New services should follow the layout above.

## N/A Rules

An artifact may be N/A only when:

1. The phase is documentation-only / registration-only, **or**
2. The artifact cannot apply inside the phase boundary (e.g. no list endpoints → Searching N/A), **and**
3. The phase doc or handover records the justification.

N/A is **never** allowed for Tenant Isolation, Documentation, Self Audit, Architecture Validation, Service Snapshot (when service-scoped), Project Index update (when service-scoped), or Definition of Done overall on implementation phases that touch business data.

## Related Documents

- [Project Index](project-index.yaml)
- [Service Snapshot Policy](service-snapshot-policy.md)
- [Enterprise Phase Discovery](enterprise-phase-discovery.md)
- [Definition of Done](definition-of-done.md)
- [Enterprise Completeness](enterprise-completeness.md)
- [Service Template](service-template.md)
- [Module Template](module-template.md)
