Files
SGF/scripts/workshop-proof.php
nala 21a91f2aff Accept isolated WORKSHOP-RESOURCE-RECORD-v1 delivery
Record explicit workshop acceptance and preserve subsequent synthetic work without accepting receivables. Keep 080000/070000 unapplied, real workshop grants pending and operational issuance blocks intact. Exclude local credentials and real-data preservation reports.
2026-10-27 11:28:34 +02:00

19 lines
2.6 KiB
PHP

<?php
require __DIR__.'/../vendor/autoload.php';
$app=require __DIR__.'/../bootstrap/app.php';$app->make(\Illuminate\Contracts\Console\Kernel::class)->bootstrap();
\App\Modules\Workshop\WorkshopWorkflow::guard();
$f=json_decode(file_get_contents('C:/laragon/data/sgf-tempo/secrets/browser-fixture.json'),true,32,JSON_THROW_ON_ERROR);$fx=$f['workshop'];
app(\App\Shared\Context\CompanyContext::class)->selectFor($fx['reviewer_id'],$f['tenant'],$f['company'],$f['unit']);
$view=app(\App\Modules\Workshop\WorkshopWorkflow::class)->listing($fx['reviewer_id']);$order=collect($view['orders'])->firstWhere('id',$fx['order']);
if(!$order||$order['minutes_reported']!==105||$order['minutes_verified']!==105)throw new RuntimeException('Effective time not verified.');
$material=collect($order['materials'])->firstWhere('resource','CABO-TEST');
if(!$material||$material['delivered']!=='3'||$material['consumed']!=='2'||$material['returned']!=='1'||$material['unexplained']!=='0'||$material['verified_consumed']!=='2')throw new RuntimeException('Material observations not verified.');
$exception=collect($order['entries'])->firstWhere('origin','TEST-EXCEPTION-PAST');
if(!$exception||!$exception->outside_authority||$exception->decision?->decision!=='acknowledged')throw new RuntimeException('Historical exception lost or incorrectly authorized.');
$refused=collect($order['entries'])->firstWhere('origin','TEST-REVIEW-REFUSAL');
if(!$refused||$refused->decision?->decision!=='refused')throw new RuntimeException('Explicit refusal not demonstrated.');
$later=collect($order['entries'])->firstWhere('origin','TEST-AUTH-EXTRA');if(!$later)throw new RuntimeException('Later scope authorization missing.');
$out=['database'=>'sgf_tempo_test','policy'=>\App\Modules\Workshop\WorkshopWorkflow::POLICY,'synthetic_only'=>true,'real_browser_login'=>true,'csrf_enabled'=>true,'three_distinct_actors'=>count(array_unique([$f['manager_id'],$fx['technician_id'],$fx['reviewer_id']]))===3,'order_id'=>$order['id'],'minutes_reported'=>105,'minutes_verified'=>105,'material'=>$material,'unauthorized_start_refused_in_browser'=>true,'past_exception_preserved_after_later_authorization'=>true,'exception_decision'=>'acknowledged_not_authorized','refused_entry'=>$refused->id,'refusal_reason'=>$refused->decision->reason,'real_operations_enabled'=>false];
file_put_contents(base_path('docs/proofs/workshop-browser-results.json'),json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR));
echo "Browser workshop proof verified: 105 minutes, 3/2/1 material observations, explicit refusal and historical exception still unauthorized.\n";