Story: Clean ores.workspace to the component clean standard
Table of Contents
This page documents a story in Sprint 26. It captures the goal, current status, acceptance criteria, and the tasks that compose it.
1. Goal
ores.workspace meets the Component Clean Standard: every item: All, Protocol and Entity pass, each item that does not apply is recorded with its reason, and ores.workspace joins COMPONENTS_UNDER_TEST. Order 21 of 35 in the sprint 26 component clean-up, tier 2 (higher infrastructure).
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 26 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. One item is handed over rather than done: the composite part gate, which stays in the inbox with its measurement. |
| Last touched | 2026-09-28 |
3. Acceptance
- Every checklist item that applies to a component of kind Entity passes, with its evidence recorded on the task.
- Every item that does not apply is recorded as not applicable, with the reason.
- Every generator defect found is fixed at its source, with a regression test.
- ores.workspace is listed in
COMPONENTS_UNDER_TEST, andcheck_component_drift.py --allpasses.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Bring ores.workspace to the clean standard | DONE | 2026-09-28 | 2026-09-28 | Work ores.workspace through the Component Clean Standard in order and record each item. |
| Mop up the workspace clean-up leftovers | DONE | 2026-09-28 | 2026-09-28 | Clear what the clean-standard pass recorded as open: the outermost namespace documentation header (G08), the cross-component ER diagram (H05), the Live workspace guard the canonical protocol has no seam for, the two captures the pass filed, and the two repository-wide checks that are red on main. |
5. Notes
- Survey on 2026-09-23: 1 entity, junction or operation models; 36 C++ files outside tests, 0 of them generated (0%); 3 messaging headers, 3 of them hand-written.
- Nothing is generated yet.
- 2026-09-28: the survey was right and the consequence was worse than it
looked. The model was not merely un-generated: it was in the retired
format, so its natural key
namewas read by no loader path and the generated domain type carried neithernamenorparty_id. The migration is the task's first item and the rest of the pass follows it.
6. Decisions
- Keep the two operations the component serves but nothing calls. The ancestor resolution chain and the trade-scope whitelist have no consumer in the tree. They are modelled as an operation model and served by hand-written handlers rather than deleted under P03, because they are the workspace feature's intended surface and the design doc treats the trade-scope filter as unfinished, not abandoned. Deleting them would be a product decision, not a clean-up one.
- Split the component's SQL in the model, not in the aggregator. The
table, its triggers and its hierarchy read generate; the
resolution-order function, the workspace FK validation function, the
trade-scope table and the row-level security stay hand-written.
workspace_create.sqlis the aggregator and states which includes the generator owns, so the split is readable in one file. - The Live workspace's lifecycle guard is recorded, not reimplemented. The canonical protocol makes archiving a put and deleting a window close, and the generated service has no seam for a rule the hand-written one enforced. It belongs to the workspace feature story.
- Rename the schema's ownership in the ignore list rather than in the
schema. The
validation_ignore.txtcomment claimed workspaces are tenant-independent; the schema has always carriedtenant_id, a version and RLS. The inert entries are removed and the comment now describes the two tables. - Build the shell part rather than take an exception for it. The
first pass disabled the
ores.cpp.shell-commandfacet and recorded S01 as an accepted exception, on the grounds that the generated units would land in a directory no build reaches. That described the tree and not the item: S01 asks for the units, and the part they need is the work.projects/ores.shell/workspacenow carries them, the entity's ten verbs run against the live fleet, and the component joins the registry with no exception.
7. Out of scope
8. Result
The component is generated, builds, tests, recreates its schema from scratch, is listed in COMPONENTS_UNDER_TEST, carries the namespace documentation headers G08 asks for, and cannot have its Live workspace archived or deleted.