Story: Clean ores.http 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.http meets the Component Clean Standard: the items marked All and Protocol pass, each item that does not apply is recorded with its reason, and ores.http joins COMPONENTS_UNDER_TEST. Order 19 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. |
| Last touched | 2026-09-27 |
3. Acceptance
- Every checklist item that applies to this component 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.http is listed in
COMPONENTS_UNDER_TEST, andcheck_component_drift.py --allpasses.
4. Tasks
| Task | State | Start | End | Description |
|---|---|---|---|---|
| Bring ores.http to the clean standard | DONE | 2026-09-27 | 2026-09-27 | Work ores.http through the Component Clean Standard in order and record each item. |
| Verify session tokens at the gateway with IAM's key alone | DONE | 2026-09-27 | 2026-09-27 | The gateway authenticates HTTP sessions with a verifier that prefers IAM's published RS256 key and silently falls back to a symmetric HS256 secret it generates. The fallback is a second trust root, it authenticates nothing legitimate because the gateway never mints, and it masks a failed key fetch. Remove it, so the edge has one way of being believed, and document how the edge verifies on the security architecture page. |
5. Result
ores.http passes the Component Clean Standard and http-cpp is listed in
COMPONENTS_UNDER_TEST. Every All and Protocol item passes, every Entity
item is recorded as not applicable with its reason, and both generator
defects found are fixed at their source with a regression test.
The task carries the item-by-item record and its evidence. What this story
adds is the shape of the work. The component had no model at all, so it
gained a group overview over its six parts and codegen regained ownership
of its root CMakeLists.txt. Its one wire type was not modelled, so it now
generates both protocol twins, and its subject follows the naming every
other component uses. Its code sat in two disjoint outermost namespaces,
which are now one. And its diagrams, and variability's, now draw member
functions, which retired an accepted exception in another component.
A prior pass on this task was abandoned when the sprint 26 decomposition
landed. It worked against the pre-decomposition three-part shape and 593
commits reached main before this pass began, so it was not rebased; its
record is preserved by the tag archive/clean-http-pre-restructure.
6. Decisions
| # | Decision | Why |
|---|---|---|
| 1 | The pass covers all six parts, not the three hand-written ones. | The three adapter parts hold generated route units and their own overviews, so they are part of the component's shape. The Entity items apply to none of the six, because the component declares no entity, junction or operation model of its own. |
| 2 | The subject is renamed to http.v1.info.get. |
The model declares the subject now, and every other component names its subjects a component token, then the version, then the verb. The old http-server.v1.info.get was the only subject in the tree whose first token was not its component. |
| 3 | ores::http_server becomes ores::http::server. |
A component has one outermost namespace, and the split left this component's code in two. |
| 4 | The diagram capture is fixed rather than the diagrams massaged by hand. | Massaging was tried first and cannot work: a member declared below the sentinel attaches to nothing inside a nested namespace, and PlantUML draws a second, empty namespace instead. The same fix retires variability-cpp's accepted H01 exception. |
7. Out of scope
Recorded rather than done, each with its reason:
server/scripts/is not a folder in the signed-off folder catalogue.- The three adapter parts root their headers at
include/ores.http/rather thaninclude/ores.http.<part>/, so they share one include root named after their parent. coreandserverexpose no test target, and thirteen hand-written sources have no same-basename test.- The auth middleware skips its whole block when no authenticator is configured, and the server warns rather than refusing. It is already captured in the backlog as
authentication_is_optional_at_runtime_on_both_transports, which is a posture decision rather than a patch. - The other 77 of 94 components' diagrams still differ from what the fixed capture draws. Each gains its member functions when its own clean task refreshes it, which is the arrangement already recorded.
- The generated HTTP recipes carry no request body, so 57 of the 82 answer
400where the recipe asserts200. The fix belongs to theores.doc.http-recipefacet and its template, which is codegen work rather than component work; the defect is captured in the backlog ashttp_recipes_send_no_request_body.