Opt-in execution of root composer.json scripts.
Composer only ever runs scripts from the root package (never from
dependencies), so they're the project author's own commands — not a
supply-chain hazard. bougie keeps execution opt-in / off by default; this
crate is the engine that runs them when the user turns it on.
The crate is intentionally FS/PHP-agnostic: it parses
and classifies the scripts table into [Entry] values and
[dispatch]es a named event, given a host-injected [ScriptContext]
(resolved PHP binary, env, callback registry). Everything that needs to
know about bougie's path/PHP/service-env machinery lives in the caller —
mirroring how bougie-installers isolates declarative-plugin logic.
Scope: the non-internal entry forms (@php, @composer, @putenv,
@<alias>, plain shell). PHP-callback entries (Class::method) reach into
Composer internals in-process; bougie does not host them. They are
warn-and-skipped, except for a small allowlist the host registers natively
(e.g. Laravel's clearCompiled).