Skip to content

Full live QA suite against the test account - #38

Merged
jthingelstad merged 1 commit into
mainfrom
claude/live-qa
Oct 5, 2026
Merged

jthingelstad merged 1 commit into
mainfrom
claude/live-qa

Conversation

@jthingelstad

Copy link
Copy Markdown
Owner

Adds scripts/live_qa.py. Run it with gh workflow run live-smoke.yml -f suite=full; the weekly schedule still runs the quick smoke.

Coverage

  • Reads:
    • whoami, profiles, guide;
    • timeline with --before, --since and check; mentions, photos, discover and its collections;
    • user show, following, discover, is-following, muting, blocking;
    • lookup of users and posts; conversation;
    • blog posts, categories and search; post list, drafts and replies.
  • Formats and pipelines: agent and human output for a set of commands; timeline | lookup posts -; usernames with comments piped to lookup users -; poll stopping on Ctrl-C.
  • Refusals: out-of-range counts, unknown formats, unknown users, missing posts, edits off the selected blog, bad checkpoint names, and bare mb auth without a terminal.
  • Local state: checkpoint set, get, list and clear; heartbeat, inbox and catchup advancing; over MCP, checkpoint_ack applying and then being idempotent; the read-only server refusing post_create and checkpoint_ack; verbose reads.
  • CLI posts on the test blog:
    • dry run;
    • titled draft with a category, then the same operation ID again (same post), then that ID with different content (refused);
    • empty edit refused; edit;
    • stale source hash refused; publish to the new URL; second publish refused; edit after publishing;
    • receipts; delete, then the post reads as gone;
    • direct posts and short posts.
  • Profiles: mb --profile qa auth - from stdin; both profiles listed.
  • The quick smoke and MCP write cycle run first. A final sweep deletes every mb live smoke post, and the sweep now fails when it can't list the blog's posts instead of passing silently.

It does not run social writes (follow, mute, block, reply) or media uploads.

The suite input reaches the shell through an env var, not template interpolation. Timeout raised to 30 minutes.

🤖 Generated with Claude Code

Dispatch with suite=full to run scripts/live_qa.py against the test
account: every read command in each format, pipelines, poll, refusal
paths, checkpoints and checkpoint_ack, a second profile, and the CLI
post lifecycle with a final sweep of test posts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 5, 2026 •

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-05T21:58:29.035836Z 6fe8e5e 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.

@jthingelstad
jthingelstad merged commit f9af52a into main Oct 5, 2026
12 checks passed
@jthingelstad
jthingelstad deleted the claude/live-qa branch October 5, 2026 21:56

@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: 6fe8e5e70b

ℹ️ 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".

Comment thread scripts/live_qa.py
Comment on lines +93 to +95
def cli_reads() -> tuple[str, str]:
me = data(cli("whoami")).get("username", "")
cli("profiles")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Include mb blogs in the full suite

When suite=full, the workflow runs live_qa.py instead of live_smoke.py, but this read sequence never invokes mb blogs; that command remains only in live_smoke.main(), which is not called by the full script. Consequently, the supposedly comprehensive pre-release run can pass even if the blogs command is broken, so add it to cli_reads() or otherwise run the quick-smoke checks as part of the full path.

AGENTS.md reference: AGENTS.md:L368-L368

Useful? React with 👍 / 👎.

Comment thread scripts/live_qa.py
Comment on lines +164 to +168
lines = [line for line in out.splitlines() if line.strip()]
parsed = all(_is_json(line) for line in lines)
step(
"poll emits JSON lines and stops on ctrl-c",
parsed and "Traceback" not in err,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Require poll to emit at least one successful event

If poll exits or crashes cleanly before writing stdout, lines is empty and all(...) evaluates to true; the check also ignores the child return code. The full QA suite therefore reports that polling emitted JSON and stopped correctly even when it produced no events at all. Require a nonempty line list and a successful post-interrupt exit before passing this step.

AGENTS.md reference: AGENTS.md:L368-L368

Useful? React with 👍 / 👎.

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