transaction(function()use($host,$sql,$sha,$tag){if(!$host->getSchemaBuilder()->hasTable('mi_meta')){$host->unprepared($sql);$host->table('mi_meta')->insert(['policy'=>App\Modules\Services\MultiLineInvoiceCalculation::POLICY,'composition'=>$tag,'source_hash'=>$sha]);}else{$m=$host->table('mi_meta')->first();if(!$m||$m->composition!==$tag||$m->source_hash!==$sha)throw new LogicException('Preserve different schema');}});$draftSql=file_get_contents($repo.'/database/sql/multiline_invoice_drafts.sql');$draftSha=hash('sha256',$draftSql);$host->transaction(function()use($host,$draftSql,$draftSha,$tag){if(!$host->getSchemaBuilder()->hasTable('mi_draft_meta')){$host->unprepared($draftSql);$host->table('mi_draft_meta')->insert(['policy'=>App\Modules\Services\MultiLineInvoiceCalculation::POLICY,'composition'=>$tag,'source_hash'=>$draftSha]);}else{$m=$host->table('mi_draft_meta')->first();if(!$m||$m->composition!==$tag||$m->source_hash!==$draftSha)throw new LogicException('Preserve different draft composition');}}); file_put_contents($work.'/multiline-invoice-setup.json',json_encode(['passed'=>true,'book'=>$book,'schema_sha256'=>$sha,'new_grants'=>0,'new_accounts'=>0,'new_demo'=>false],JSON_PRETTY_PRINT));echo json_encode(['passed'=>true,'proof'=>$work.'/multiline-invoice-setup.json']).PHP_EOL;