{"bench":"Verity SCOPED RE-BENCH — Eclipse Legacy Recon at the NARROWED claims (owner disposition NARROW: narrow to bench-observed scope, no fourth fix round). Product at bb7eb3e (pushed, ls-remote verified by builder; HEAD re-verified by bench). Canonical scope note: CLAIM-SCOPE.md in tree. Battery: 30 bench checks, 30 pass, 0 fail (2 initial harness artifacts — W7 scratch-dir perms, W9 substring grep — adjudicated and re-run first-hand, see notes). Builder suite re-run first-hand: 97/97 OK (88 + 9 claims-lint), smoke OK. Cards -1..-10 stand unaltered; manifest retains FAILED + card -10 — narrowing is not a verdict rewrite (verified M6).","bench_date":"2026-10-26","bench_footprint":"All probes in /tmp/verity-lr-narrow (fresh trees, engine-copy for the nobody run); product tree untouched — git status clean at bb7eb3e before and after. No product code fixed by bench; no catalog changes.","card":"eclipse-legacy-recon-mcp-2026-10-26-11.json","checks":[{"evidence":"eng.DESCRIPTOR contains 'NARROWED OBSERVED SCOPE' + 'CLAIM-SCOPE.md' + 'not an exhaustive or universal JS/TS claim'","id":"M1","name":"descriptor carries NARROWED OBSERVED SCOPE marker","verdict":"pass"},{"evidence":"recon_scan/architecture_map/dependency_risk_list/modernization_inputs claim_scope deep-equal to eng.CLAIM_SCOPE and to initialize serverInfo.claim_scope","id":"M2","name":"all 4 outputs + serverInfo carry IDENTICAL claim_scope","verdict":"pass"},{"evidence":"status=NARROWED_TO_OBSERVED_SCOPE, version narrowed-observed-scope/2026-10-26.1, withdrawn = all 9 machine names incl. JS_TS_MULTILINE_BLOCK_COMMENT_CONTINUATION_AFTER_SPLIT_NO_CLOSE_SPAN and JS_TS_CHAINED_NO_CLOSING_SLASH_REGEX_SPANS_ON_ONE_LINE","id":"M3","name":"claim_scope withdrawn names W1/W2 machine names (+ all W1-W9)","verdict":"pass"},{"evidence":"manifest claim_scope withdrawn == engine withdrawn (ordered), supported == engine supported, version equal; CLAIM-SCOPE has ### W1..W9 sections with all 9 names in the Withdrawn section; README names (W1)..(W9) and 'scoped positive inventory, not an exhaustive inventory'","id":"M4","name":"README/manifest/CLAIM-SCOPE state the same W1-W9 boundary","verdict":"pass"},{"evidence":"'Every claim cites its evidence' / 'Every claim cites a file path': zero hits in README, manifest description/status/tagline, DESCRIPTOR, and all 4 tool descriptions; CLAIM-SCOPE quotes them only as identified historical wording inside its Mechanical re-bench contract section (2 hits)","id":"M5","name":"former universal phrases absent from all claim positions","verdict":"pass"},{"evidence":"bench.bench_verdict=FAILED, bench.certified=false, scorecard_ref=...-10.json, status states 'scoped re-bench pending'","id":"M6","name":"manifest retains FAILED + card -10 (no verdict rewrite)","verdict":"pass"},{"evidence":"python3 -m unittest discover -s tests: Ran 97 tests OK; smoke.py: SMOKE OK","id":"M7","name":"builder suite + smoke re-run first-hand","verdict":"pass"},{"evidence":"stdio subprocess: wire claim_scope deep-equals engine CLAIM_SCOPE; exactly 4 tools, every description carries NARROWED OBSERVED SCOPE","id":"M8","name":"wire: initialize/tools-list/tools-call carry marker + identical claim_scope","verdict":"pass"},{"evidence":"fresh nested-template trees: ghosts ghost-nest-fresh/ghost-nest2/ghost-nest-ts NOT minted; real-nest-pkg + real-nest-ts caught. observed=['real-nest-pkg','real-nest-ts']","id":"B1","name":"inside fence: nested templates (JS+TS)","verdict":"pass"},{"evidence":"multiline split-brace import (JS), single-line-brace import + split-brace export (TS) all caught: observed=['split-brace-fresh','split-brace-ts','split-brace-export']","id":"B2","name":"inside fence: split-brace imports (JS+TS)","verdict":"pass"},{"evidence":"/[/]from 'ghost-cc-fresh'/, /[a/b]+ require('ghost-cc2')/g, /x[/]y from 'ghost-cc-ts'/ mint nothing; real-cc-pkg + real-cc-ts caught","id":"B3","name":"inside fence: regex character classes (JS+TS)","verdict":"pass"},{"evidence":"line-leading spans after unterminated expressions mint nothing (ghost-asi-fresh/ghost-asi-ts absent); real-asi-pkg + real-asi-ts caught","id":"B4","name":"inside fence: ASI line-leading positions (JS+TS)","verdict":"pass"},{"evidence":"return x / \"from 'ghost-kd-fresh'\", throw y / `from 'ghost-kd-ts'`, typeof thing / 'require(\"ghost-kd3\")' mint nothing; real-kd-pkg/real-kd-ts/real-kd3-pkg caught","id":"B5","name":"inside fence: keyword-spelled division + string/template tails","verdict":"pass"},{"evidence":"card-10 class with fresh ghosts: lexer still mints w1-ghost-fresh (JS) + w1-ghost-ts (TS) — the withdrawn behaviour itself; the SAME outputs carry claim_scope status NARROWED_TO_OBSERVED_SCOPE with W1 machine name in withdrawn and supported_claim 'OBSERVED is not exhaustive'. No silent full-strength presentation: no output surface exists without claim_scope (M2/M8). Scored as labelling per brief, not accuracy.","id":"W1","name":"withdrawn W1 split-span comment continuation — LABELLED","verdict":"pass"},{"evidence":"chained-span shapes mint w2-ghost-fresh (JS) + w2-ghost-ts (TS) as at card -10; same-output claim_scope names W2 withdrawn. Labelled, not silent.","id":"W2","name":"withdrawn W2 chained no-close spans — LABELLED","verdict":"pass"},{"evidence":"B-LR-14 family shape mints w3-ghost-fresh; real-w3-pkg caught; claim_scope names W3 withdrawn in the same output.","id":"W3","name":"withdrawn W3 invalid-line identifier-follow — LABELLED","verdict":"pass"},{"evidence":"JS two-require line yields w4-first-js only; Python comma list yields w4firstpy only — the documented per-line recall limit; claim_scope names EXHAUSTIVE_OBSERVED_RECALL withdrawn, supported_claim states OBSERVED is not exhaustive.","id":"W4","name":"withdrawn W4 exhaustive recall — LABELLED non-exhaustive","verdict":"pass"},{"evidence":"import('w5-dyn-static'), import(someVar), import('w5-dyn-ts') produce NO OBSERVED entries; unknowns contain no 'dynamic' entry; reals caught; claim_scope names W5 withdrawn.","id":"W5","name":"withdrawn W5 dynamic imports — not observed, no dedicated UNKNOWN, labelled","verdict":"pass"},{"evidence":"a.mts/b.cts produce no OBSERVED entries (w6-mts-pkg/w6-cts-pkg absent), files still counted (file_count=3), real .ts import caught; claim_scope names W6 withdrawn.","id":"W6","name":"withdrawn W6 .mts/.cts — no extraction, labelled","verdict":"pass"},{"evidence":"ADJUDICATED after harness fix (scratch ancestors were 2770, nobody could not traverse — harness artifact, re-run clean): as user nobody, chmod-000 subtree omitted silently (file_count=1, truncated=false, obs=['w7toppkg']) — exactly the B-LR-7 shape; the same output carries claim_scope naming PERMISSION_DENIED_SUBTREE_COMPLETENESS withdrawn. No completeness claim is presented anywhere in the output.","id":"W7","name":"withdrawn W7 permission-denied subtree — no completeness claim, labelled","verdict":"pass"},{"evidence":"BOTH documented branches reproduced fresh: (a) loop->'.' resolvable loop is reported in symlinks[] (escape=false) and skipped, output labelled; (b) loop1<->loop2 unresolvable pair aborts with named refusal TARGET_PATH_INVALID ('symlink loop1 cannot be probed') — the exact exception CLAIM-SCOPE W8 documents. Neither branch presents a silent complete scan.","id":"W8","name":"withdrawn W8 self-referential symlink loops — documented outcomes only","verdict":"pass"},{"evidence":"fresh tree: escape_link -> /etc flagged escape=true, inner_link reported, target content never read, w8brealpkg observed.","id":"W8b","name":"supported: ordinary symlinks reported, escape flagged","verdict":"pass"},{"evidence":"ADJUDICATED: first-pass substring grep hit the word 'socket' in 2 B-LR-11 code COMMENTS only (the same lexical artifact card-10 L1 adjudicated); import-level grep for socket/urllib/requests/http.client in recon_engine.py + server.py = zero hits. tools/list = exactly the 4 local tools; no hosted/auth surface exists.","id":"W9","name":"withdrawn W9 hosted/auth/multi-tenant — local stdio only","verdict":"pass"},{"evidence":"dependency_risk_list on fixtures/legacy-tree: risks carry rule_id citations; UNPINNED_VERSION present for unpinned declared dep.","id":"R1","name":"regression: legacy fixture EOL + UNPINNED_VERSION","verdict":"pass"},{"evidence":"fresh modern tree (django 5.1, python 3.12): zero rule_id risks; only RUNTIME_PINNED informational entry.","id":"R2","name":"regression: modern pinned tree — NO EOL claims","verdict":"pass"},{"evidence":"Card -10's only fails were X1 (= W1+W2 classes) and X4 (= W4 per-line recall, standing non-gating). Both are withdrawn by name and scored above as labelling checks (W1/W2/W4). NO original failing shape falls inside the narrowed scope; every in-scope card-10 check was pass and is re-covered by M7 suite + R1/R2 + B/P batteries.","id":"R3","name":"regression split: card-10 fails map 1:1 onto withdrawn classes","verdict":"pass"},{"evidence":"fresh tree: PIL in OBSERVED; Pillow INFERRED with basis 'import root PIL maps to distribution Pillow via built-in mapping table'; Pillow in neither OBSERVED nor DECLARED.","id":"P1","name":"Python: PIL OBSERVED -> Pillow INFERRED with basis","verdict":"pass"},{"evidence":"freshonlymod OBSERVED-only; freshdeclared (requirements.txt) DECLARED-only; neither leaks into the other list.","id":"P2","name":"Python: import-only vs manifest-only separation","verdict":"pass"},{"evidence":"import-shaped text in comment, plain string, f-string, same-line docstring, raw triple-quoted string: zero ghostpy* OBSERVED; realpyfresh caught.","id":"P3","name":"Python: fresh phantom shapes mint nothing","verdict":"pass"},{"evidence":"every entry carries its own source_class label matching its list; lists never blended.","id":"P4","name":"Python: DECLARED/OBSERVED/INFERRED separation integrity","verdict":"pass"}],"checks_failed":0,"checks_passed":30,"checks_total":30,"defects":[],"environment":"local","history":"append-only; prior runs retained in results/","notes":["VERDICT BASIS: at the narrowed scope the claim set is exactly what the bench record supports. Mechanical consistency is airtight (M1-M8): one claim_scope object, byte-identical across all 4 tool outputs and serverInfo, on engine and wire; README/manifest/CLAIM-SCOPE state the same W1-W9 boundary; the former universal phrases survive only as identified historical wording inside CLAIM-SCOPE's own re-bench contract; the manifest still records FAILED at card -10 — the narrowing changed the claims, not the history.","INSIDE-FENCE PERFORMANCE (B1-B5): every bench-exercised family named in the brief performs AS CLAIMED with fresh shapes — nested templates, split-brace imports, regex character classes, ASI line-leading positions, keyword-spelled division with string/template tails — ghosts not minted, reals caught, JS+TS(+TSX via suite). The lexer was not changed by the narrowing (bb7eb3e is a claims commit); in-scope behaviour is the card-10-verified behaviour, re-proven here on fresh names/forms.","WITHDRAWN-CLASS DISPOSITION (W1-W9): W1/W2/W3 shapes still mint at the lexer level (expected — no fix round was run, by owner disposition) and W4/W7 still exhibit their documented recall/completeness limits; in every case the output that carries the result also carries the structured claim_scope naming the class withdrawn — there is no silent full-strength surface. W5/W6 hold behaviourally (nothing observed, nothing claimed). W8 reproduces both documented branches. W9: no hosted surface exists. Fence = label-don't-refuse, exactly as CLAIM-SCOPE's Runtime fence choice states.","NOVELTY: at the narrowed scope the evidence-bound limb is now TRUE as claimed — positive reports only, evidence/basis carried, DECLARED/OBSERVED/INFERRED separation re-proven on fresh trees (P1-P4, incl. PIL->Pillow INFERRED with mapping basis). The card-10 universality condition is not failed but WITHDRAWN — the claim no longer asserts it. N-check passes at the narrowed scope; renamed-verb limb unchanged from card -10 (pass).","HARNESS ADJUDICATIONS (2, both bench-side, neither a product defect): W7 first attempt failed because the /tmp scratch ancestors were mode 2770 (this VM's default) and user nobody could not traverse them — re-run with clean permissions reproduced the documented shape and labelling. W9 first attempt substring-grepped 'socket' into 2 code comments — import-level grep is clean; identical artifact to card-10's L1 adjudication.","Local scope: read-only static recon over bench /tmp trees; stdio transport; no hosted surface in v0.1 (W9). U1-analogue na by construction: stdio has no credential layer (process-ownership boundary)."],"qualifier":"local","scope_sentence_context":"The sentence above is eng.CLAIM_SCOPE.supported_claim verbatim — it is the exact sentence the listing may carry, together with the status marker 'NARROWED OBSERVED SCOPE (CLAIM-SCOPE.md)' and the W1-W9 withdrawn machine names. Listing copy must not restore any universal or exhaustive phrasing (notably not 'Every claim cites its evidence' / 'Every claim cites a file path'), must not present the withdrawn classes W1-W9 as supported, and must retain the pointer to CLAIM-SCOPE.md as the controlling boundary.","scope_sentence_exact":"Positive DECLARED, OBSERVED, and INFERRED reports only within CLAIM-SCOPE.md, with evidence or basis carried in the output; OBSERVED is not exhaustive.","tool":"eclipse-legacy-recon-mcp","verdict":"CERTIFIED","verdict_full":"CERTIFIED(local) at the narrowed scope — Eclipse Legacy Recon v0.1.0 is certified for local, read-only, stdio recon claims exactly as bounded by CLAIM-SCOPE.md (status NARROWED_TO_OBSERVED_SCOPE, version narrowed-observed-scope/2026-10-26.1), with W1-W9 withdrawn by name. This certification does NOT extend to the former universal JS/TS claim (FAILED at card -10, standing) nor to any withdrawn class.","version":"0.1.0"}