{
  "name": "chrisryugj/fable-ish — 6 hooks",
  "slug": "source-hooks-a1ee288f7c7808661bb3fd47",
  "type": "hooks",
  "category": "developer-tools",
  "example": false,
  "evidence_state": "pinned_source_listing",
  "stamp": "Pinned source listing — machine-checked",
  "summary": "Pinned source declarations and file hashes were listed.",
  "outcome": "Listed 6 hook declarations. Ran 30 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
  "rule_results": [
    "The retained source tree matches its acquisition manifest.",
    "Declared hook names (listing.json): UserPromptSubmit; PreToolUse; PermissionRequest; PostToolUse; PostToolUseFailure; Stop"
  ],
  "task": "What declarations and files are present in this pinned source?",
  "setup": "Git blob acquisition followed by static source inspection.",
  "limitations": "Scope: acquisition and static inspection. Command results: commands.json.",
  "source_url": "https://github.com/chrisryugj/fable-ish",
  "documentation_url": "https://github.com/chrisryugj/fable-ish",
  "commit": "b03a5fa479a3843df2ec07b4c1b665253474c346",
  "tree_sha256": "c6c96154096bf1cef8921669d4311248173884a475e6e942978f4c6f650f25c5",
  "file_sha256": {
    ".claude-plugin/marketplace.json": "065b745bd5fe600472e467a05830ef2494dd3e0effac979e8e1db52c66a9ff40",
    ".claude-plugin/plugin.json": "2d6cb8b0ddebb4fb290dedeea179f275ef469b602670adefc20284f5b8ae0c09",
    ".gitignore": "57d30df34ee55576b381f6e2fe06e2a405e306791ff72518bbd88afd665e377f",
    "CHANGELOG.md": "2b42c745fb0430315d3332c56f8d5674205a4ef56b81ae42406b569db92d6a11",
    "LICENSE": "d39c6aab0562dca40c4ce25bed9269e00faa818dbd645e96c2f20b4027c89f40",
    "LICENSE-APACHE-2.0": "0c21bba57c408f1db622eec3c8d23966a2be08723f0e9070fe5494ed840fd72d",
    "NOTICE": "9ae889867a3469bfa75bdeb3dbf3e8c93234f9499204db02f96587e1ca2964b4",
    "README-EN.md": "65ae81b1f69d210abd94c040662eb95ad56fd716b4162d091cac626cf86ddf54",
    "README.md": "2059930f568663beefc95abe23e2cca8688e45adbab243c7d2711abc9e75ae0a",
    "examples/claude-permissions.example.json": "525f17222fd9416176ca184db9f82e8caf1ba2ab33d67bfef7a123ed8be5e1f6",
    "hooks/hooks.json": "c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787",
    "hooks/permission_request.py": "89ca777c914c5fcaacdac39e25199fd053bfabda4d47d81ab1325d75ab0386c7",
    "hooks/post_tool_use.py": "d438e2d5246d582c31739c68dea54511a62353fff437367a793e6226c075ee83",
    "hooks/pre_tool_use.py": "1cd95622f39cf619be293789786d4bad42d1fab357653fc124cd7ac4264f9aa2",
    "hooks/stop_gate.py": "65ea38a2dd1afcc969088cb26259ed35b46ad3c5d12fa50634830da4069dfd4d",
    "hooks/user_prompt_submit.py": "f5b59029f4127bb23a41aa5a3a7cb20acf667d07ac4bcf396cbee8e0d3bda5f1",
    "scripts/classify_task.py": "a7541145add91982db26ef53480f165be29468f825f125aab2dc9d1cc73a3aec",
    "scripts/ledger.py": "20e04c0093589eb90fc4f727d5be74edb33ec17a85501bcb9c8fe7a824d0e890",
    "scripts/parse_tool_result.py": "e8ee8fcb4b7b81cd9bdf7860b1e2b21f6fd81f0cb476fa285972df847060c01a",
    "scripts/verify_state.py": "e7c2d904f9ee9f075bceeb7a6074949d53e43ea31e9f925d4d299fefb96fe23f",
    "skills/fable-ish/SKILL.md": "e3d9743e3b63ce0e9ab038f7d509da9b06ff89c2b4f6b5d0839d8743d3cde0ba",
    "skills/fable-ish/references/final-report.md": "c2081429dd9c7e1fdeccf13068236ca7d165f06918094601cfbfd7022e244e4a",
    "skills/fable-ish/references/verification.md": "f65bd7ce9563efb926024df86ccbe984965b9b29891727fe9dffc4b6a7d3178b",
    "skills/fable-ish/references/workflow.md": "d4e741cf4ee4cd8a7664ae30f2bac2dc594967886215a5b4f382c88c98a7ea51",
    "tests/test_hooks.py": "ccff405306eed6d94132c1759c7f1fb12c32327f1d8538f3e98fa4d79f310ccf"
  },
  "lockfiles": [
    "LOCK.json"
  ],
  "utc_date": "2026-10-22T12:15:50Z",
  "source_date": "2026-10-18",
  "discovered_date": "2026-10-18",
  "retested_date": "2026-10-22",
  "reviewed_date": "2026-10-22",
  "published_date": "2026-10-22",
  "modified_date": "2026-10-22",
  "reviewer": "machine pipeline",
  "harness_version": "toolwitness harness at commit 4b91f622fc862623dc2b1347f87cac9fa4b08bf9",
  "claude_code_version": "Not applicable: static source inspection (commands.json).",
  "model_id": "Not applicable: static source inspection (commands.json).",
  "scanner_version": "Not applicable: static source inspection.",
  "rulepack_version": "Not applicable: static source inspection.",
  "agents": [],
  "disclaimer": "This record lists declarations and file hashes from a pinned source tree. Git command results from acquisition and static inspection are retained in commands.json. Scope: acquisition and static inspection. It is not a security or quality verdict. Changed bytes are outside this record.",
  "commands": [
    "Ran 30 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection."
  ],
  "prompt_list": [
    "Not applicable: static source inspection (commands.json)."
  ],
  "history": [
    "2026-10-22T12:15:50Z: pinned source inspection"
  ],
  "application": {
    "name": "chrisryugj/fable-ish — 6 hooks",
    "softwareVersion": "b03a5fa479a3843df2ec07b4c1b665253474c346",
    "applicationCategory": "DeveloperApplication",
    "operatingSystem": "Not exercised"
  },
  "artifacts": {
    "transcript": "Ran 30 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
    "sinkhole_log": "Not applicable: static source inspection (commands.json).",
    "canary_log": "Not applicable: static source inspection (commands.json).",
    "scanner_output": "Not applicable: static source inspection (commands.json).",
    "normalized_text": "{\n  \"listing\": {\n    \"skills\": [\n      {\n        \"path\": \"skills/fable-ish/SKILL.md\",\n        \"name\": \"fable-ish\",\n        \"description\": \"Apply fable-ish verification discipline to Claude Code coding tasks with risk-proportional workflow, review, and final reporting. Use for fable-ish requests, common typo fablish, complex implementation, debugging, refactoring, deployment preparation, or work where completion needs observable evidence. Do not use for simple explanations or quick low-risk answers unless explicitly requested.\",\n        \"files\": {\n          \"skills/fable-ish/SKILL.md\": \"e3d9743e3b63ce0e9ab038f7d509da9b06ff89c2b4f6b5d0839d8743d3cde0ba\",\n          \"skills/fable-ish/references/final-report.md\": \"c2081429dd9c7e1fdeccf13068236ca7d165f06918094601cfbfd7022e244e4a\",\n          \"skills/fable-ish/references/verification.md\": \"f65bd7ce9563efb926024df86ccbe984965b9b29891727fe9dffc4b6a7d3178b\",\n          \"skills/fable-ish/references/workflow.md\": \"d4e741cf4ee4cd8a7664ae30f2bac2dc594967886215a5b4f382c88c98a7ea51\"\n        }\n      }\n    ],\n    \"hooks\": [\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"UserPromptSubmit\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/user_prompt_submit.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Classifying fable-ish task\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"PreToolUse\",\n        \"matcher\": \"^(Bash|PowerShell|Edit|Write|MultiEdit|NotebookEdit)$\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/pre_tool_use.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Checking fable-ish guardrails\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"PermissionRequest\",\n        \"matcher\": \"^(Bash|PowerShell|Edit|Write|MultiEdit|NotebookEdit)$\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/permission_request.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Checking fable-ish approval guardrails\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"PostToolUse\",\n        \"matcher\": \"^(Bash|PowerShell|Edit|Write|MultiEdit|NotebookEdit)$\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/post_tool_use.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Recording fable-ish evidence\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"PostToolUseFailure\",\n        \"matcher\": \"^(Bash|PowerShell|Edit|Write|MultiEdit|NotebookEdit)$\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/post_tool_use.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Recording fable-ish failure evidence\"\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"c3a9dbfb039239e4d087a4af652399ee2aae49af0d8fbf83878ee2c5b07cb787\",\n        \"event\": \"Stop\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"python3 \\\"${CLAUDE_PLUGIN_ROOT}/hooks/stop_gate.py\\\"\",\n          \"timeout\": 10,\n          \"statusMessage\": \"Reviewing fable-ish completion\"\n        },\n        \"executed\": false\n      }\n    ],\n    \"executions\": []\n  }\n}"
  },
  "review_input": {
    "identity_artifact": "identity.json",
    "evidence_sha256": {
      "LOCK.json": "7fb4fdd7f10be1dfa97cf0901cf5126da0ce879fda48c8101ff17f5d762865af",
      "commands.json": "b97f7aece873385a6d609bca27b1e8c3164f501e2e0b679fb0c9d09b19d8ff47",
      "complete.json": "91b504b43905fdc009504d516c45eea831f39a1995b9e7d69987c9756c936d6f",
      "identity.json": "93c7f177cf2720a8e2a76717d3c0338791649b7ea8d7522e8af43ee8d1446958",
      "listing.json": "a11bd67c18280822c61f60bdfa4c07943b73653ee9a2bb19fa0451afdc643660",
      "selection.json": "ccf828bfb228c7004d3f7277b8472bde4aebcf8265dc58fe96c05b4d28ca0b91"
    },
    "claims": [
      {
        "id": "acquired",
        "field": "summary",
        "text": "Pinned source declarations and file hashes were listed.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "listed",
        "field": "outcome",
        "text": "Listed 6 hook declarations. Ran 30 git commands; each one's exit status and output hash is in commands.json. Scope: acquisition and static inspection.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "tree",
        "field": "rule_results.0",
        "text": "The retained source tree matches its acquisition manifest.",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      },
      {
        "id": "declared",
        "field": "rule_results.1",
        "text": "Declared hook names (listing.json): UserPromptSubmit; PreToolUse; PermissionRequest; PostToolUse; PostToolUseFailure; Stop",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      }
    ]
  },
  "review": {
    "kind": "machine-checked",
    "date": "2026-10-22",
    "reviewed_sha256": "abc673b58e71c80a89d335e8e0b311b24531e99893097aec2c0a869a7a995af3",
    "gates": "d68b0893b84eadd24f0fcb4b283ba66ac6a984cdcdd5e11b530dc0403085eeea",
    "codex": "64a4f01121900ad5491e00226fa2a763a5c7fa29d41c2d9114d35b3521f83159",
    "grok": "1ab114567f56b810568aef465cddb0a77d60a4c761254734683ca21d29d7b2b7",
    "summary": "Deterministic gates passed; every claim rebuilt from evidence with a reviewed template; Grok reported no standing refutation."
  }
}
