# 2. Vertical Slices

The spine of this wiki.

A **slice** documents one realistic UI action end-to-end: from the click in the
browser to the row written in the database, passing through every layer in between
— the metadata read, the proc invoked, the cache invalidated. Slices are the only
place we write narrative prose. Concepts and reference chapters are short by design;
slices carry the load.

Slices are ordered by complexity. Each new slice introduces a new framework concept.
Re-read earlier slices once you've read later ones — the cross-refs back-fill.

| # | Slice | Concept(s) introduced |
|---|---|---|
| 1 | [a CRUD module (Hello World)](01-hello-world.md) | modules, forms, master/slave, jurisdiction |
| 2 | [multi-tenancy and product editions](02-multi-tenancy.md) | sBrandsId/sSubsidiaryId scoping, licence-gated editions |
| 3 | [a module with a report](03-report.md) | views, report templates, jxls |
| 4 | [extending — a custom field](04-custom-field.md) | gdsconfigformcustomslave, schema-less extension |
| 5 | [extending — a per-customer SQL override](05-customer-sql-override.md) | script/客户/, override channel |
| 6 | [a hardware-integrated module](06-hardware.md) | xlyPlc, serial, RPC into the press |
| 7 | [a module with workflow](07-workflow.md) (deferred) | Activiti, biz_flow, approval — needs a deployment with active flows |

Slices 1–5 are mainstream. Slice 6 is optional for readers who'll never
touch hardware. Slice 7 is deferred: it needs a deployment that actually
runs an approval flow before it can be traced end-to-end.
