feat: make a fresh skeleton work with zero bootstrapping#139
Merged
Conversation
…bootstrapping Collapses the setup a fresh marko/skeleton app needed before a trivial page worked. Verified against source from the acta session analysis. - testing: ship Marko\Testing\TestCase that registers app/* + modules/* PSR-4 autoloaders (no app boot) so module classes resolve under bare pest - session: make marko/session a passive interface package (no global middleware / no eager binding); session-file and session-database now register SessionInterface => Session, the global SessionMiddleware, and the page-cache ordering. A stateless route no longer 500s without a driver; using a session with no driver fails loudly (BindingException) - core: split missing/disabled-dependency and after/before ordering deadlocks (new MissingDependencyException) from real cycles (CircularDependencyException now always carries a populated chain); extract reusable ModuleAutoloader - skeleton: ship a working root phpunit.xml + tests/Pest.php so pest runs green on a fresh install - create-module skill: derive marko/* constraints from the host project (monorepo -> self.version; else match host, default *), fixing dev-checkout installs Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Collapses the bootstrapping a fresh
marko/skeletonapp needed before a trivial "Hello World page" worked — from ~80% of the effort down to near zero. Derived from a verified, source-checked analysis of a first-time project session.We explicitly did not ship default drivers (conflicts with "explicit over implicit"); loud errors are preserved throughout.
What changed
marko/testing— shipsMarko\Testing\TestCase, which registersapp/*+modules/*PSR-4 autoloaders (no app/container boot) so module classes resolve under barepestwith no per-project classmap or path-repo hacks.marko/session— now a passive interface package (likemarko/database): itsmodule.phpno longer registers the globalSessionMiddlewareor bindsSessionInterface. The drivers (marko/session-file,marko/session-database) now registerSessionInterface => Session, the global middleware, and the page-cache ordering. A stateless route no longer 500s on a fresh dev install; using a session with no driver fails loudly withBindingException.marko/core—DependencyResolverdistinguishes missing/disabled dependencies andafter/beforeordering deadlocks (new loudMissingDependencyException) from real cycles (CircularDependencyException, now always carrying a populated chain). Fixes the CLImodule:list/route:list"Circular dependency detected:" empty-message bug. Also extracts a reusableModuleAutoloader.marko/skeleton— ships a working rootphpunit.xml+tests/Pest.php, sopestruns green on a fresh install with zero setup.create-moduleskill — derivesmarko/*version constraints from the host project (monorepo →self.version; otherwise match the host's existing constraint, default*), fixing freshly-scaffolded modules that failedcomposer installagainstdev-develop.TestCase, and the skeleton harness.Testing
🤖 Generated with Claude Code