# GNN + LLM evidence-interface toy Actual execution: Python 3.12.14, NumPy 2.3.5, CPU float64. Python 3.11+ recommended for the pinned dependency. No PyTorch, GPU, external dataset, model checkpoint or API required. From article directory: ```bash python3 -m pip install -r code/requirements.txt python3 code/experiment.py python3 code/audit_results.py python3 -m py_compile code/experiment.py code/audit_results.py ``` The dependency-install command is for readers; NumPy was already available in this run. Execution used the bundled Python executable documented in verification.md. A rerun overwrites generated files in code/results/; copy that directory first if keeping several runs. ## What is implemented - Two-layer query-conditioned relation-gated sum message passing, 10 learned scalar parameters, stable BCE and analytic backpropagation. It is a deliberately small GNN, not G-Retriever's GraphTransformer. - Three seeds 75/76/77. Each has 256/64/128 graphs split before training; seed*10+[0,1,2] identifies split generation. Twelve nodes, two directed relations, independent p=.12 edges without self loops; 1,344 globally unique sampled graphs checked by adjacency bytes. - One source and one ordered relation pair per graph. Gold labels are the set of all reachable endpoints by exactly two typed edges, including returning to source if a two-edge cycle exists. Empty answers are retained. - 500 full-batch Adam steps, lr=.03, betas=.9/.999, eps=1e-8. No validation selection, early stopping, test tuning or threshold optimization. Node decision z>=0 is fixed; the dev split records loss only. - Counterfactual diagnostics reverse all edges or remove all edges at test time while freezing weights and original labels. These are not retrained, equal-capacity baseline comparisons. - Top-k=1/3/6/12 endpoint budgets. Stable ties use local node ID. `induced` keeps edges wholly inside source+candidate nodes; `bridge` keeps all source-outgoing edges and all candidate-incoming edges, regardless of relation. Both preserve original direction/type and do not consult gold. Edge budgets differ and are measured. - Deterministic reader executes exact typed two-hop traversal on supplied triples and restricts outputs to candidate IDs. It is NOT an LLM. Its absence of false positives follows from its symbolic construction. ## Outputs and safety of the evaluation boundary NPZ files contain graph arrays, source IDs, relation queries, labels, final weights and all diagnostic logits. JSON contains training/dev curves, gate probabilities, metrics, and all 3,072 evidence records. Only the nested `prompt` object is a potential future reader input; sibling `gold` is evaluation-only. Never give the entire record to an LLM. The prompt is structured data, not an evaluated chat template. Candidate IDs and triples are local to each graph. Micro-F1 pools TP/FP/FN across all queries within each seed. Set EM includes empty answers. Nonempty candidate recall averages per-query |candidates ∩ gold|/|gold| over nonempty gold only. Article table is the arithmetic mean of three within-seed metrics, not a single pooled score. Seed SD uses ddof=1 and is not a confidence interval. ## Checks and limits `experiment.py`: all 10 finite-difference gradients, finite outputs, duplicate graph rejection, consistent node relabeling of logits, full evidence reader upper-bound, zero unsupported answers. `audit_results.py`: no import from experiment; scalar forward replay and independently expressed two-edge enumeration, all gold labels, all metric denominators, rank/tie rules, exact expected evidence triples, no label field in prompt, aggregate mean/SD and a concrete missing-bridge witness. Original PCST retrieval, text embeddings, graph soft prompts, Llama training/inference and official benchmarks were NOT executed. Full official-repository compatibility and real LLM results remain 待人工核验. This toy architecture already encodes the correct two-hop function family; perfect ID performance is not evidence of general graph or language reasoning.