Skip to content

fix(mcp-apps): log a missing spool without a traceback - #15233

Merged
iamwhatever merged 2 commits into
kirodotdev:mainfrom
drakeo338:claude/15223-fix
Oct 3, 2026
Merged

iamwhatever merged 2 commits into
kirodotdev:mainfrom
drakeo338:claude/15223-fix

Conversation

@drakeo338

Copy link
Copy Markdown
Contributor

Problem / Motivation

Goal: A missing MCP-apps spool no longer writes a stack trace to the debug log.

load_claimed_row_groups logged "spool unreadable" with exc_info=True, so an absent spool (the normal state before any app has rendered) wrote a FileNotFoundError traceback on every rehydrate.

Why it matters

Debug logs fill with a misleading traceback for a healthy state.

Not a goal

  • Changing what is returned (still no groups) or how other spool errors are handled.

What changed (motivation → approach → change)

Dropped exc_info=True from that one debug call; the plain message stays and the function still returns [].

Backwards compatibility

Compatible: only the log record's traceback is removed.

Tests

test_a_missing_spool_logs_no_traceback fails on upstream/main and passes with the change.

Manual verification

N/A — unit coverage sufficient, the change is one log call.

Screenshots / video

N/A — no UI change.

Related Issues

Fixes #15223.

Pattern harvest

Not generalizable: a one-off exc_info=True on an expected-condition log line.

Checklist

  • At most two commits (one is the norm), with a Conventional Commits title (feat|fix|docs|style|refactor|perf|test|chore|ci|build|revert: ...)
  • Existing tests pass and new tests added for new functionality (only the new test was run, not the full suite)
  • Self-review completed; code follows project style guidelines
  • Documentation updated (if applicable)
  • No secrets, credentials, or internal references in the diff

Contribution License Agreement

N/A — the template has only an OSPO placeholder here.

@drakeo338
drakeo338 requested a review from a team as a code owner September 30, 2026 01:19
@github-actions github-actions Bot added fork Pull request from a fork (external contributor) readiness: action required A blocking check or review needs attention labels Sep 30, 2026
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

GPT 5.6 Review (fork) — ✅ no blocking findings

Reviewed 2ae0efe5b269e454e9c117a74487af956b64bd14 via the fork AI-review pipeline; updated in place on each push.

Review details

No findings.
[GPT-REVIEWED] 2ae0efe

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Design Review (Fable 5, fork) — ✅ PASS

Design-level review of 2ae0efe5b269e454e9c117a74487af956b64bd14 via the fork AI-review pipeline — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

Design-Verdict: PASS

Nothing to check.

[DESIGN-REVIEWED] 2ae0efe

Description read

[DESCRIPTION-READ] b87711ba8524e6dbf5faf65bfb8c1df0621155af16010dde89243b2e212fb30f

That sha256 names everything this verdict read: the PR description, plus the 1 evidence file(s) the workflow collected from it and handed this review. It covers that evidence because the media strip replaces every attachment URL with the same placeholder, so an edit swapping one attachment for another would leave the description's captured text identical while what this review judged changed. Recompute it with .github/scripts/pr-description-capture.sh over the same inputs; if it differs, the description or that evidence changed after this verdict was formed and any finding drawn from either is unproven.

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

First Principles Review (Fable 5, fork) — ✅ PASS

Premise-level review of 2ae0efe5b269e454e9c117a74487af956b64bd14 via the fork AI-review pipeline — why this exists and whether the shipped surface is the smallest honest version. Updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

First-Principles-Verdict: PASS

The missing-spool debug line's text changed from "spool unreadable" to "no spool" — confirm nothing greps logs for the old string on that path.

What this change ships

Inventory (3 items) — 1 justified

Intent: stop a healthy no-spool state writing a FileNotFoundError traceback to the debug log on every rehydrate — a FIX (issue #15223; the added test fails on base, where FileNotFoundError falls into the broad except OSError).

  1. A missing spool logs one plain debug line, no traceback — justified
  2. That line's wording changed from "spool unreadable" to "no spool" — undeclared ("the plain message stays" in the description; harm-free, debug-level)
  3. A new test pins that an unreadable spool still logs its traceback — rides along (pins the stated Not-a-goal; harm-free)

The fix sits at cause level: the broad except OSError conflating two states is what it splits. Sibling count: grepped exc_info=True in mcp_apps_render.py — 13 hits; the only other missing-file candidate (line 231) is pre-filtered by is_file() at line 207, so zero unfixed siblings.

[FIRST-PRINCIPLES-REVIEWED] 2ae0efe

Description read

[DESCRIPTION-READ] 61a9fc9f668dffb22a4f0669a33f679939154d48a1685df6d132f4c896adc159

That sha256 names the PR description this verdict read. Recompute it with .github/scripts/pr-description-capture.sh; if it differs, the description changed after this verdict was formed and any finding drawn from the description is unproven.

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Opus 5 Review (fork) — ✅ no blocking findings

Reviewed 2ae0efe5b269e454e9c117a74487af956b64bd14 via the fork AI-review pipeline; updated in place on each push.

Review details

No findings.

[OPUS-REVIEWED] 2ae0efe

@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention and removed readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running labels Sep 30, 2026
load_claimed_row_groups logged its "spool unreadable" debug line with
exc_info=True, so an absent spool, the normal state before any app has
rendered, wrote a FileNotFoundError stack trace on every rehydrate.
Log the plain message and keep returning no groups.
Split the spool-open handler: a missing spool (FileNotFoundError) logs the
plain debug line, while any other OSError such as EACCES keeps exc_info=True.
Pin both branches in tests.
@github-actions github-actions Bot added readiness: passed Eligible automated validation passed for the current revision and removed readiness: checking Automated validation is still running labels Oct 3, 2026

@iamwhatever iamwhatever left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed: a missing spool (the normal state before any app renders) now logs a plain debug line instead of a traceback, while an unreadable spool keeps its traceback. Both cases are tested. CI green.

@iamwhatever
iamwhatever enabled auto-merge (squash) October 3, 2026 06:01
@iamwhatever
iamwhatever merged commit 200a524 into kirodotdev:main Oct 3, 2026
100 checks passed
@github-actions github-actions Bot removed the readiness: passed Eligible automated validation passed for the current revision label Oct 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fork Pull request from a fork (external contributor)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

mcp-apps claim reconcile logs a full traceback at DEBUG for an expected missing spool folder on every session rehydrate

2 participants