Story: Decommission ores.cli
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.cli and its round-trip dataset are gone. The shipped packages no longer carry a second command-line client that reaches the database directly and bypasses the service layer. ores.shell is the single supported command surface.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent sprint | Sprint 26 |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. The mop-up PR covers the last two tasks. |
| Last touched | 2026-09-26 |
3. Acceptance
projects/ores.cli/,doc/recipes/cli/,assets/test_data/domain_roundtrip/, andscripts/ore_domain_roundtrip_check.pyare gone, along with theore_coverageworkflow and theores.cliline inprojects/CMakeLists.txt.- A reference sweep over live paths returns no
ores.clihit. - The tree configures and builds, and
compass lintpasses with no dangling id link.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Delete the ores.cli component and its round-trip chain | DONE | 2026-09-23 | 2026-09-23 | Task for: Decommission ores.cli |
| Retire the orphaned ORE directory round-trip export | ABANDONED | 2026-09-26 | Closed unstarted. The method is kept and covered by a test over external/ore data; round-trip coverage over the real corpus is wanted, so retiring it would have removed the capability. | |
| Mop up the CLI references the decommission left | DONE | 2026-09-26 | 2026-09-26 | Task for: Decommission ores.cli |
| Cover the ORE directory round trip with a test over external/ore data | DONE | 2026-09-26 | 2026-09-26 | Task for: Decommission ores.cli |
| Clear the dead command-line and removed-component references | DONE | 2026-09-26 | Task for: Decommission ores.cli |
5. Decisions
- PR #2140 merged on 2026-09-23 as
388a90445f, after a rebase ontoddced912a5that resolved two conflicts with the Qt-remnant cleanup, indoc/meta/tag_inventory.organdprojects/ores.hpp. Two independent verifiers returned PASS+NOTES, one before the rebase and one after. The tag row forcliwas kept and marked retired, matching the convention the Qt removal had just set forqt. - Decommission instead of cleaning. The component passed the Component Clean Standard's automated half already, so a clean pass had no validator failure to fix. Its 125 test cases are 95% argument parsing, and the six that reach the database are covered better by the repository and importer suites. Every command surface it carries has a shell equivalent over the service layer.
- Delete the round-trip dataset rather than regenerate it. Only `ores.cli ore roundtrip` produced it. The CI job that compared it ran without `–strict` and listed `assets/**` in its paths-ignore, so it could not fail. `assets/test_data/golden_dataset/` is the dataset with teeth, enforced by 13 Catch2 suites.
- Delete the CLI recipes rather than rewrite them for the shell. `doc/recipes/shell/` already covers the same topics, and the shell recipes are tangled into the runnable script library.
- Keep the `ores_<env>_cli_user` database role and the `cli@system.ores` service account for now. The role is a developer psql login, and renaming it reaches provisioning across environments. Its justification is now historical.
- Drop bulk file import and export to the database. It was the one capability with no replacement, and no automated path called it.
- Keep the ORE directory round trip and test it, rather than retire it. The follow-up task assumed the method was dead once the CLI went. It is the only way to drive the whole import to export pipeline over the real corpus in one pass, and round-trip coverage over external/ore is wanted. The test now covers the walk, and it found that 17 of the 132 example documents are exported without a required child element and cannot be read back. That defect is tracked as its own capture.
6. Out of scope
- Collapsing `ores.service::run_host_sync`, which now has one caller.
- The Qt and Wt backlog residue. Those trees were removed by a separate change, and the sweep across roughly a hundred live captures belongs to that work rather than here. Only the lines this story touched were corrected.