docs(qa): qualify Phase 9 regression and acceptance

This commit is contained in:
cesnimda
2026-10-23 07:31:27 +02:00
parent 0fb108bd67
commit 8e7e3f6387
63 changed files with 64728 additions and 6835 deletions
+17 -6
View File
@@ -47,17 +47,28 @@ if __name__ == '__main__':
changed = [name for name, expected in manifest.items() if not (ROOT / name).is_file() or digest(ROOT / name) != expected]
assert not changed, changed
report['sourceIdentity'] = dict(inputs=len(manifest), differences=changed, manifestSha256=digest(manifest_path),
qualification='Selected product/test, diagnostic, Release assembly and static-export bytes equal the frozen manifest. Documentation is outside this selected-source identity.')
qualification='Selected inputs equal the final ordinary/contract manifest. Separate Admin locator, provider-worker isolation and CTA/export deltas retain the history. Backend/sidecar inputs are unchanged; final UI results are selected from CTA-specific successor reports. Documentation is outside this selected-source identity.')
delta_path = HERE / 'p9-00/admin-fixture-delta.json'
if delta_path.exists():
report['ordinaryFixtureDelta'] = json.loads(delta_path.read_text(encoding='utf-8'))
report['workerIsolationDelta'] = json.loads((HERE / 'p9-00/worker-isolation-delta.json').read_text(encoding='utf-8'))
report['ctaDelta'] = json.loads((HERE / 'p9-00/cta-delta.json').read_text(encoding='utf-8'))
report['documentOracle'] = dict(path='scripts/verify-cv-fidelity.py', sha256=digest(ROOT / 'scripts/verify-cv-fidelity.py'), qualification='Original unchanged oracle; native rendering and admission counts are separate.')
provenance_path = HERE / 'p9-05/evidence/native-document-provenance.json'
provenance = json.loads(provenance_path.read_text(encoding='utf-8'))
for name, expected in {**provenance['inputs'], **provenance['outputs']}.items():
assert digest(ROOT / name) == expected, name
report['nativeDocuments'] = provenance
report['offline'] = json.loads((RAW / 'offline.json').read_text(encoding='utf-8-sig'))
report['supplementalSources'] = {str(path.relative_to(ROOT)): digest(path) for path in sorted((HERE / 'p9-05/volume').glob('*.ts'))}
discovered = json.loads((RAW / 'discovered.json').read_text(encoding='utf-8-sig'))
discovered = json.loads((RAW / 'discovered-cta.json').read_text(encoding='utf-8-sig'))
discovered_cases = browser_cases(discovered['suites'])
discovered_ids = {(case['id'], case['project']) for case in discovered_cases}
assert not discovered.get('errors') and len(discovered_cases) == len(discovered_ids) == 362
report['discovery'] = dict(cases=362, errors=discovered.get('errors', []), source='.artifacts/phase9/discovered.json',
report['discovery'] = dict(cases=362, errors=discovered.get('errors', []), source='.artifacts/phase9/discovered-cta.json',
qualification='List-only inventory; no tests executed. Its not-run statuses are not regression skip results.')
write_json(HERE / 'p9-00/discovered-cases.json', [{key: case[key] for key in ['id', 'project', 'file', 'title']} for case in discovered_cases])
sources = dict(ordinary=[f'ordinary-shard-{number}' for number in range(1, 5)], ai='ai', auth='auth', rate='rate', ingress='ingress', pdf='pdf', preferences='preferences', phase9='phase9-frozen', volume='volume-qualified')
sources = dict(ordinary=[f'ordinary-cta-shard-{number}' for number in range(1, 5)], ai='ai-cta', auth='auth-cta', rate='rate-cta', ingress='ingress-cta', pdf='pdf-cta', preferences='preferences-cta', phase9='phase9-cta', volume='volume-complete')
for lane, source in sources.items():
files = [RAW / f'{name}.json' for name in (source if isinstance(source, list) else [source])]
if not all(file.exists() for file in files):
@@ -121,7 +132,7 @@ if __name__ == '__main__':
body = base64.b64decode(attachment.pop('body'))
attachment.update(bytes=len(body), sha256=hashlib.sha256(body).hexdigest())
(folder / f'{lane}-cases.json').write_text(json.dumps(cases, ensure_ascii=False, indent=2) + '\n', encoding='utf-8')
frontend = RAW / 'frontend.json'
frontend = RAW / 'frontend-cta.json'
if frontend.exists():
data = json.loads(frontend.read_text(encoding='utf-8-sig'))
report['lanes']['frontend'] = {k: data.get(k) for k in ['success', 'numPassedTestSuites', 'numFailedTestSuites', 'numPassedTests', 'numFailedTests', 'numPendingTests', 'numTodoTests', 'startTime']}
@@ -135,7 +146,7 @@ if __name__ == '__main__':
if sidecar.exists():
report['lanes']['sidecar'] = ET.parse(sidecar).find('.//testsuite').attrib
report['failedOrSupersededAttempts'] = {}
for lane in ['phase9', 'phase9-successor', 'phase9-final', 'phase9-qualified', 'phase9-accepted', 'ordinary', 'ordinary-final', 'ordinary-accepted', 'ordinary-complete', 'volume', 'landing-red', 'landing-green', 'landing-qualified']:
for lane in ['phase9', 'phase9-successor', 'phase9-final', 'phase9-qualified', 'phase9-accepted', 'phase9-frozen', 'phase9-isolated', 'ordinary', 'ordinary-final', 'ordinary-accepted', 'ordinary-complete', 'ordinary-shard-1', 'ordinary-shard-1-final', 'ordinary-shard-2', 'ordinary-shard-3', *[f'ordinary-isolated-shard-{number}' for number in range(1, 5)], 'ai', 'auth', 'rate', 'ingress', 'pdf', 'preferences', 'volume', 'volume-qualified', 'landing-red', 'landing-green', 'landing-qualified', 'landing-cta-red']:
file = RAW / f'{lane}.json'
if file.exists():
data = json.loads(file.read_text(encoding='utf-8-sig'))