Skip to content

feat: make a fresh skeleton work with zero bootstrapping#139

Merged
markshust merged 1 commit into
developfrom
feature/first-run-friction-fixes
Jun 24, 2026
Merged

feat: make a fresh skeleton work with zero bootstrapping#139
markshust merged 1 commit into
developfrom
feature/first-run-friction-fixes

Conversation

@markshust

Copy link
Copy Markdown
Collaborator

Summary

Collapses the bootstrapping a fresh marko/skeleton app 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 — ships Marko\Testing\TestCase, which registers app/* + modules/* PSR-4 autoloaders (no app/container boot) so module classes resolve under bare pest with no per-project classmap or path-repo hacks.
  • marko/session — now a passive interface package (like marko/database): its module.php no longer registers the global SessionMiddleware or binds SessionInterface. The drivers (marko/session-file, marko/session-database) now register SessionInterface => 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 with BindingException.
  • marko/coreDependencyResolver distinguishes missing/disabled dependencies and after/before ordering deadlocks (new loud MissingDependencyException) from real cycles (CircularDependencyException, now always carrying a populated chain). Fixes the CLI module:list/route:list "Circular dependency detected:" empty-message bug. Also extracts a reusable ModuleAutoloader.
  • marko/skeleton — ships a working root phpunit.xml + tests/Pest.php, so pest runs green on a fresh install with zero setup.
  • create-module skill — derives marko/* version constraints from the host project (monorepo → self.version; otherwise match the host's existing constraint, default *), fixing freshly-scaffolded modules that failed composer install against dev-develop.
  • Docs/READMEs updated for the session behavior change, the new TestCase, and the skeleton harness.

Testing

  • Full suite: 6842 passed, 0 failed (20548 assertions).
  • Lint clean on all touched files.

🤖 Generated with Claude Code

…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>
@markshust markshust merged commit 26375b7 into develop Jun 24, 2026
2 checks passed
@markshust markshust deleted the feature/first-run-friction-fixes branch June 24, 2026 21:36
@github-actions github-actions Bot added the enhancement New feature or request label Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant