{
  "notes": "Episode 4. GOAL_ID 6fbd014c-a8f8-4b39-93ab-a37f88b7ec44. Spawn late-first-read recovery now; do not deal extra or final yet. No decision refusal in goal.json. The previous attempt failed on provider authentication, not judging methodology; this attempt completed the generator successfully.\n\nSOURCES: re-fetched and read PLAN.md and score.py from BASE=https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw. Scratch downloads are not delivered; fetch again next episode. SHA256: PLAN.md 8502ce210c7bcb7a068b04ad9bd85f56c8b0e0a1220273f9cf19338aab12505b; score.py 8ec148b0c9f6a7252f3fcb6d8dc8276842f95a0895c0531820ecaa98eb1acf5d; field.json 4e27aa515b7588fdb16e7df4eed8abcadb8baffb00562dbc382dd12404e11104. PLAN and score changed since episode 3; field unchanged. RUN.md and tryit.py also fetched, unchanged hashes. score.py uses the standard library, public goal/item/run APIs and hash-checked accepted result files; its saved statistics stay beside it in scratch.\n\nNEW PLAN PROVISION (numbered change 5, dated 00:12Z): score.py late gives two fresh reads to each plugin lacking a usable first read. Before final, score.py extra gives three deep seats to late arrivals now in the top 120, beside existing deep entrants. This supersedes episode 3's assertion that late first reads cannot reach round 3. Do not repeat that obsolete exclusion. Disclose the plan's five numbered methodological changes, plus its straggler rule, as changes during the run; the plan says the changes used whole-field numbers.\n\nSTATE: supplied goal.json has read1 147/147 accepted, 0 failed; read2 23/24 accepted, read2-e/read2-021 running. Deep-a..j accepted counts 5,5,4,5,5,6,5,5,4,6: 50/60 accepted, 10 running, no failures, waiting items, held items or pauses reported. No retries, resumes or cancellations warranted. Public API recheck at 2026-11-12T00:48:42Z: 51 deep accepted, 9 working; deep-52 has landed. Still working: deep-06,12,17,18,24,30,37,48,54 and read2-021. Deep spawned about 00:10Z, so neither 55 accepted nor 150 elapsed minutes has been reached. No real-time waiting on this machine.\n\nREAD1 CATCH-UP: read1/merge-05 now includes read1-083's ten entrants, all scored (raw totals: agent-latency-budget 17, hermes-ark 28, hermes-phone 26, assetrizz 23, hermes-guardian 24, pilot 22, privacy-shield 23, survey-desk 20, reset-rescue 22, aurora-design-system 16). These arrived after the original deep deal; let extra determine eligibility, never select manually. Merge-05 confirms read1-094 omitted solana-token-facts. Its source-recheck caveats include read1-083, so the narrative alone is not independent verification.\n\nRAN python3 score.py late 6fbd014c-a8f8-4b39-93ab-a37f88b7ec44, exit 0; stderr verbatim:\nlate: 11 plugins without a usable first read go to 4 fresh seats, two reads each\nSPAWN: read1-late (read1-late-001,002) and read1-late2 (read1-late2-001,002), stdout copied unchanged including brief, item vars, output json/32000 and merge groupSize 20. Each item reads 5 or 6 entrants plus both references; each entrant appears exactly twice, once in each batch. No peer scores supplied. Both batches are too small for canary holds or merging.\nThe 11: 150658 solana-token-facts; 150814 telegram-ops; 150900 ferry; 150929 vipernet-model-manager; 151482 openinvest-hosted; 152198 pr-ready-checker; 152418 thread; 152782 hermes-tape; 152879 understory; 153062 deck-diff; 153993 agent-webmcp. Ten had blocked first reads; one was omitted. Do not call them permanently unjudged until these attempts land. The hung read2 item remains eligible to contribute when it lands.\n\nHANDED RESULTS: read all 30 inputs (29 deep JSON results and read1 merge-05). Deep inputs contain 174 entrant assessments covering 103 distinct entrants, plus 2 unsolicited reference rows in deep-f/deep-31. All criteria are integers 1..5, all totals match U+R+P+C+2B, none is blocked. deep-31 ranked 8 including references, leaving entrant ranks 1,2,3,4,5,7. score.py filters pr=0 before comparisons; preserve the original result/order, never rewrite accepted scores.\nAll 29 setups report Hermes installed. deep-g/deep-38 says its scripted-model runner hung and claims catalog checks/tests only, not completed tool-call conversations. The other 28 report scripted Hermes execution, with individual service/device/installation limits. These counts concern only the handed subset, not all 60. Several seats adapted the harness or manually enabled profiles; successful calls do not prove fresh installation or real hardware/provider behavior. Preserve those caveats.\nDisagreements for eventual evidence review: deep-05 versus deep-55 on Lethe direct-file-write privacy coverage; deep-15 versus deep-19 on Omniscience credential-file access; deep-38 versus deep-21/43 on Sheets admission. deep-38's scanner finding prompt_injection_ignore in g1abc.json/g2.json alone does not prove an instruction aimed at judges; no explicit judge-steering allegation was found in supplied narratives. deep-26 gives agent-pool Reliable=1 for scanner evasion and unattended privileged provisioning. deep-04 reports Wear OS credential-file fallback; deep-39 reports Annotary credential-file reads. These are seat findings, not independently reverified facts. No discretionary rescore batch: follow the prescribed generator. The supplied snapshot flags source rechecks on 20 of 49 checked deep results; these are not automatic fabrication findings.\n\nBUDGET after this decision: 235/266 seats allocated, 31 left. Reserve 12 for final and up to 6 for extra, leaving at least 13 for permitted retries. Episode 4/20. Read requests use 30 slots: all 4 late items, read2-021, 25 previously unhanded deep items. Six original deep results remain outside these requests: deep-11,16,23,28,58,59; score.py still retrieves every accepted result directly. Wake on both new batches and the eight still-running original deep batches, afterMinutes 40. This schedules the next episode; it is not a wait here. finish=false.\n\nNEXT: fetch PLAN.md, score.py and field.json again and read changes. Do not re-deal read1/read2/deep or duplicate read1-late batches. Keep original deep-a..j assignments. Failed items may be retried once per batch with itemsFrom and the original brief/output/merge, preserving read1/read2/deep/final name prefixes; keep final/extra seats reserved. Resume held batches only when state warrants it. Distinguish failed items from blocked plugins inside accepted results.\nAdvance when original deep reaches 55/60 accepted OR 150 minutes since approximately 00:10Z (approximately 02:40Z), AND late batches have settled or run 40 minutes. Then run score.py extra GOAL_ID first. If stderr says too early, wake again; that empty spawn is not permission to skip recovery. If it reports no outside plugin qualifies, run final in the same episode. If it emits deep-x and possibly deep-y, spawn unchanged and wake; proceed to final after those settle or run 60 minutes. Do not duplicate already-dealt extra; inspect its settlement/time before final. Never choose late candidates yourself.\nRun score.py final GOAL_ID once eligible; copy its three batches unchanged (12 seats, 20 finalists), wake on every spawned batch with afterMinutes 40. Advance at 10/12 final seats, handling permitted retries. Then score.py done GOAL_ID; retain its exact table in notes and set finish=true for the separate write-up naming five places and five runners-up. Record every step's stderr and batch names. If score.py cannot reach api.imd.fun, spawn nothing and record the error for another seat. The final account must distinguish inaccessible entries, late recovery, installation/test limits and confirmed judge manipulation, without showing one judge another's scores.\n",
  "spawn": [
    {
      "name": "read1-late",
      "mode": "research",
      "brief": "Your batch: {{batch}}. Score these Hermes plugins on the objective's scale: {{plugins}}\nEach is \"pull request number, catalog name\"; ref marks a reference plugin already in the catalog that every seat scores, so give it pr 0. Find each one's repository, pinned commit and folder in https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json (its \"refs\" and \"plugins\" lists, matched on pr and name).\n\nHow:\n1. Work only inside test/scratch/ and leave nothing else but the result file. Start with one script that fetches each pinned commit there (git init, then git fetch --depth 1 REPO SHA) and lists its files.\n2. For each plugin, read its pull request (https://github.com/NousResearch/hermes-agent/pull/NUMBER), its README, its manifest (plugin.yaml or plugin.json) and the code that does the work: the tools, hooks or providers it registers, and its tests. Do not install or run it.\n3. Score it on the scale. Give each plugin about the same time, about six minutes.\n\nWrite the result with a script (json.dump), and again after every three plugins, so it is whole if your time runs out:\n{\"batch\": \"{{batch}}\", \"plugins\": [{\"pr\": 0, \"name\": \"catalog name\", \"does\": \"what it does, one sentence\", \"useful\": 0, \"reliable\": 0, \"polish\": 0, \"creative\": 0, \"beyond\": 0, \"total\": 0, \"best\": \"its strongest point, one sentence\", \"worst\": \"its weakest point, one sentence\", \"standout\": false, \"blocked\": null}]}\nOne entry per plugin, in the order given. standout is true only for a plugin you would put in the hackathon's top ten. blocked is null unless you could not read the plugin at all (its repository is gone, say); then it says why in one sentence and the scores are 0.",
      "output": {
        "format": "json",
        "maxBytes": 32000
      },
      "merge": {
        "groupSize": 20,
        "brief": "One table row per plugin of every item in your group: batch, pr, name and each number the item gives. Copy the numbers as the items give them and say which items were blocked."
      },
      "items": [
        {
          "key": "read1-late-001",
          "vars": {
            "batch": "read1-late-001",
            "plugins": "ref done-bell; ref homeassistant; 150814 telegram-ops; 152879 understory; 150900 ferry; 151482 openinvest-hosted; 152418 thread; 150929 vipernet-model-manager"
          }
        },
        {
          "key": "read1-late-002",
          "vars": {
            "batch": "read1-late-002",
            "plugins": "ref done-bell; ref homeassistant; 153062 deck-diff; 150658 solana-token-facts; 152782 hermes-tape; 152198 pr-ready-checker; 153993 agent-webmcp"
          }
        }
      ]
    },
    {
      "name": "read1-late2",
      "mode": "research",
      "brief": "Your batch: {{batch}}. Score these Hermes plugins on the objective's scale: {{plugins}}\nEach is \"pull request number, catalog name\"; ref marks a reference plugin already in the catalog that every seat scores, so give it pr 0. Find each one's repository, pinned commit and folder in https://gist.githubusercontent.com/gtmcknight/594c47336546c8763e641b46cf9af4ec/raw/field.json (its \"refs\" and \"plugins\" lists, matched on pr and name).\n\nHow:\n1. Work only inside test/scratch/ and leave nothing else but the result file. Start with one script that fetches each pinned commit there (git init, then git fetch --depth 1 REPO SHA) and lists its files.\n2. For each plugin, read its pull request (https://github.com/NousResearch/hermes-agent/pull/NUMBER), its README, its manifest (plugin.yaml or plugin.json) and the code that does the work: the tools, hooks or providers it registers, and its tests. Do not install or run it.\n3. Score it on the scale. Give each plugin about the same time, about six minutes.\n\nWrite the result with a script (json.dump), and again after every three plugins, so it is whole if your time runs out:\n{\"batch\": \"{{batch}}\", \"plugins\": [{\"pr\": 0, \"name\": \"catalog name\", \"does\": \"what it does, one sentence\", \"useful\": 0, \"reliable\": 0, \"polish\": 0, \"creative\": 0, \"beyond\": 0, \"total\": 0, \"best\": \"its strongest point, one sentence\", \"worst\": \"its weakest point, one sentence\", \"standout\": false, \"blocked\": null}]}\nOne entry per plugin, in the order given. standout is true only for a plugin you would put in the hackathon's top ten. blocked is null unless you could not read the plugin at all (its repository is gone, say); then it says why in one sentence and the scores are 0.",
      "output": {
        "format": "json",
        "maxBytes": 32000
      },
      "merge": {
        "groupSize": 20,
        "brief": "One table row per plugin of every item in your group: batch, pr, name and each number the item gives. Copy the numbers as the items give them and say which items were blocked."
      },
      "items": [
        {
          "key": "read1-late2-001",
          "vars": {
            "batch": "read1-late2-001",
            "plugins": "ref done-bell; ref homeassistant; 152879 understory; 151482 openinvest-hosted; 152782 hermes-tape; 150658 solana-token-facts; 152198 pr-ready-checker; 153993 agent-webmcp"
          }
        },
        {
          "key": "read1-late2-002",
          "vars": {
            "batch": "read1-late2-002",
            "plugins": "ref done-bell; ref homeassistant; 150900 ferry; 153062 deck-diff; 152418 thread; 150814 telegram-ops; 150929 vipernet-model-manager"
          }
        }
      ]
    }
  ],
  "read": [
    "read1-late/read1-late-001",
    "read1-late/read1-late-002",
    "read1-late2/read1-late2-001",
    "read1-late2/read1-late2-002",
    "read2-e/read2-021",
    "deep-a/deep-06",
    "deep-b/deep-10",
    "deep-b/deep-12",
    "deep-c/deep-17",
    "deep-c/deep-18",
    "deep-d/deep-22",
    "deep-d/deep-24",
    "deep-e/deep-29",
    "deep-e/deep-30",
    "deep-f/deep-34",
    "deep-f/deep-35",
    "deep-f/deep-36",
    "deep-g/deep-37",
    "deep-g/deep-40",
    "deep-g/deep-41",
    "deep-g/deep-42",
    "deep-h/deep-46",
    "deep-h/deep-47",
    "deep-h/deep-48",
    "deep-i/deep-51",
    "deep-i/deep-52",
    "deep-i/deep-53",
    "deep-i/deep-54",
    "deep-j/deep-57",
    "deep-j/deep-60"
  ],
  "cancel": [],
  "wake": {
    "batches": [
      "read1-late",
      "read1-late2",
      "deep-a",
      "deep-b",
      "deep-c",
      "deep-d",
      "deep-e",
      "deep-g",
      "deep-h",
      "deep-i"
    ],
    "afterMinutes": 40
  },
  "finish": false
}
