mirror of
https://github.com/morluto/rea.git
synced 2026-10-19 04:19:54 -05:00
Expose exact-path, selected-property, paged reads of retained JavaScript application facts through the shared CLI/MCP analysis view. Preserve original identities, complete row Evidence and partial coverage; retain reproducible real-Joplin and actual-agent measurements, including negative cost results. Fixes #4190. Part of #4027. Code mode remains deferred by #4091. Integrate main after #4274. Validation: 114 distinct focused cases across documented invocations, 106 Python cases, full static/docs checks and 18 version-labelled real-application workflows with 9 complete CLI/MCP view parity controls. Preserve two local fixture deadline failures and the unchanged test passing on an available single CPU. Final-head CI passed all 36 jobs after one Windows timeout retry without source changes; both exact-head automated reviews are clear and all review threads resolved. Downloadable apps and raw large Evidence/transcripts are excluded. Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
81 lines
4.5 KiB
Python
81 lines
4.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Audit compact Joplin retained-fact trial records; print checks, not a success rate.
|
|
|
|
The oracle is specific to the pinned shipped artifact and selected public workflow.
|
|
Coverage checks recognize a partial declaration, not the correctness of arbitrary
|
|
free-form prose. Read the preserved answers and qualifications alongside these checks.
|
|
"""
|
|
import json
|
|
import sys
|
|
|
|
SOURCE_PATHS = [
|
|
'ElectronAppWrapper.js', 'ElectronAppWrapper.js.map', 'index.html',
|
|
'package.json', 'node_modules/keytar/build/Release/keytar.node',
|
|
]
|
|
NATIVE_SHA256 = '0700016bcd761cbe02d275f2046c7cc42f39f730a50d66e3d3307aa9d413373a'
|
|
NATIVE_NODE = 'jag_node_98ccdef0e85d67cba9cc843193c5ba877f0a73ba3fa7d3581f6db0396a707b2d'
|
|
NATIVE_OBSERVATION = 'jag_observation_d7fbf97718fa986435ef951cf11b73f63610f59facd1b40c22fc9f06876d54bc'
|
|
PHASES = {
|
|
'ElectronAppWrapper.js.map': (
|
|
'parse-local-source-map',
|
|
'jag_observation_4b04b2982325de96322efd493507386b986aca57309e959870831dbd6dffd4fd',
|
|
),
|
|
'index.html': (
|
|
'parse-html-script-references',
|
|
'jag_observation_f432dffb800852a9d28d2f85c17ae6b5d83b7b2ae5780021169506a8d08f0d35',
|
|
),
|
|
'package.json': (
|
|
'parse-package-json',
|
|
'jag_observation_5dae4759fcf36b25470467347515c95207d69d7ececfc17a1d90ecfbbea4dc79',
|
|
),
|
|
}
|
|
|
|
|
|
def grade(record):
|
|
result = record['result']
|
|
if record['version'] == 'invalid-host':
|
|
return {'name': record['name'], 'excluded': 'CLI tool-dispatch harness failure'}
|
|
answer = result['answer']
|
|
native = answer['native']
|
|
analysis_calls = [op for op in result['operations']
|
|
if op.get('tool') == 'analyze_javascript_application']
|
|
task = result['task']
|
|
expected_package = ({'name': '@joplin/app-desktop', 'version': '3.7.21'}
|
|
if task == 'direct' else {'name': None, 'version': None})
|
|
expected_gaps = [dict(path=path, operation=operation,
|
|
analysis_status='not-started', authority='artifact-bytes',
|
|
state='unavailable', confidence='unknown',
|
|
observation_id=observation)
|
|
for path, (operation, observation) in PHASES.items()]
|
|
gaps = answer['processing_gaps']
|
|
checks = {
|
|
'parent_matches_actual_tool_receipt': answer['parent_evidence_id'] == result['observed_parent_evidence_id'],
|
|
'one_preparation_without_retry': len(analysis_calls) == 1,
|
|
'caller_source_paths_preserved': all(op['arguments'].get('source_paths') == SOURCE_PATHS for op in analysis_calls),
|
|
'summary_preparation': all(op['arguments'].get('detail') == 'summary' for op in analysis_calls),
|
|
'requested_timeout_preserved': all(op['arguments'].get('analysis_timeout_ms') == (1 if task == 'partial' else None) for op in analysis_calls),
|
|
'native_path_node_and_digest': native['path'] == SOURCE_PATHS[-1] and native['node_id'] == NATIVE_NODE and native['sha256'] == NATIVE_SHA256,
|
|
'byte_observation_cited': NATIVE_OBSERVATION in native['observation_ids'],
|
|
'static_bytes_not_promoted_to_execution': native['observed_byte_identity'] is True and native['runtime_execution'] == 'unknown',
|
|
'package_fields': answer['package'] == expected_package,
|
|
'exact_requested_processing_phase_facts': (sorted(gaps, key=lambda g: g['path']) == sorted(expected_gaps, key=lambda g: g['path']) if task == 'partial' else gaps == []),
|
|
'declares_partial_application_and_semantic_coverage': all('partial' in answer['source_coverage'][key].lower() for key in ['application', 'semantic']),
|
|
}
|
|
qualifications = []
|
|
if set(native['observation_ids']) - {NATIVE_OBSERVATION}:
|
|
qualifications.append('Additional native citations need node-ownership review; the observed ASAR-entry citation belongs to a different node, although traceable to the same parent.')
|
|
if not checks['exact_requested_processing_phase_facts']:
|
|
qualifications.append('Review original answer: missing original-source content differs from an unavailable processing phase; no unqualified phase-answer success.')
|
|
return {'name': record['name'], 'checks': checks, 'qualifications': qualifications}
|
|
|
|
|
|
def main():
|
|
with open(sys.argv[1], encoding='utf-8') as stream:
|
|
records = json.load(stream)
|
|
assert records['artifact']['asar_sha256'] == '767df409b18effe60421fbefcca873de237c7e813eac744ecdeebbc5e825a33a'
|
|
print(json.dumps([grade(record) for record in records['actual_agent_trials']], indent=2))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|