aboutsummaryrefslogtreecommitdiffhomepage
path: root/README.md
AgeCommit message (Collapse)Author
2026-08-16feat(plugin): guard Rust-owned classes the worker has no proxy fornsfisis
The worker's autoloader fell through to the real Composer source for every Rust-owned FQCN without a proxy stub, so plugin code doing `new Filesystem()` or subclassing `LibraryInstaller` silently ran on a second instance the Rust side never sees. An unimplemented part of the plugin API has to fail with an explicit error naming it, not quietly work on a disconnected copy. The stub generator now emits a guard class for each of those FQCNs: the real declaration, hierarchy and constants, with every constructor and method raising an explicit error. References satisfied by the declaration alone (`instanceof`, `X::class`, `Link::TYPE_REQUIRE`) keep working. Two FQCNs stay resolvable to the real class, each listed with the worker-side mechanism that makes a natively constructed instance correct. The error had nowhere to go: `Installer::run` dropped the `Result` of both `dispatch_script` calls, so an exception from a listener ended in exit 0. Both propagate now, the way the exception does upstream. Three real-plugin E2E comparisons stop at a guard and are ignored, each naming the class it needs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-15build(nix): add a Nix flake providing the dev shell and formattersnsfisis
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09docs(readme): list the build requirementsnsfisis
The build reads the SPDX license data out of the Composer submodule's vendor directory, which composer install has to populate first. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06test(plugin): cover composer/installers beyond a fresh installnsfisis
A single install leaves the installer contract half tested: it never reaches `update`, never runs over an already-installed tree, and never reaches the plugin's own `uninstall()` override — the one chaining onto the promise `LibraryInstaller::uninstall` returns. Nor does it touch the configuration surface real projects use, `installer-paths` and `installer-name`, which the plugin reads back through the package proxy. All three now compare command output as well as the resulting tree against upstream Composer. Progress bar frames are dropped from that comparison: Shirabe renders them differently for every install, including projects with no plugin at all, so they say nothing about the plugin under test. With those covered the plugin joins the verified list in the README.
2026-08-05docs: describe plugin support and the verified pluginnsfisis
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21chore: update READMEnsfisis
2026-07-21chore: add logonsfisis
2026-05-23chore: add editor/toolchain confignsfisis
2026-05-12feat(init): add filesnsfisis