== fresh clone 20260820-120748 == PASS: git clone --depth 1 -- file inventory -- PASS: exists plugins/visual-explainer/SKILL.md PASS: exists plugins/visual-explainer/quick/render.mjs PASS: exists plugins/visual-explainer/quick/schema.json PASS: exists plugins/visual-explainer/quick/base.css PASS: exists plugins/visual-explainer/quick/README.md PASS: exists plugins/visual-explainer/mcp/server.mjs PASS: exists plugins/visual-explainer/mcp/README.md PASS: exists plugins/visual-explainer/pptx/export.mjs PASS: exists plugins/visual-explainer/pptx/README.md PASS: exists plugins/visual-explainer/extension.ts PASS: exists README.md PASS: exists LICENSE PASS: exists CHANGELOG.md PASS: exists package.json PASS: exists .claude-plugin/marketplace.json PASS: exists .claude-plugin/plugin.json PASS: exists install-pi.sh -- quick renderer: valid spec, zero deps -- PASS: quick renderer valid spec exits 0 (no npm install) PASS: output html written PASS: output is a complete doctype document PASS: title rendered PASS: flow nodes rendered PASS: risk severity rendered PASS: table rendered PASS: css embedded (self-contained) -- known-bug probe: invocation via /tmp symlink alias (macOS) -- PASS: bug reproduced: /tmp alias invocation exits 0 but writes nothing (isMainModule compares non-canonical paths) -- quick renderer: determinism -- PASS: two renders byte-identical (md5 7c173c8a1648f0405fb80aa0015ff676) -- quick renderer: html escaping -- PASS: spec title html-escaped PASS: card title html-escaped PASS: body text escaped PASS: no raw injected script tag -- quick renderer: negative cases -- PASS: unknown key rejected with named error PASS: row/column mismatch rejected PASS: invalid tone enum rejected PASS: dangling flow edge rejected -- dep-requiring surfaces without npm install (documented behavior) -- PASS: mcp server fails cleanly without deps (README documents npm install first) PASS: pptx exporter fails cleanly without deps RESULT: 38 passed, 0 failed (fresh run 20260820-120748)