Skip to content

feat(OMN-19860): the delegate-skill terminal carries the lane and session that issued it (step 2) - #3161

Merged
jonahgabriel merged 1 commit into
devfrom
jonah/omn-19860-terminal-carries-caller-lane
Oct 1, 2026
Merged

jonahgabriel merged 1 commit into
devfrom
jonah/omn-19860-terminal-carries-caller-lane

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Ticket: OMN-19860 (delegation_events names the lane and session that issued each delegation), step 2 of the consumer-first order.

Cause

Step 1 (the response decodes caller_lane and session_id before declaring them, the projection stores caller_lane) is released since 0.4.253 and the dev lane runs 0.4.270. onex delegate already writes metadata.caller_lane and the request session_id. The delegate-skill handler never copied them onto the terminal, so the projection had nothing to store: on the lab dev lane 4 of 4,732 delegation_events rows carry a caller_lane, none of them from the onex delegate path (read-only psql, 2026-10-01T01:5xZ).

Change

  • ModelDelegateSkillResponse declares caller_lane (the ledger lane pattern) and session_id (canonical UUID string). Both are omitted from the wire when None, so an anonymous caller's terminal is unchanged. A non-UUID session is dropped, never refused, because it is attribution and must not dead-letter a terminal; the projection model keeps its UUID-typed override.
  • HandlerDelegateSkill._dispatch_and_build_terminal, the one stamping point OMN-19514 introduced for ticket_id, now stamps ticket, caller lane and session together, so every terminal (completed, refused, timed out, failed, runtime shutdown) carries them. A malformed lane is logged and dropped.

Verification

  • Red first: the new tests/unit/nodes/node_delegate_skill_orchestrator/test_delegate_skill_caller_identity_omn19860.py failed 18 of 23 before the change. Focused: it, the OMN-19514 ticket tests, the caller-lane projection tests and the OMN-15503/15469 seams, 69 passed.
  • Wire compatibility (OMN-18868) against the released consumer v0.4.270: WIRE_COMPAT_PASS for both changed wire models.
  • Lab: /omni:lab-run --via ssh --lane deleg-disposition --repo omnimarket --ref <this branch> placed on a lab pool host at sha 438681d: uv run pytest tests/unit/nodes/node_delegate_skill_orchestrator tests/unit/delegation plus the two quota seams, 2462 passed, 6 skipped, exit 0.
  • ruff and mypy --strict on the three changed sources pass; the commit ran the full pre-commit set.
  • Dev-lane readback after deploy: count(caller_lane) over rows written after the deploy by onex delegate --caller-lane <lane> must be non-zero, with the pre-deploy count (4) as the control.

Evidence-Ticket: OMN-19860
Evidence-Source: OCC#12044

…sion that issued it (step 2)

Step 1 (the consumer that decodes caller_lane and session_id before they are
declared) is released since omnimarket 0.4.253 and deployed on the dev lane
(0.4.270). onex delegate already writes metadata.caller_lane and the request
session_id, but the handler never copied them onto the terminal: on the lab
dev lane 4 of 4,732 delegation_events rows carry a caller_lane, none of them
from the onex delegate path.

- ModelDelegateSkillResponse declares caller_lane (the ledger lane pattern)
  and session_id (canonical UUID string; a non-UUID value is dropped, never
  refused, because it is attribution and must not dead-letter a terminal);
  both are omitted from the wire when None, so an anonymous caller's terminal
  is byte-identical to before
- HandlerDelegateSkill stamps ticket, caller lane and session at its one
  stamping point, so every terminal (completed, refused, timed out, failed,
  runtime shutdown) carries them; a malformed lane is logged and dropped
- the projection model keeps its UUID-typed session_id override

Onex-Lane: delegation-fix-delegation-events-no-caller-lane-83
Onex-Session: 15501d1a-5cfc-422b-a688-0ace6bfe0f21
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

✅ Architectural Review — PASSED

Errors: 0
Warnings: 0

What this checks

Rule Description
ARCH-TOPIC-001 No hardcoded Kafka topic strings in handler code
ARCH-DI-001 No event_bus=None bypass
ARCH-DI-002 No direct Handler instantiation outside workflow_runner/adapters
ARCH-DI-003 No reinvented DI containers
ARCH-TOPIC-002 contract.yaml topics follow `onex.{cmd

No architectural violations found.

Static architectural lint — no model inference (OMN-14176).

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown

✅ Hostile Reviewer — PASSED

Blocking findings (critical/error): 0
Total findings: 10
Models succeeded: qwen3-review,gpt-oss-review


Gate semantics

Verdict Meaning Blocks merge?
passed >=2 models succeeded, no critical/error findings No
blocked CRITICAL or ERROR findings found Yes
degraded Fewer than 2 models succeeded (infra unavailable/timeout) Yes (OMN-15110)

Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524)

@jonahgabriel
jonahgabriel enabled auto-merge (squash) October 1, 2026 03:22
@jonahgabriel
jonahgabriel merged commit 3ecd0d1 into dev Oct 1, 2026
243 of 268 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-19860-terminal-carries-caller-lane branch October 1, 2026 05:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant