Purpose
-------
Unit tests for ``oct.core.workspace`` (F1, leanest first cut). The
loader validates the manifest schema and resolves subproject paths
relative to the workspace root; the discovery helper walks upward
to find the manifest.
Responsibilities
----------------
- Manifest validation: each malformed input produces a
:class:`WorkspaceError` with a useful message.
- Manifest happy path: valid input produces the expected
:class:`Workspace` with absolute, root-resolved subproject paths.
- ``find_workspace_root`` walks upward until it finds the manifest,
returning ``None`` when none exists.
Diagnostics
-----------
Domain: CORE-TESTS
Levels:
L2 -- test lifecycle
L3 -- assertion details