Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
145e283
feat(OMN-10389): add market CLI output foundation
jonahgabriel Apr 30, 2026
b26d84f
feat(OMN-10398): add shared CLI argparse helpers
jonahgabriel Apr 30, 2026
4ff5079
feat(OMN-10399): retrofit ticket pipeline CLI outputs
jonahgabriel Apr 30, 2026
92bb575
feat(OMN-10400): add merge sweep CLI report outputs
jonahgabriel Apr 30, 2026
d069fcf
fix(OMN-10400): fan out merge-ready sweep track
jonahgabriel Apr 30, 2026
6d5d158
feat(OMN-10400): dispatch track b PRs to polish
jonahgabriel Apr 30, 2026
0703250
feat(OMN-10400): allow live polish fanout
jonahgabriel Apr 30, 2026
5f91228
feat(OMN-10400): add orchestrated merge sweep workflow proof
jonahgabriel Apr 30, 2026
b2256bd
fix(OMN-10400): extract workflow run id for CI reruns
jonahgabriel Apr 30, 2026
8638e9d
Merge branch 'main' into jonah/omn-10400-real-surfaces-cli-output
jonahgabriel Apr 30, 2026
d0b2faf
chore(OMN-10400): add deploy gate contract
jonahgabriel Apr 30, 2026
3bd91b8
test(OMN-10400): strengthen session orchestrator market baseline
jonahgabriel Apr 30, 2026
8f9d0d7
test(OMN-10400): allow merge sweep polish command reach-in
jonahgabriel Apr 30, 2026
f6408f7
test(OMN-10400): prove session orchestrator pattern b dispatch
jonahgabriel Apr 30, 2026
3046d6c
test(OMN-10400): prove session bootstrap pattern b dispatch
jonahgabriel Apr 30, 2026
591c718
test(OMN-10400): prove aislop sweep pattern b dispatch
jonahgabriel Apr 30, 2026
f1503b9
test(OMN-10400): prove merge sweep pattern b dispatch
jonahgabriel Apr 30, 2026
51183f0
fix(OMN-10400): harden orchestrated sweep polish routing
jonahgabriel Apr 30, 2026
429d71a
test(OMN-10400): prove pr polish pattern b dispatch
jonahgabriel Apr 30, 2026
a6a80e3
test(OMN-10400): prove local review pattern b dispatch
jonahgabriel Apr 30, 2026
8ff2d6a
test(OMN-10400): prove coderabbit triage pattern b dispatch
jonahgabriel Apr 30, 2026
4c1f107
test(OMN-10400): prove ticket pipeline pattern b dispatch
jonahgabriel Apr 30, 2026
c1abefe
Merge remote-tracking branch 'origin/main' into HEAD
jonahgabriel Apr 30, 2026
7c68399
fix(OMN-10400): harden merge sweep dogfood routing
jonahgabriel Apr 30, 2026
38d574d
refactor(OMN-10400): name codex runtime dispatch as adapter
jonahgabriel Apr 30, 2026
9cd16c8
feat(OMN-10400): add pr polish codex skill
jonahgabriel Apr 30, 2026
7139f5d
feat(OMN-10400): add local review codex skill
jonahgabriel Apr 30, 2026
5febf2e
feat(OMN-10400): add coderabbit triage codex skill
jonahgabriel Apr 30, 2026
3b73812
feat(OMN-10400): add ticket pipeline codex skill
jonahgabriel Apr 30, 2026
c81ba1c
test(OMN-10400): refresh market skill end-to-end baseline
jonahgabriel Apr 30, 2026
7cc974f
feat(OMN-10400): stream market skill proof output
jonahgabriel Apr 30, 2026
342284c
fix(OMN-10400): harden merge sweep runtime proof
jonahgabriel Apr 30, 2026
3a51d98
Merge remote-tracking branch 'origin/main' into jonah/omn-10400-real-…
jonahgabriel Apr 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions contracts/OMN-10400.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
schema_version: "1.0.0"
ticket_id: OMN-10400
title: "Dogfood orchestrated merge sweep workflow"
summary: "Add and verify the market-owned orchestrated merge sweep workflow proof surfaces and live CI rerun handling."
is_seam_ticket: true
interface_change: true
interfaces_touched:
- "public_api"
evidence_requirements:
- kind: "manual"
description: "Merge sweep triage and outcome classifier tests pass"
command: "uv run pytest tests/test_triage_orchestrator.py tests/test_triage_phase2_emit_rules.py tests/test_sweep_outcome_classify.py -q"
- kind: "manual"
description: "Merge sweep runtime CLI dogfood completes against omnimarket open PRs"
command: "uv run python scripts/run_orchestrated_merge_sweep_workflow.py --repos OmniNode-ai/omnimarket --execute"
- kind: "manual"
description: "Post-merge deploy smoke imports the orchestrated merge sweep workflow CLI in the runtime container"
command: "docker exec ${RUNTIME_CONTAINER:-omninode-runtime} python -c \"import scripts.run_orchestrated_merge_sweep_workflow as workflow; print(workflow.main.__name__)\""
emergency_bypass:
enabled: false
justification: ""
follow_up_ticket_id: ""
dod_evidence:
- id: "dod-001"
description: "Merge sweep triage and outcome classifier tests pass"
source: "manual"
checks:
- check_type: "command"
check_value: "uv run pytest tests/test_triage_orchestrator.py tests/test_triage_phase2_emit_rules.py tests/test_sweep_outcome_classify.py -q"
- id: "dod-002"
description: "Live orchestrated merge sweep dogfood completed against omnimarket PRs"
source: "manual"
checks:
- check_type: "command"
check_value: "uv run python scripts/run_orchestrated_merge_sweep_workflow.py --repos OmniNode-ai/omnimarket --execute"
- id: "dod-003"
description: "Post-merge deploy smoke imports the orchestrated merge sweep workflow CLI in the runtime container"
source: "manual"
checks:
- check_type: "command"
check_value: "docker exec ${RUNTIME_CONTAINER:-omninode-runtime} python -c \"import scripts.run_orchestrated_merge_sweep_workflow as workflow; print(workflow.main.__name__)\""
66 changes: 43 additions & 23 deletions docs/reference/2026-04-28-market-skill-baseline.json

