Files
hermes-agent/tests
joaomarcos 2bb1d80bd9 test(api): cover the declared-conversation precedence through the real handlers
The review asked for "real handler + DB coverage for both precedence paths".
The first pass did not deliver that: TestBindFollowsPrecedence restated the
gate expression inside the test, so it asserted a copy of the rule rather than
the rule, and would have stayed green if the handlers stopped applying it.

These drive POST /v1/responses and POST /v1/runs over real routes with a real
adapter and a real SessionDB:

- the declared key selects and records the conversation, and the row it
  produces carries the key;
- three replies on one declared key land on one session id;
- an undeclared request keeps a per-request id and records nothing;
- a request carrying conversation A's previous_response_id plus a foreign
  header key settles on A, records nothing, leaves A's own key intact, and the
  foreign key still cannot recover A -- the end-to-end shape of the blocker;
- /v1/runs, which owns its agent lifecycle rather than routing through
  _run_agent, settles on the declared conversation, and an explicit body
  session_id outranks the header key without rebinding it.

The _run_agent stand-in creates the session row the way
AIAgent._ensure_db_session does and performs the bind the way _run_agent's
finally block does, so the assertions land on real rows instead of on a mock's
call args. /v1/runs is captured at _create_agent for the same reason.

The restated-gate tests are kept as the cheap unit layer beneath these.

Found in review by @andrexibiza, whose analysis located each of these
defects and specified what a correct fix had to prove.

Co-Authored-By: Andrex Ibiza, MBA <andrexibiza@gmail.com>
2026-09-01 02:14:35 -07:00
..