Repository navigation
Verifier: audit_local.py accepts non-centre cut gates; additive guard and regression fixture (no new κ) - #2478
Conversation
… (no new kappa) research/gauge44-frames-x/independent/audit_local.py frame-checks only sections A and B and, in the cut, only gates whose source is a centre. A constructed word (helper 502 made entering, its leak cancelled by four non-centre cut gates) passes the unchanged auditor with one rank level less, while the native provider chain rejects it (hpe_emit_local.py: emitted column mismatch). guard.py requires every cut gate to read a centre into a target row: it accepts all 146 genuine words at the base commit and both supplier words and rejects the counterexample. The pinned auditor (421 hash pins) is not changed.
|
DONE / scoped consumer handoff for PR2478's first next question. At canonical main The affected auditor is copied unchanged at The seven real callers are below. These hooks execute the local scalar/frame auditor; they do not rerun the complete native provider chain. That statement does not erase their retained native source evidence.
Concrete guard result: the seven base inputs all pass the unchanged PR2478 guard. Their canonical JSON projection Thus these seven are concrete adoption sites for a versioned/widened auditor API, but this screen does not demonstrate that their presently admitted families exploit the gap or invalidate an existing claim. For future generators that alter cut operands or centre identities, enforce the guard before calling the local auditor, or supply the required native frame proof. Keep frozen auditor pins unchanged until a versioning decision is made. The eleven hash-only candidates are the ten retained dyadic/temporal-engine users listed in the reproduction script plus Reproduction uses only Python's standard library and Git, reads frozen objects from the named base, and executes the original PR2478 guard after a hash check. Fetch base Prepared for ywz65 with substantial OpenAI Codex assistance. Credit Marius-Paul Dumitrean for PR2478's finding and unchanged guard, icekylinx for the auditor, and the authors of each linked consumer for their original checks. This handoff adds the bounded consumer/invariant classification; it does not reclaim the original counterexample or provide new supplier admission. Validation: native CPython 3.12.7 replay passed. A separate OpenAI Codex worker inspected the seven invocation/mutation paths, the eleven hash-only references and the five different-checker cases, then reproduced the exact JSON under isolated optimized CPython 3.12.14. This was AI-assisted independent execution and source review, not human review. Canonical main and PR2478 head were rechecked unchanged at 2026-10-15T13:03:24.712646+00:00. Targeted source comments show no intervening competing handoff. Full Discussion coverage remains the cached 1,197-record snapshot at 12:29:05 UTC because the GraphQL quota is exhausted; later unrelated work may be absent. Self-contained reproduction script"""Pinned literal-reference census and cut-guard replay, not a Python call-graph proof.
ywz65 with OpenAI Codex assistance. The executed guard is unchanged PR2478
(Marius-Paul Dumitrean); the saved-arm builder retains its source authors.
Run from a full repository checkout after fetching both pinned commits.
"""
import gzip
import hashlib
import json
from pathlib import Path
import subprocess
import tempfile
BASE = '0fdd7d82de03e43c9e5a1000dfbcd380d1b687d2'
GUARD_HEAD = 'dc83994c2dda28064c902ee970ce47db602224ae'
AUDITOR_SHA = '03afcfc9da428b3f6edac81c1fee7f277ab81b64998efae78380b63498dec6cd'
GUARD_SHA = 'aba3e8a6ac4208072d5288b6dd686a5f1b788942e21390baddae79b1c1b248df'
DIRECT = {
'complex-frame-plane-rail-seedca04cc', 'k8-helper-endpoint-audit',
'selected-k8-endpoint-contractions', 'selected-k8-frame-ceiling',
'selected-k8-omission-observability', 'selected-k8-unrestricted-ends',
'two-accumulator-saved-arms',
}
HASH_ONLY = {
'complex-temporal-gauge-pair-seed26', 'k8-coherent-triples',
'k8-coupled-gauge-stationarity', 'k8-l248-l253-l259-temporal-composition-seed27',
'k8-l259-temporal-seed32', 'k8-l284-temporal-seed37', 'k8-many-dyadic-seed29',
'k8-temporal-menu-composition', 'k8-varying-many-gauge-seed27',
'k8-zero-static-temporal-seed25', 'p112-linear-endpoint-lifts',
}
DIFFERENT = {
'complex-signed-prefix-audit', 'diagonal-batch-commutation',
'diagonal-retiming-host-boundary', 'selected1094-extended-labels-seed65',
'selected1094-wire-prefix-audit',
}
def need(ok, why):
if not ok:
raise ValueError(why)
def git(*args, data=None):
return subprocess.run(['git', *args], input=data, capture_output=True,
check=True).stdout
def source(path, ref=BASE):
return git('show', ref + ':' + path)
def sha(raw):
return hashlib.sha256(raw).hexdigest()
def projection(word):
return [word['report']['v'], word['centers'], word['cut']]
def canonical(value):
return json.dumps(value, sort_keys=True, separators=(',', ':')).encode()
def main():
paths = git('ls-tree', '-r', '--name-only', BASE, '--', 'research').decode().splitlines()
manifests = [p for p in paths if len(p.split('/')) == 3 and p.endswith('/VERIFY.json')]
raw = git('cat-file', '--batch', data=('\n'.join(BASE + ':' + p for p in manifests)+'\n').encode())
ready, offset = set(), 0
for path in manifests:
end = raw.index(b'\n', offset)
size = int(raw[offset:end].split()[-1])
data = raw[end+1:end+1+size]
offset = end+2+size
if json.loads(data).get('status') == 'ready':
ready.add(path.split('/')[1])
matches = git('grep', '-l', 'audit_local', BASE, '--', 'research/**/*.py').decode().splitlines()
matches = [p[len(BASE)+1:] for p in matches]
candidates = {p.split('/')[1] for p in matches if p.split('/')[1] in ready}
need(len(manifests) == len(ready) == 450 and len(matches) == 299, 'discovery universe')
need(candidates == DIRECT | HASH_ONLY | DIFFERENT, 'source-reviewed candidate classification')
need((len(DIRECT),len(HASH_ONLY),len(DIFFERENT)) == (7,11,5), 'classification counts')
# Categories above are a source-review conclusion. This finite discovery
# cannot prove absence of dynamically formed or indirect auditor calls.
copies = ['research/gauge44-frames-x/independent/audit_local.py',
'research/gauge44-slots/independent/audit_local.py',
'research/two-accumulator-saved-arms/audit_local.py']
need(all(sha(source(p)) == AUDITOR_SHA for p in copies), 'identical auditor copies')
guard = source('research/audit-local-cut-centre-guard/guard.py', GUARD_HEAD)
need(sha(guard) == GUARD_SHA, 'original guard pin before execution')
namespace = {'__name__': 'credited_guard', '__file__': 'pinned_pr2478_guard.py'}
exec(compile(guard, namespace['__file__'], 'exec'), namespace)
violations = namespace['violations']
words = {
'complex-frame-plane-rail-seedca04cc': 'research/complex-frame-plane-rail-seedca04cc/BEST-WORD.json.gz',
'k8-helper-endpoint-audit': 'research/t16-owner-audit-seed67/inputs/k8-seven-slot-word.json.gz',
'selected-k8-omission-observability': 'research/t16-owner-audit-seed67/inputs/k8-seven-slot-word.json.gz',
'two-accumulator-saved-arms': 'research/two-accumulator-saved-arms/inputs/SEVEN-SLOT-WORD.json.gz',
}
for name in ('selected-k8-frame-ceiling', 'selected-k8-endpoint-contractions', 'selected-k8-unrestricted-ends'):
words[name] = 'research/' + name + '/references/WORD.json.gz'
checked, cuts = {}, set()
for name, path in sorted(words.items()):
word = json.loads(gzip.decompress(source(path)))
need(not violations(word), 'base guard: '+name)
digest = sha(canonical(projection(word)))
cuts.add(digest)
checked[name] = {'source': path, 'cut_gates': len(word['cut']), 'cut_projection_sha256': digest}
need(cuts == {'334c4facb13fcd3f61582b3a3c2fe65a6649b5685b4d6102de5b774e59a21596'}, 'common authenticated cut')
with tempfile.TemporaryDirectory(prefix='pinned-auditor-consumers-') as temporary:
directory = Path(temporary)
prefix = 'research/two-accumulator-saved-arms/'
for path in ('build.py', 'RECIPES.json', 'inputs/SEVEN-SLOT-WORD.json.gz'):
destination = directory / path
destination.parent.mkdir(parents=True, exist_ok=True)
destination.write_bytes(source(prefix+path))
module = {'__name__':'credited_saved_arm_builder', '__file__':str(directory/'build.py')}
exec(compile((directory/'build.py').read_bytes(), module['__file__'], 'exec'), module)
for mask in range(256):
word = module['construct'](mask)
need(not violations(word) and sha(canonical(projection(word))) in cuts, 'constructed saved-arm cut')
probe = json.loads(gzip.decompress(source('research/audit-local-cut-centre-guard/inputs/PROBE-CUT-502.json.gz', GUARD_HEAD)))
need(len(violations(probe)) == 4, 'original predecessor negative control')
print(json.dumps({'base': BASE, 'ready_manifests':len(ready), 'python_literal_hits':len(matches),
'candidate_packages':len(candidates), 'source_reviewed_categories':{
'actual_auditor_callers':sorted(DIRECT), 'hash_only_references':sorted(HASH_ONLY),
'different_emitted_program_checker':sorted(DIFFERENT)},
'base_guard_checks':checked, 'saved_arm_masks_checked':256,
'original_pr2478_probe_violations':4,
'limits':'Literal-reference discovery plus manual pinned-source call-path review; no complete Python call graph, new native admission, or invalid existing claim demonstrated.'}, indent=2))
if __name__ == '__main__':
main()Original scoped claim (preserved)CLAIM / LOCAL-ONLY - scoped registered-consumer follow-up to PR2478 I am checking the requested first step: which ready registered packages actually call the affected local auditor, rather than merely hash it or use a different emitted-program auditor? At canonical main 0fdd7d8, the gauge44-slots and gauge44-frames-x copies are byte-identical (SHA256 03afcfc9da428b3f6edac81c1fee7f277ab81b64998efae78380b63498dec6cd). The initial literal-reference screen has 450 ready manifests and 23 candidate packages. I will classify their actual call paths and check the structural cut invariant for the real consumers' admitted candidate families. Two inspected frame/endpoint packages preserve the source-authenticated cut, so they are not demonstrated invalid claims. A guard on a widened auditor API is a different assertion. Expected result: a source-bound consumer/cut-invariant handoff, including direct versus hash-only references, exact call sites, guard checks on committed or constructed words, and the limits of the literal-reference discovery. Stop if this has no substantive addition to PR2478; do not repackage its existing counterexample as a new finding. No full arbitrary-Python call-graph coverage or current selected-supplier defect is claimed. Main was refreshed for this round and is unchanged, priority revision 4. PR2478 is pinned at dc83994. PR overlap snapshot: 684 open PRs at 12:31:06 UTC. Discussion refresh hit the account's GraphQL limit; the complete team snapshot has 1,197 records at 12:29:05 UTC and can miss later work. Expiry 2026-10-15T13:45:00Z. Prepared for ywz65 with substantial OpenAI Codex assistance. Credit Marius-Paul Dumitrean for PR2478's finding/guard and icekylinx for the retained auditor; consumer authors retain their own source credit. |
|
The scoped cut-source diagnostic and declared commands pass in the full review fixture. One packaging issue needs a revision before integration: the replay invokes the pinned auditor with
That runtime input is absent from both Please add the canonical word as an input in both manifests with its base/source commit, Git blob and SHA256 (reviewed bytes: |
audit_local.py --main also reads research/community-k492-audit/pr622/replay/ baseline558/complex-global/base/split-centres/CANONICAL-WORD.json.gz (check_parent_interface). It is now an input in VERIFY.json and SOURCES.json (base 0fdd7d8, source commit 5c5567d, blob a2e5a1f, sha256 66d3c3c7), and verify.py checks both repository inputs before running the auditor. A Git-free export with only the package and its declared inputs passes; the previous head fails there with FileNotFoundError. The open-question entry records ywz65's registered-consumer screen. No new kappa.
|
Revision 2 is pushed ( Fix. The parent word that
Declared-input-only export. I exported the package directory and its two declared inputs, with no Git and nothing else, and ran Python 3.12.13:
The distinction you asked to keep is unchanged. The replayed checks are the local auditor and the guard. The native provider's rejection of the probe is historical evidence ( @ywz65: thank you for the registered-consumer screen. I re-ran |
Summary
Verifier gap, no new κ. The independent local auditor
research/gauge44-frames-x/independent/audit_local.pyclimbs frames only in sections A and B. In the cut, it checks only gates whose source is a centre. Any other cut gate is applied to the scalar map but never frame-checked, so a word can move priced work into the unpriced cut and still pass with an understated paid profile.The native provider chain catches it, so claims whose admission runs the native chain are not affected. That includes every T74 claim. The gap matters for any acceptance that relies on the auditor alone.
Package:
research/audit-local-cut-centre-guard/, outcomecompleted(task cardsupplier-boundary-audit, scope refined).Counterexample
inputs/PROBE-CUT-502.json.gzstarts from the genuine base word of the pivot-566+554 T74 supplier (PR #1672'sgauge44-word-566) and makes three changes:200/203/205/206 += ±½ · 502cancel its initial-value leak;audit_local.py --main{2: 501, 3: 415}: one rank level less, about 2.1M units per call)native.py)hpe_emit_local.py:emitted column mismatch, register 153guard.py(this PR)The guard
guard.py(standard library) requires every cut gate to be anaddwhose source is one of the word's eight centres and whose target is a target row (v <= t < 2v). Every genuine word has this structure, and the native emitter relies on it.CANONICAL-WORD/FULL-WORDfiles with a cut at the base commit, plus both supplier words (evidence/GUARD-GENUINE-WORDS.json).audit_local.pyis pinned by hash in 421 files at the base commit, so this PR does not modify it. The guard is additive: it can run alongside the auditor or be folded into a new auditor version, whichever maintainers prefer.Verification
python3.12 scripts/research_package.py --package research/audit-local-cut-centre-guardgivesPASS_REGISTERED_RESEARCH_PACKAGE ... outcome=completed, in about 1 s.CANONICAL-WORD.json.gzthat its--maininterface check reads. Then it runs the unchanged auditor on the base and probe words; both pass, with receipts equal toevidence/AUDIT-*.json.-Ois refused.evidence/NATIVE-PROBE.txt), not rerun in the hook.tests/test_research_*.py: 65 tests OK, 3 skipped.aa5baad1, after the maintainer's review):research/community-k492-audit/pr622/replay/baseline558/complex-global/base/split-centres/CANONICAL-WORD.json.gzis now declared inVERIFY.jsonandSOURCES.json: base0fdd7d82, source commit5c5567d1, bloba2e5a1ff, SHA25666d3c3c7….verify.py. The previous head fails there withFileNotFoundError.Open next questions
Credit
Found during our T74 local-word rounds (discussion #2143). See
NOTICE.md.Prepared by Marius-Paul Dumitrean with substantial AI assistance (Anthropic Claude, via Claude Code). Apache-2.0.