Large diffs are not rendered by default.

104 changes: 11 additions & 93 deletions docs/reference/2026-04-28-market-skill-baseline.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
# Market Skill Baseline

Captured at: `2026-04-29T17:01:04.453020+00:00`
Baseline window: `2026-04-29` capture cohort; captured_at is the exact regeneration time.
Repo root: `<omnimarket>`
Stable reference for the market-owned skill baseline. Detailed execution transcripts are produced by `scripts/run_market_skill_baseline.py --stream`.

## Summary

Expand Down Expand Up @@ -38,17 +36,7 @@ Repo root: `<omnimarket>`
- CLI smoke summary: `{"dry_run": true, "findings_count": 118, "repos_scanned": 1, "status": "findings"}`
- CLI smoke notes: `findings are expected to exit non-zero; this still proves the node ran`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_aislop_sweep.py`
- Focused test output: `............. [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
13 passed, 2 warnings in 0.08s`
- Focused test targets: `tests/test_golden_chain_aislop_sweep.py, tests/test_codex_runtime_client.py::test_aislop_sweep_pattern_b_runs_node_end_to_end`

### pr_lifecycle_orchestrator

Expand All @@ -62,17 +50,7 @@ Repo root: `<omnimarket>`
- CLI smoke status: `pass`
- CLI smoke summary: `{"final_state": "COMPLETE", "prs_fixed": 0, "prs_inventoried": 0, "prs_merged": 0, "prs_verified": 0}`
- Focused tests: `pass`
- Focused test targets: `tests/unit/nodes/node_pr_lifecycle_orchestrator/test_main_cli.py, tests/test_golden_chain_pr_lifecycle_orchestrator.py`
- Focused test output: `............................... [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
31 passed, 2 warnings in 1.36s`
- Focused test targets: `tests/unit/nodes/node_pr_lifecycle_orchestrator/test_main_cli.py, tests/test_golden_chain_pr_lifecycle_orchestrator.py, tests/test_codex_runtime_client.py::test_merge_sweep_pattern_b_runs_pr_lifecycle_end_to_end`

### pr_polish

Expand All @@ -86,17 +64,7 @@ Repo root: `<omnimarket>`
- CLI smoke status: `pass`
- CLI smoke summary: `{"error_message": null, "final_phase": "done", "pr_number": 1}`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_pr_polish.py`
- Focused test output: `......... [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
9 passed, 2 warnings in 0.04s`
- Focused test targets: `tests/test_golden_chain_pr_polish.py, tests/test_codex_runtime_client.py::test_pr_polish_pattern_b_runs_node_end_to_end`

### local_review

Expand All @@ -110,17 +78,7 @@ Repo root: `<omnimarket>`
- CLI smoke status: `pass`
- CLI smoke summary: `{"current_phase": "init", "dry_run": true, "max_iterations": 10, "required_clean_runs": 2}`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_local_review.py`
- Focused test output: `......... [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
9 passed, 2 warnings in 0.04s`
- Focused test targets: `tests/test_golden_chain_local_review.py, tests/test_codex_runtime_client.py::test_local_review_pattern_b_runs_node_end_to_end`

### coderabbit_triage

Expand All @@ -134,17 +92,7 @@ Repo root: `<omnimarket>`
- CLI smoke status: `pass`
- CLI smoke summary: `{"blocking_count": 0, "dry_run": true, "suggestion_count": 1, "total_threads": 1, "unknown_count": 0}`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_coderabbit_triage.py`
- Focused test output: `............................ [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
28 passed, 2 warnings in 1.14s`
- Focused test targets: `tests/test_golden_chain_coderabbit_triage.py, tests/test_codex_runtime_client.py::test_coderabbit_triage_pattern_b_runs_node_end_to_end`

### session_bootstrap

Expand All @@ -158,17 +106,7 @@ Repo root: `<omnimarket>`
- CLI smoke status: `pass`
- CLI smoke summary: `{"crons_registered_count": 4, "dry_run": true, "status": "ready"}`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_session_bootstrap.py`
- Focused test output: `........................ [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
24 passed, 2 warnings in 0.05s`
- Focused test targets: `tests/test_golden_chain_session_bootstrap.py, tests/test_codex_runtime_client.py::test_session_bootstrap_pattern_b_runs_node_end_to_end`

### session_orchestrator

Expand All @@ -180,21 +118,11 @@ Repo root: `<omnimarket>`
- Inputs: `correlation_id, session_id, mode, dry_run, skip_health, standing_orders_path, state_dir, phase`
- Contract/model input match: `True`
- CLI smoke status: `pass`
- CLI smoke summary: `{"dispatch_queue_count": 0, "dry_run": true, "session_id": "sess-<redacted>", "status": "complete"}`
- CLI smoke notes: `smoke intentionally bypasses health probes to isolate the market-owned CLI path`
- CLI smoke summary: `{"dispatch_queue_count": 2, "dispatch_receipt_count": 2, "dry_run": false, "session_id": "sess-<redacted>", "status": "complete"}`
- CLI smoke notes: `smoke bypasses health probes and uses a deterministic Linear fixture to exercise Phase 2 scoring plus Phase 3 dispatch artifacts`
- CLI smoke stderr: `skip_health=True`
- Focused tests: `pass`
- Focused test targets: `src/omnimarket/nodes/node_session_orchestrator/tests/test_handler_session_orchestrator.py, tests/unit/test_handler_session_orchestrator_graphql.py`
- Focused test output: `.................................. [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
34 passed, 2 warnings in 10.62s`
- Focused test targets: `src/omnimarket/nodes/node_session_orchestrator/tests/test_handler_session_orchestrator.py, tests/unit/test_handler_session_orchestrator_graphql.py, tests/test_codex_runtime_client.py::test_session_orchestrator_pattern_b_runs_node_end_to_end`

### ticket_pipeline

Expand All @@ -209,14 +137,4 @@ Repo root: `<omnimarket>`
- CLI smoke summary: `{"compiled_dispatch": true, "phase_results_count": 3, "ran_phase": "local_review", "stop_reason": "not_implemented", "stopped_at": "blocked"}`
- CLI smoke notes: `bounded slice wires PRE_FLIGHT plus compile-only IMPLEMENT; LOCAL_REVIEW should block as not_implemented; stopped_at=blocked is a stop state`
- Focused tests: `pass`
- Focused test targets: `tests/test_golden_chain_ticket_pipeline.py`
- Focused test output: `.................. [100%]
=============================== warnings summary ===============================
<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.MessageMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

<frozen importlib._bootstrap>:488
<frozen importlib._bootstrap>:488: DeprecationWarning: Type google._upb._message.ScalarMapContainer uses PyType_Spec with a metaclass that has custom tp_new. This is deprecated and will no longer be allowed in Python 3.14.

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
18 passed, 2 warnings in 0.97s`
- Focused test targets: `tests/test_golden_chain_ticket_pipeline.py, tests/test_codex_runtime_client.py::test_ticket_pipeline_pattern_b_runs_node_end_to_end`
4 changes: 2 additions & 2 deletions plugins/onex/skills/aislop-sweep/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description: Thin Codex skill shim for node_aislop_sweep. Use when scanning Omni

# AI Slop Sweep

This skill is a thin Pattern B broker shim over the OmniMarket
This skill is a thin Codex runtime request adapter shim over the OmniMarket
`node_aislop_sweep` node. Collect arguments, dispatch the node, and render the
node result. Do not add scan logic, grep fallbacks, ticket logic, or
remediation logic to this skill.
Expand Down Expand Up @@ -35,7 +35,7 @@ If the user supplies a `runtime://...` target, add
`--target-runtime-address '<runtime-address>'` to the request command. If the
argument is omitted, the wrapper uses `ONEX_TARGET_RUNTIME_ADDRESS` when set.

For broker-free preflight, add `--compile-only`. This validates the payload,
For event-bus-free preflight, add `--compile-only`. This validates the payload,
command topic, response topic, correlation id, timeout, and target runtime
address without publishing to Kafka or starting a runtime.

Expand Down
75 changes: 75 additions & 0 deletions plugins/onex/skills/coderabbit-triage/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
---
name: coderabbit-triage
description: Thin Codex skill shim for node_coderabbit_triage. Use to classify CodeRabbit PR review threads through the OmniMarket runtime adapter.
---

# CodeRabbit Triage

This skill is a thin Codex runtime adapter shim over the OmniMarket
`node_coderabbit_triage` node. The node owns fetching review threads,
classifying CodeRabbit findings, acknowledging safe suggestions, and resolving
eligible threads. Do not add GitHub API calls, classification keywords,
reply text, or thread-resolution logic to this skill.

## Arguments

| Argument | Description | Default |
| --- | --- | --- |
| `repo` | GitHub repo slug such as `OmniNode-ai/omnimarket` | Required |
| `pr_number` | Pull request number to triage | Required |
| `correlation_id` | UUID v4 correlation id for the triage run | Generate when omitted |
| `dry_run` | Classify threads without replies or resolution | `false` |
| `target_runtime_address` | Optional `runtime://...` runtime target | Uses `ONEX_TARGET_RUNTIME_ADDRESS` when set |

## Dispatch

Run from the `omnimarket` repo or an `omnimarket` worktree:

```bash
env -u PYTHONPATH uv run python scripts/run_codex_runtime_request.py \
--command-name "coderabbit_triage" \
--payload '<json-payload>' \
--timeout-ms 120000
```

If the user supplies a `runtime://...` target, add
`--target-runtime-address '<runtime-address>'` to the request command. If the
argument is omitted, the wrapper uses `ONEX_TARGET_RUNTIME_ADDRESS` when set.

For event-bus-free preflight, add `--compile-only`. This validates the payload,
command topic, response topic, correlation id, timeout, and target runtime
address without publishing to Kafka or starting a runtime.

Build the payload with this shape:

```json
{
"repo": "OmniNode-ai/omnimarket",
"pr_number": 465,
"correlation_id": "<uuid-v4>",
"dry_run": true
}
```

Map user inputs into the same field names. Generate `correlation_id` when the
user does not supply one.

If `ok` is `true` and `output_payloads` is present, treat `output_payloads[0]`
as the primary node result.

If `ok` is `false`, surface `error.code` and `error.message` directly.

## Contract

- Backing node: `src/omnimarket/nodes/node_coderabbit_triage/`
- Codex adapter request wrapper: `scripts/run_codex_runtime_request.py`
- Command name: `coderabbit_triage`
- Runtime topic: `onex.cmd.omnimarket.coderabbit-triage-start.v1`
- Completion topic: `onex.evt.omnimarket.coderabbit-triage-completed.v1`

## Output

Prefer `output_payloads[0]`. Render `total_threads`, `blocking_count`,
`suggestion_count`, `unknown_count`, `resolved_count`, and a concise thread
summary with severity, matched keyword, and URL when present. For `dry_run`,
make clear that no replies or thread resolution were performed.
Loading
Loading