{
  "name": "2naive/claude-telegram-topics — 5 hooks",
  "slug": "source-hooks-edd4fc9eb82da7424cf1e0de",
  "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 5 hook declarations. Ran 68 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; Stop; Stop; StopFailure"
  ],
  "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/2naive/claude-telegram-topics",
  "documentation_url": "https://github.com/2naive/claude-telegram-topics",
  "commit": "0ebb85035122d3eea5b04efcecaf0473b894fe36",
  "tree_sha256": "5b7d7d4be3fab4ff3227df60d1a4fd493b37051041c42bc663586ce99721e6da",
  "file_sha256": {
    ".claude-plugin/marketplace.json": "ad007c7a4096194ca9c54a258b5d3085c1b3bd1c4cae42283a535f2f8446a4ef",
    ".claude-plugin/plugin.json": "f333d6073fe0990685abe8c5ca61ec2320c7ff030d055842857c4b9eab4c420d",
    ".gitignore": "6ae81277b84bebda9c86404ac7d790825d0a5cb1d9c50067e00379b0a9940699",
    ".mcp.json": "0a3d8c91bb862666877adc201fe4750da0900bdb47348b796947268e3e9c0719",
    "CHANGELOG.md": "e699c8c05b6452b4637e084dc33b58acd9f1f7290e386a9cf09158ac42e81045",
    "LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
    "NOTICE": "33aa625b1ab42de8c44d6717d972ff0dadb4844938ead9980b9c953781397f6f",
    "README.md": "a3be18e8c368c148840f88320535726943aa1cf54a746dafb86cebb55f3c3d34",
    "bun.lock": "1310e6de9b424dfd511adc11165873434701af86a4966e770e7a44c004878781",
    "bunfig.toml": "6bae0141f0d453055990aa7a13c22db1166a4b484da79bf6db9a6d7ef0e9ea6f",
    "hooks/activity.ts": "5e0549bbdddc268e8e844139e7d2e5543d2dded6fc9b27dda02e3f903cc237ea",
    "hooks/hooks.json": "8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c",
    "hooks/mirror.ts": "3298b6072296058375d1e5426d13ada7ddb5422cb3eafe9d24bf4bc389af3a34",
    "hooks/port.ts": "f978eaf3179aef10fd99731909e8e9ebeddf179372b2cd4563aabc589f42fe1d",
    "package.json": "816b6bcb5ebd543aa9ef25b3370c61f3d132a6562e8d5dd9fb671913c0a3fff0",
    "scripts/allowlist.ts": "53e00fc04aed854272343148ce9b338a9a977a6cf63f1886aaed377594259cbe",
    "scripts/preflight.ts": "bafb2e46dcda9b1fdbe945115f7bd011d7e093fe3cdf8a6b3a5dd588cd3cb197",
    "skills/access/SKILL.md": "aee41b3084fd6d79d828ca85283fc2034e4181bab305d74b196ae3b05f4990a0",
    "skills/allowlist/SKILL.md": "9f612a7af072f43dc8e59710326bcd4ebb3204a53cd0890706730dc9fdd94246",
    "skills/configure/SKILL.md": "1b590230a85d0d8d213ef7a928c9d5024b6c8512111961550147a058a29b5dc3",
    "src/access.ts": "8d5d3a733759e894befa9da2abd45b94c827c40fcfc1cc79a0b5cb3b2e1726ea",
    "src/allowlist.ts": "49e03feb889f9a472214ac96f2ba8d42d9333204dd53b3050a62727d97ccc28b",
    "src/client.ts": "c031ee81ca4baab95c265ff3e707c5abb45073672bd7ca776890f5f9a196ccab",
    "src/clientlog.ts": "ec27ec90730c774345aa68694c15e578dda9fcef4430212dd4e5301cc2e46f4b",
    "src/config.ts": "366accff6c8972371b4076ef45fe40f4bfd4d24f5a06b9d088e00e8e0a0ca78d",
    "src/format.ts": "ad29d86822fc90fba8388c11a82ef7ea45f499a36579e28eaf43bdb06c9b37df",
    "src/held.ts": "0a6499525d447156873dc0ce8823751757c2946265385712d8029276606d2ba6",
    "src/inbox.ts": "a226314ef2c3830d12f06b1c66b631669ec06c90e5b278a55dd474bddc695d7a",
    "src/leader.ts": "bfe354da72214b03534f2da8773160d629feb3acf0e41ad345c7528fed62c8d3",
    "src/log.ts": "9936f922bab4498f5735a9ff8b86cdb85bf3ba7406ab178de105d656ac5348b0",
    "src/mirror.ts": "ea9af31eb708323bc82ad8c94c08f341d65e1cfaebc84637b889ef1ac4cfdcae",
    "src/paths.ts": "985141fd301f623bb1371e0b32ebba8d3b5a709daefbe4deda56afda3be7ee58",
    "src/pids.ts": "b2e30858a9e9c2cb79d257a2d46cfa63257116d60adcf734e5d6abed517f18e1",
    "src/project.ts": "dac446a0b680e14452127b7b56e76057b5f2ce095077dc6acb840b7d25cf4338",
    "src/projectkey.ts": "269e675a971501871e59b2f6aad0db976069f0e0738ed006846e2a1bee94ac10",
    "src/ready.ts": "c2e5678f3ebbaa353afbed4be1f6072c5c6f6116c93bbbcfd99d35691fbd3bec",
    "src/routing.ts": "e650eaf7ea9933cf04a033d5031b02a14ae078d53bea5cee97ddd66ce13a8e44",
    "src/sent.ts": "1579e7ac1f0f963b1151528c51a770b7915354b05eb9040cb11fbac028268a55",
    "src/server.ts": "c55d89ac86e81cdb1ca58a5716aab7bc67608af3d85ec9d9e60869c3119f9eec",
    "src/spawn.ts": "5cc619318f89ca5295e515609a9643528ef7fe458aa1f65ad8f4dad5c1e621ad",
    "src/tgretry.ts": "8d48bacdd5f535f1f2397c83616ea3c0f2f5ae225e3874cb457d7208104730f8",
    "src/topics.ts": "81676dd5fadde724ac57d6024cd7d551bee5ec1aa7000e235982446554a1c514",
    "src/transcript.ts": "f5adc195d332bb548e283df3bbfa933ad5280333723ae4a29ccb0a0d47e237fe",
    "test/access.test.ts": "37f09bb7b0a6130a4f2fcd719b529bd62f0af2caaed57a3b9de9d804df05da0b",
    "test/allowlist.test.ts": "64c5d50af93cc958803003876944c5d0e57401e7099c1a4e6cc1aba49f6cea7e",
    "test/config.test.ts": "cb6b02c77d21e1d4e8a49ed40daa2257c5e35490b1bc6bf06bf0a6c1b331e6f6",
    "test/format.test.ts": "4742f6e91a54bc180c34c5c85b5913516d75dc4eb789cf708d5ceffe1d7e0f49",
    "test/held.test.ts": "9142765cf113c8042ee318347eac269b45b47026e7ac2ea9c3d236df65722057",
    "test/hooks.test.ts": "e0681e94b3daab6433d39dbc207ea936df2b6a51bb2d9c5bbac8b0c66d784204",
    "test/inbox.test.ts": "7d5f0a56d3bf9bf2bbb08b08b863f4699327c3c35f74a7aff82e3ee21248cf77",
    "test/mirror.test.ts": "a334d3b21e531b45b4e6e250802a7c6da73056089cc7ce92da17a8d32c08b378",
    "test/paths.test.ts": "fe2251161e68d12609ae053dc2d9a44a1818bdc4b0b01e538b39f8eba27880a7",
    "test/pids.test.ts": "d64a426f00b703822564f38327d73066d5a36de3ff6eb024712b64075e6588b0",
    "test/preload.ts": "c4a07c1fb0a541726e0bc612dd124c7bf397a76ac52589e8f1831316ceeef382",
    "test/projectkey.test.ts": "832cadba1c671ba0a67ef0b7294facd7586cc7fb24c0f18bebd045ef5871ddbf",
    "test/ready.test.ts": "a678933ada8b4f9127552e924e66db77e21a480f2223b8315ef01a8ecbe2e679",
    "test/routing.test.ts": "87cdee1d459259cac1ae505ed8a8766718fadf3d16ca350df2c453269af40a87",
    "test/sent.test.ts": "5e09029001be55a83c16af8bc77e3c3732971e9b3fcb9804094876fca2aa851d",
    "test/spawn.test.ts": "fb936e3e925c1ea763fff0affa024b22a03ac5f49546a718244ac128f93b14ad",
    "test/tgretry.test.ts": "79855fb2e29ab45841bd2e94b525329170bf2f7cd70f563f2dd25a97d45d153e",
    "test/topics.test.ts": "cb805055772540d95f53f847856856549521dfa068cc2d81c7913eddd6281519",
    "test/transcript.test.ts": "072489b328d66bc1804d82f9b23890642cdfa8b421176d52267f18ab65387cdb",
    "tsconfig.json": "a0ddf88b0a56f3ecae8a8bb849c3d619238ca7fc6ebc3aa71176bf269c9d5e58"
  },
  "lockfiles": [
    "LOCK.json"
  ],
  "utc_date": "2026-10-23T03:22:29Z",
  "source_date": "2026-10-23",
  "discovered_date": "2026-10-23",
  "retested_date": "2026-10-23",
  "reviewed_date": "2026-10-23",
  "published_date": "2026-10-23",
  "modified_date": "2026-10-23",
  "reviewer": "machine pipeline",
  "harness_version": "toolwitness harness at commit a83c164149f42882acdd8d2c9d37da6195aca107",
  "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 68 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-23T03:22:29Z: pinned source inspection"
  ],
  "application": {
    "name": "2naive/claude-telegram-topics — 5 hooks",
    "softwareVersion": "0ebb85035122d3eea5b04efcecaf0473b894fe36",
    "applicationCategory": "DeveloperApplication",
    "operatingSystem": "Not exercised"
  },
  "artifacts": {
    "transcript": "Ran 68 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/access/SKILL.md\",\n        \"name\": \"access\",\n        \"description\": \"Manage who may drive telegram-topics sessions — view and edit the user allowlist. Use when the user asks to allow or remove a Telegram user, check who's allowed, or lock the channel down.\",\n        \"files\": {\n          \"skills/access/SKILL.md\": \"aee41b3084fd6d79d828ca85283fc2034e4181bab305d74b196ae3b05f4990a0\"\n        }\n      },\n      {\n        \"path\": \"skills/allowlist/SKILL.md\",\n        \"name\": \"allowlist\",\n        \"description\": \"Put this plugin on the Claude Code channels allowlist (managed settings) so `--channels` delivers inbound messages — one command, one admin prompt. Use when preflight reports NOT ALLOWLISTED, when Telegram messages never arrive in sessions although the send tools work, or when the user asks to set up the channels allowlist.\",\n        \"files\": {\n          \"skills/allowlist/SKILL.md\": \"9f612a7af072f43dc8e59710326bcd4ebb3204a53cd0890706730dc9fdd94246\"\n        }\n      },\n      {\n        \"path\": \"skills/configure/SKILL.md\",\n        \"name\": \"configure\",\n        \"description\": \"Set up the telegram-topics channel — save the bot token and forum group id, then run a preflight check. Use when the user pastes a Telegram bot token, asks to configure telegram-topics, asks \\\"how do I set this up\\\", or wants to check channel status.\",\n        \"files\": {\n          \"skills/configure/SKILL.md\": \"1b590230a85d0d8d213ef7a928c9d5024b6c8512111961550147a058a29b5dc3\"\n        }\n      }\n    ],\n    \"hooks\": [\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c\",\n        \"event\": \"UserPromptSubmit\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"bun \\\"${CLAUDE_PLUGIN_ROOT}/hooks/activity.ts\\\" start\",\n          \"timeout\": 15\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c\",\n        \"event\": \"PreToolUse\",\n        \"matcher\": \"*\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"bun \\\"${CLAUDE_PLUGIN_ROOT}/hooks/activity.ts\\\" working\",\n          \"timeout\": 15,\n          \"async\": true\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c\",\n        \"event\": \"Stop\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"bun \\\"${CLAUDE_PLUGIN_ROOT}/hooks/activity.ts\\\" idle\",\n          \"timeout\": 15\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c\",\n        \"event\": \"Stop\",\n        \"matcher\": null,\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"bun \\\"${CLAUDE_PLUGIN_ROOT}/hooks/mirror.ts\\\"\",\n          \"timeout\": 15\n        },\n        \"executed\": false\n      },\n      {\n        \"path\": \"hooks/hooks.json\",\n        \"sha256\": \"8e893b8a7b4731156ccb186b1c8515be67e1de39296619568452d28a4100418c\",\n        \"event\": \"StopFailure\",\n        \"matcher\": \"server_error|overloaded|rate_limit|authentication_failed|oauth_org_not_allowed|billing_error|invalid_request|model_not_found|max_output_tokens|unknown\",\n        \"declaration\": {\n          \"type\": \"command\",\n          \"command\": \"bun \\\"${CLAUDE_PLUGIN_ROOT}/hooks/activity.ts\\\" failed\",\n          \"timeout\": 15\n        },\n        \"executed\": false\n      }\n    ],\n    \"executions\": []\n  }\n}"
  },
  "review_input": {
    "identity_artifact": "identity.json",
    "evidence_sha256": {
      "LOCK.json": "1f40c0ab03feab36c245149eb2d71bd55002d34d7bea58492b5409f38503e925",
      "commands.json": "6edbced73e212f90e8048b3006ccb7b8daf5fbd7b2fb3a057766dadcfb20c6d2",
      "complete.json": "91b504b43905fdc009504d516c45eea831f39a1995b9e7d69987c9756c936d6f",
      "identity.json": "61ffcf2bf38c8299e32597eb1cc430efbd15815c94e86b0997d91bd30ec32ecb",
      "listing.json": "8224d73a8ec0a498f4ab63ce39bffc0a15c005e816dd675520ae365537db6483",
      "selection.json": "95bc815f2c1e74e399f0c4f61578ab4273e73e3ed422ddd88544c62443070656"
    },
    "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 5 hook declarations. Ran 68 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; Stop; Stop; StopFailure",
        "sources": [
          "LOCK.json",
          "listing.json",
          "commands.json"
        ]
      }
    ]
  },
  "review": {
    "kind": "machine-checked",
    "date": "2026-10-23",
    "reviewed_sha256": "f99c9d2473ec487b8e83393024298e79340cf11985cb1a3ed53a4b88eea35714",
    "gates": "1d5b25238e38fc3c74ad4d819ee73089f4c3acdf94658d8d6160ec406f5c2e92",
    "codex": "118e36b77b9025b49b4a7961643458e9d3f38e6980b5bae9174164545ad59239",
    "grok": "4c77bb09d26738668d3ce0e3e1d15b5a28f652cab6f40d9bba43e453248ec8d8",
    "summary": "Deterministic gates passed; every claim rebuilt from evidence with a reviewed template; Grok reported no standing refutation."
  }
}
