feat: release Find-Word v0.2.3
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user