Skip to content

test(smoke): move moq-dev/smoke into test/smoke - #6046

Merged
kixelated merged 5 commits into
mainfrom
claude/smoke-monorepo
Oct 20, 2026
Merged

kixelated merged 5 commits into
mainfrom
claude/smoke-monorepo

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

Moves moq-dev/smoke (published-package interop smoke) into test/smoke/ so it lives next to the code it tests. Imported as a plain copy of smoke main at 66dd9f4, still its head (its open PRs, moq-dev/smoke#26 through moq-dev/smoke#30, moq-dev/smoke#50 and moq-dev/smoke#52, have not landed; they can be re-opened here); PRs here squash-merge, so a subtree merge would not have kept its history anyway.

What changes

  • test/smoke/: the harness (smoke.sh, relays.sh, cloudflare.sh, moxygen.sh, token.sh, freshness.sh, clients/, report/, justfile, smoke*.toml, README) with its own nested flake (nix develop ./test/smoke, or direnv inside the directory). Its toolchain floats on its own flake.lock, separate from moq's pins; the flake comment no longer claims no lock ships. CLAUDE.md + AGENTS.md merged into a nested test/smoke/AGENTS.md that keeps only the smoke-specific rules (the generic ones are moq's root rules). Its PROMPTING.md, .editorconfig (folded into the root one) and dependabot config are dropped; moq's dependabot already covers the workflow.
  • Latest-only policy kept: freshness.sh bans lock files under test/smoke/ only (it used to git ls-files the whole repo and would have tripped on moq's Cargo.lock/bun.lock/uv.lock); the nested .gitignore still ignores them. A nested rust-toolchain.toml (stable) keeps the cargo channel on the newest stable instead of moq's pinned toolchain.
  • Isolation from moq's tooling: clients/cloudflare is its own cargo [workspace]; Bun workspaces are an explicit list, so smoke's JS clients install standalone from npm (checked: local node_modules, root bun.lock untouched); test/tsconfig.json excludes smoke so tsc never type-checks the published-package clients against the in-tree @moq/*. Biome does lint them now: formatting plus four small HTML/regex fixes.
  • .github/workflows/smoke.yml: nightly at 08:00, workflow_dispatch, and pull_request/push path-filtered to test/smoke/** and the workflow, so ordinary moq PRs don't pay for the ~4 x 45-75 min matrix. Every step runs a just recipe (sh/gh/check-runs.ts), from test/smoke. No merge_group trigger, so the queue is unaffected.
  • Pages: the relay report moves to https://moq-dev.github.io/moq/relays/. moq has one Pages site (gh-pages, written by nightly's benchmark-site), so the new relays-report job commits only relays/ to gh-pages (report/publish.sh, reusing bench-publish.sh init), deploys the whole branch, and joins nightly's benchmark-pages concurrency group. Each writer touches only its directory, so neither deploy drops the other's pages. History seeds from /moq/relays/history.json.
  • Alerts: Smoke is added to alert.yml's watched list and its schedule-only cron set.
  • Cross-references: interop.yml, test/justfile, test/interop/{README.md,interop.sh} and two quests now point at test/smoke. just test smoke [recipe] [args] runs any smoke recipe inside the nested shell.

Maintainer follow-ups after merge

  1. Enable GitHub Pages on moq-dev/moq (Settings, Pages, Source: GitHub Actions). It is off today (/repos/moq-dev/moq/pages is 404, and no gh-pages branch exists yet), so both this deploy and nightly's benchmark-site deploy fail until it is on.
  2. Carry the 60-run history over once: dispatch Smoke on main with history_url=https://moq-dev.github.io/smoke/history.json before the first nightly publishes.
  3. Then archive moq-dev/smoke and point its README/Pages here.

The nix cell pushes moq HEAD builds to cachix when the CACHIX_AUTH_TOKEN secret is present (moq has it for cachix.yml), as smoke did.

Public API / wire impact

None. Test harness and CI only.

Validation

  • just check (moq root, branch scope) and just gh check (actionlint, alert coverage, recipe-only steps): pass.
  • nix develop ./test/smoke --command just check (shfmt, shellcheck, actionlint, freshness): pass.
  • just test smoke (Rust-only matrix through the nested shell, published moq-relay/moq 0.17.7 from cargo install --locked via RELAY_BIN/MOQ_BIN): rust -> rust [moq-lite-06] PASS.
  • report/publish.sh against a local bare remote: creates gh-pages when absent, replaces relays/ (stale logs removed) and leaves an existing bench/ intact.
  • The Smoke workflow runs on this PR via its path filter.

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 4 commits October 19, 2026 21:41
Verbatim copy of https://github.com/moq-dev/smoke/tree/66dd9f4 into
test/smoke/, adapted to the monorepo in the following commits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adapt the imported moq-dev/smoke harness to test/smoke: its own nested
flake and stable toolchain, a lockfile ban scoped to the directory, the
Cloudflare client outside the cargo workspace, a path-filtered Smoke
workflow, and the relay report published under /relays/ on moq's single
gh-pages site.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 4 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 910ca6e2-9b15-4d5e-b456-e0edb1a64f94
📥 Commits

Reviewing files that changed from the base of the PR and between 6f0ff0b and 602d837.

⛔ Files ignored due to path filters: 1
  • test/smoke/flake.lock is excluded by !**/*.lock
📒 Files selected for processing: 57
  • .editorconfig
  • .github/workflows/alert.yml
  • .github/workflows/interop.yml
  • .github/workflows/nightly.yml
  • .github/workflows/smoke.yml
  • quest/m1/smoke-moxygen.md
  • quest/m2/release/catalog-readers.md
  • test/interop/README.md
  • test/interop/interop.sh
  • test/justfile
  • test/smoke/.envrc
  • test/smoke/.gitignore
  • test/smoke/AGENTS.md
  • test/smoke/README.md
  • test/smoke/clients/c/CMakeLists.txt
  • test/smoke/clients/c/subscribe.c
  • test/smoke/clients/cloudflare/Cargo.toml
  • test/smoke/clients/cloudflare/src/main.rs
  • test/smoke/clients/docker/moq
  • test/smoke/clients/docker/moq-relay
  • test/smoke/clients/go/go.mod
  • test/smoke/clients/go/smoke.go
  • test/smoke/clients/js-native/package.json
  • test/smoke/clients/js-native/subscribe.ts
  • test/smoke/clients/js/build-esbuild.ts
  • test/smoke/clients/js/diagnostics.test.ts
  • test/smoke/clients/js/diagnostics.ts
  • test/smoke/clients/js/driver.ts
  • test/smoke/clients/js/index.html
  • test/smoke/clients/js/jsdelivr/index.html
  • test/smoke/clients/js/jsdelivr/setup.js
  • test/smoke/clients/js/package.json
  • test/smoke/clients/js/src/main.ts
  • test/smoke/clients/js/vite.config.ts
  • test/smoke/clients/kotlin/build.gradle.kts
  • test/smoke/clients/kotlin/settings.gradle.kts
  • test/smoke/clients/kotlin/src/main/kotlin/Main.kt
  • test/smoke/clients/python/smoke.py
  • test/smoke/clients/swift/Package.swift
  • test/smoke/clients/swift/Sources/smoke/main.swift
  • test/smoke/clients/token/js/package.json
  • test/smoke/clients/token/js/resolve-bin.mjs
  • test/smoke/cloudflare.sh
  • test/smoke/flake.nix
  • test/smoke/freshness.sh
  • test/smoke/justfile
  • test/smoke/moxygen.sh
  • test/smoke/relays.sh
  • test/smoke/report/build.sh
  • test/smoke/report/index.html
  • test/smoke/report/publish.sh
  • test/smoke/rust-toolchain.toml
  • test/smoke/smoke-legacy.toml
  • test/smoke/smoke.sh
  • test/smoke/smoke.toml
  • test/smoke/token.sh
  • test/tsconfig.json
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 01d30e130b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

# c / c-pkgconfig / c-cmake: same libmoq client built three ways, to
# exercise the moq.pc and CMake-package consumer paths, not just -I/-L.
subs="rust,python,go,kotlin,c,c-pkgconfig,c-cmake,gst,$browser,$native"
if [ "$RUNNER_OS" = "macOS" ]; then subs="$subs,swift"; fi

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Run the Swift subscriber in nightly CI

Because every active matrix entry uses Ubuntu, this condition is never true, so the newly imported Swift client is not installed or exercised by any scheduled or PR run. A broken moq-swift release or Swift interoperability regression can therefore leave the nightly workflow green; keep at least one macOS lane active or add a separate nightly Swift job.

AGENTS.md reference: AGENTS.md:L27-L27

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Declining here: the macOS cells (the only Swift runner) were disabled on purpose in moq-dev/smoke to cut CI spend, and this PR moves the harness without changing its coverage. Re-enabling them is the maintainer's budget call; it's uncommenting the matrix entries.

(Written by Claude Opus 5.5)

🤖 Addressed by Claude Code

Comment thread test/smoke/smoke.sh
Comment on lines +783 to +786
[[ "$status" -eq 134 ]] || return "$status"
echo "warning: moq-rs subscriber aborted during teardown; retrying once" >&2
RUST_BACKTRACE="${RUST_BACKTRACE:-1}" run_client "$PY" "$CLIENTS/python/smoke.py" \
subscribe --url "$URL" --broadcast "$broadcast" --timeout "$TIMEOUT"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Treat a Python subscriber abort as the cell result

When the published Python subscriber receives media and then exits with SIGABRT, this retry can make the cell pass on its second invocation, hiding the packaging/runtime failure the smoke suite is meant to report. The first failed exchange should remain red rather than being replaced by a fresh connection.

AGENTS.md reference: test/smoke/AGENTS.md:L11-L12

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid against smoke's own no-retry rule, but this retry predates the move and removing it may turn the nightly red on a known moq-rs teardown abort. That needs the abort reproduced and fixed at its source, so it goes in its own PR rather than this verbatim move.

(Written by Claude Opus 5.5)

🤖 Addressed by Claude Code

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up: #6064 (stacked on this branch) removes this retry, keeping this PR a verbatim move.

(Written by Claude Opus 5.5)

Comment on lines +131 to +133
if (!reloaded && Date.now() - start > timeoutMs / 2) {
reloaded = true;
await page.reload({ waitUntil: "load" }).catch(() => {});

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fail the browser cell instead of reloading it

If the published watch element loses its initial catalog subscription with RESET_STREAM, reloading halfway through creates a second subscription and can turn that real early-subscription failure into a green cell. This masks a user-visible timing regression whenever the subscriber starts before the publisher announcement; report the first exchange as failed instead of retrying it.

AGENTS.md reference: test/smoke/AGENTS.md:L11-L12

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid: the reload hides @moq/watch giving up on a catalog subscribed before the announce, which players should instead wait out. It predates the move, and fixing it means fixing @moq/watch and then deleting the reload, so it goes in its own PR rather than this verbatim move.

(Written by Claude Opus 5.5)

🤖 Addressed by Claude Code

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follow-up: #6064 (stacked on this branch) removes this retry, keeping this PR a verbatim move.

(Written by Claude Opus 5.5)

Comment thread test/smoke/token.sh Outdated
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-20T05:13:40.193267Z 01d30e1 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

The negative pass minted the unrelated key with the verifier under test and
only warned when that failed, so a verifier could pass without ever being
shown a foreign key. Mint it with the canonical generator, which just worked,
and fail the cell otherwise.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

  • Verbatim move of moq-dev/smoke into test/smoke, plus the monorepo wiring described above.
  • Codex review of 01d30e1: the token wrong-key finding is fixed in 602d837; the macOS/Swift lane is left as smoke had it (a CI budget call); the Python abort retry and browser reload are removed in test(smoke): drop the Python abort retry and the browser reload #6064, stacked on this branch. The 602d837 push drew no new review, so the earlier one covers it.
  • Local checks on 602d837: just check (branch scope) and nix develop ./test/smoke --command just check pass. The Smoke workflow passed on this PR.
  • After merge: enable GitHub Pages, carry the relay history over, and archive moq-dev/smoke (see the PR body).

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 20, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Oct 20, 2026
@kixelated
kixelated added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 8fe62e0 Oct 20, 2026
11 checks passed
@kixelated
kixelated deleted the claude/smoke-monorepo branch October 20, 2026 21:03
kixelated added a commit that referenced this pull request Oct 20, 2026
Align the audit with main's benchmark and smoke replans (#6081, #6046,
#6022): the trend site is now the m0 regression table plus m2 benchmark
sources, so the audit's m2/bench-site edits fold into m0/bench-site (the
unprovisioned git.moq.dev HTTPS certificate) and its links retarget there.
catalog-readers stays deleted, and the compile-time audit takes main's
recorded baselines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated added a commit that referenced this pull request Oct 21, 2026
test/smoke/flake.lock arrived with the smoke suite (#6046) without update coverage; its nixpkgs dates from May. It gets its own entry so a toolchain bump, which must carry the matching playwright pin, never blocks the root flake.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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