Task: Restore the engine log work
Table of Contents
This page documents a task in the Prove the report grid run end to end — the remaining work story. It captures the goal, current status, acceptance, and any notes or results.
1. Goal
The engine's log is read by one parser in ores.ore, a node writes the canonical rows beside its results, and the service loads them, exactly as the stranded commits state, on today's tree.
2. Status
| Field | Value |
|---|---|
| State | DONE |
| Parent story | Prove the report grid run end to end — the remaining work |
| Now | Nothing. |
| Waiting on | Nothing. |
| Next | Nothing. |
| Last touched | 2026-10-28 |
3. Acceptance
- engine_log and its suite are in ores.ore.core, and the tree builds.
- A node writes the canonical log rows beside the result rows.
- The service loads a run's log rows through the canonical reader.
- Nothing is left only on feature/run-a-report-and-read-its-rows.
4. Plan
(Implementation strategy. Written when work starts; key decisions
are distilled into the parent story's * Decisions at close, but the
plan itself stays — it is the historical record of what we did.)
5. Measurements
Every number this task claims about a tree, with the command that produced it
and the commit it was measured at. A number without both is not a measurement,
because a clean-up record describes a tree and trunk moves under a branch: a
consumer count, a gate's component count and a suite's size all change with no
code changing, and the reader of a bare number cannot tell which tree it came
from. Where the raw output matters, put it in an evidence/ file beside the
task and name that file in the Command column.
| What | Value | Command | Commit |
|---|---|---|---|
| Files the branch changes against main | 33 | git diff --stat origin/main |
63b5356a76 |
ores.ore.core.tests |
passed, 27.72s | compass test run -- -R ores.ore.core.tests |
63b5356a76 |
ores.reporting.core.tests |
passed, 54.00s | compass test run -- -R ores.reporting.core.tests |
63b5356a76 |
ores.compute.core.tests |
passed, 28.05s | compass test run -- -R ores.compute.core.tests |
63b5356a76 |
| Test cases of the log reader | 6 | projects/ores.reporting/core/tests/results_canonical_log_reader_tests.cpp |
1458b3b1b5 |
6. Notes
7. Test Scenarios
Manual QA scenarios (scaffolded via compass add test_scenario)
that verify this task. Link
new ones here as they're created; the scenario doc itself links back
via its "Verifies task" field.
| Scenario | State | Notes |
|---|---|---|
8. PRs
| PR | Title |
|---|---|
| #4017 | [ore] Read the engine's log in one place and load it in reporting |
9. Review
| # | Comment summary | File | Decision | Notes |
|---|---|---|---|---|
| 1 | The writer quotes a newline but the reader splits records at every newline, so a multi-line message is lost; a carriage return is not a quote trigger | canonical_log_reader.cpp, engine_log.cpp | Accepted | The reader now splits records by the writer's rules and refuses a quote that never closes; the writer also quotes a carriage return. Six reader cases and two writer cases state it. |
| 2 | The JSON path can emit an empty message where the text path falls back to the line | engine_log.cpp | Accepted | The JSON path keeps its own line when the object states no message, and a case states it. |
| 3 | Dead assignments set the cause and the subject before the rules that overwrite them | engine_log.cpp | Accepted | Removed, along with the helper only they used. |
| 4 | The two parsers repeat the byte order mark, the line split, the blank skip and the carriage return trim | engine_log.cpp | Accepted | One for_each_line states those rules once. |
| 5 | Minor: the parenthesis reading is not documented, spare blank lines, and the doc comment names a parameter that does not exist | engine_log.cpp | Accepted | The limit is stated on the function, the spare lines are gone, and the parameter is named. |
10. Result
The three commits are restored on today's tree, one for each thing the stranded work did, and each one builds and passes its suite:
[ore] Read the engine's log in one placebringsengine_logand its suite intoores.ore.core.[compute] Write the engine's log beside a run's rowsgives the claim alogs_uriand the node its fifth grant, and the wrapper uploads the canonical rows the parser produces.[reporting] Load a run's log rows from the nodereads those rows through one reader, so the service never learns the engine's format.
Two faults were found while restoring and are fixed here. The claim's wording still said four objects, and the log reader read a doubled quote as two field boundaries, so a message that stated a quote lost it. The reader also had no suite; it has six cases now.
Nothing remains on feature/run-a-report-and-read-its-rows.