pers-01 reproduction
Public source retained with the related article. Generated results, dependency directories, runtime storage, secrets, and oversized binary artifacts are intentionally excluded.
README
# PERS-01 persistence-mapping reproduction
This fixture tests one narrow claim: a mapper can preserve domain language
while translating into a relational model whose constraints, transaction, and
query index remain explicit design inputs.
The pinned PHP 8.4.12 and SQLite experiment retains ten behavior cases:
- typed aggregate round trip and child removal;
- atomic root and child rollback;
- unique order number, lifecycle, line, and foreign-key constraints;
- a focused due-fulfilment projection without aggregate hydration;
- an indexed relational query plan and an unindexed JSON document scan; and
- a source boundary with no persistence vocabulary in domain files.
Nine isolated mutations prove those controls detect missing currency, wrong
totals, stale children, split commits, missing constraints or index, aggregate
hydration in the read path, and persistence leakage into the domain.
Run the complete retained experiment with:
```bash
./run.sh
```
After committing the evidence, verify its exact tree with:
```bash
./bin/run-clean-export.sh HEAD
```
The clean export compares its semantic verifier, round trip, atomic rollback,
and query-plan evidence to the retained results.
The orders, deadlines, access patterns, and constraints are synthetic. The
query plans describe these exact SQLite statements and make no production
latency, database ranking, or Brian-experience claim.
Retained files
- .dockerignore
- analyze.php
- bin/run-clean-export.sh
- bootstrap.php
- Dockerfile
- mutate.php
- README.md
- run.sh
- source-evidence.php
- src/Domain/Money.php
- src/Domain/Order.php
- src/Domain/OrderLine.php
- src/DueOrder.php
- src/FindDueOrderDocuments.php
- src/FindOrdersDueForFulfilment.php
- src/OrderMapper.php
- src/Schema.php
- src/SqliteOrders.php
- tests/run.php
- verify-results.php