feat: release Find-Word v0.2.3

This commit is contained in:
oz
2026-10-14 10:01:46 +00:00
parent c92660b514
commit 812540c743
531 changed files with 103693 additions and 325 deletions
@@ -0,0 +1,74 @@
"""Check saved baselines against current files without rewriting historical evidence."""
from datetime import datetime, timezone
import hashlib
import json
from pathlib import Path
import subprocess
ROOT = Path(__file__).resolve().parents[4]
EVIDENCE = Path(__file__).resolve().parent
def sha(path):
with path.open('rb') as stream: return hashlib.file_digest(stream, 'sha256').hexdigest()
baseline = json.loads((EVIDENCE / 'baseline.json').read_text())
changed, voices, ambience = [], [], []
for name, before in baseline['wavSha256'].items():
after = sha(ROOT / name)
if after != before:
assert name in ('public/ambience/market.wav', 'public/ambience/cafe.wav'), name
changed.append({'file': name, 'beforeSha256': before, 'afterSha256': after})
elif name.startswith('public/audio/'):
voices.append(name)
else:
ambience.append(name)
assert len(voices) == 101 and len(ambience) == 6 and len(changed) == 2
assert 'public/ambience/mall.wav' in ambience
for name, before in baseline['immutablePriorAttemptFiles'].items():
assert sha(ROOT / name) == before, name
assert (ROOT / name).stat().st_mode & 0o222 == 0, name
preserved = []
for name, before in baseline['priorAgentFiles'].items():
if name in baseline['mutableAgentFiles']: continue
assert sha(ROOT / name) == before, name
preserved.append(name)
older = json.loads((EVIDENCE.parent / 'baseline.json').read_text())
assert all(sha(ROOT / name) == before for name, before in older['priorAgentFiles'].items() if name not in older['mutableAgentFiles'])
assert all(sha(ROOT / name) == before for name, before in older['wavSha256'].items()
if name not in ('public/ambience/mall.wav', 'public/ambience/market.wav', 'public/ambience/cafe.wav'))
tracked = subprocess.check_output(['git', 'ls-files', '.agent'], cwd=ROOT, text=True).splitlines()
for name in tracked:
saved = subprocess.check_output(['git', 'rev-parse', 'HEAD:' + name], cwd=ROOT, text=True).strip()
actual = subprocess.check_output(['git', 'hash-object', name], cwd=ROOT, text=True).strip()
assert actual == saved, name
before_plan = json.loads((EVIDENCE / 'before-source-plan.json').read_text())
plan = json.loads((ROOT / '.agent/AMBIENCE-SOURCES-v0.2.3.json').read_text())
assert [a['environmentId'] for a in before_plan['assets']] == [a['environmentId'] for a in plan['assets']]
for before, after in zip(before_plan['assets'], plan['assets']):
expected = dict(before)
if before['environmentId'] in ('market', 'cafe'):
expected['selectedSegmentStartSeconds'] = {'market':24, 'cafe':0}[before['environmentId']]
assert after == expected, after['environmentId']
for name in ['manifest.json', 'AMBIENCE_NOTICES.md', *[p.name for p in (ROOT / 'public/ambience').glob('*.wav')]]:
assert (ROOT / 'public/ambience' / name).read_bytes() == (ROOT / 'dist/ambience' / name).read_bytes(), name
screen_path = EVIDENCE.parent / 'final-asr.json'
screen = json.loads(screen_path.read_text())
assert screen['requiredEmptyPassed'] is True
assert screen['limitations']['humanListeningAcceptance'] is False
assert screen['limitations']['legalPrivacyClearance'] is False
assert sha(ROOT / 'public/ambience/manifest.json') == screen['method']['manifestSha256']
assert sha(EVIDENCE / 'screen-final.py') == screen['method']['scriptSha256']
assert sha(EVIDENCE.parent / screen['priorFailedAttempt']['file']) == screen['priorFailedAttempt']['sha256']
assert sha(EVIDENCE.parent / screen['supplementaryNoVadRun']['file']) == screen['supplementaryNoVadRun']['sha256']
for entry in screen['files']:
assert sha(ROOT / entry['file']) == entry['sha256']
report = {'completedAtUtc': datetime.now(timezone.utc).isoformat(), 'voiceWavsUnchanged': len(voices),
'unaffectedAmbienceWavsUnchanged': 5, 'mallWavUnchanged': True, 'allAmbienceWavsUnchangedInRetry': ambience,
'changedWavs': changed, 'priorAgentFilesUnchanged': len(preserved),
'archivedPriorAttemptFilesUnchanged': len(baseline['immutablePriorAttemptFiles']),
'archiveFilesReadOnly': True, 'gitTrackedHistoricalAgentFilesUnchanged': len(tracked),
'sourceProvenanceUnchangedExceptAuthorizedStarts': True, 'distMatchesCurrentAmbienceBundle': True,
'finalScreenMatchesCurrentFilesAndScript': True, 'finalAsrSha256': sha(screen_path),
'head': subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=ROOT, text=True).strip()}
with (EVIDENCE / 'preservation.json').open('x') as out: out.write(json.dumps(report, indent=2) + '\n')
print(json.dumps(report, indent=2))