Tracks forward work from the v1.2.0 release-prep baseline. Phase 1 and Phase 2 are complete. Phase 3 (broader adoption) is now open.
All Phase 1 items were delivered in the v0.0.2 through v1.0.0 release cycle.
-
Error boundary around bootstrap sequence --
bootstrapApp()throws[spectre-shell] Bootstrap failed: <message>with original error ascause. Tests cover failure paths and error structure. -
Wire
@phcdevworks/spectre-shell-signalsinto bootstrap --bootReadysignal exported from public API; set totrueafter successful bootstrap. Integration tests confirm signal state. -
Lifecycle hooks (
beforeMount,afterMount) -- optional callbacks onBootstrapOptions; tests confirm invocation order. -
GitHub Actions CI pipeline -- runs
npm run checkon push to main and PR. Badge added to README.
- Improve README with bootstrap sequence documentation -- Added ordered
beforeMount -> routes -> Router -> bootReady -> afterMountsequence. CI badge and ROADMAP link added to README.
- Add consumer smoke validation
- Added
tests/smoke.test.tsimporting fromdist/index.js(built output). - Verifies
bootstrapAppandbootReadyare exported and thatbootstrapApp()runs without error from the compiled artifacts. - Runs as part of
npm run test(afterbuildin thecheckpipeline).
- Added
-
Evaluate plugin or middleware registration system
- Written proposal in
PLUGIN_PROPOSAL.md— definesShellPlugininterface, proposedpluginsarray onBootstrapOptions, execution order, and the adoption trigger for implementation. - Deferred until a second consumer or concrete use case demands it.
- Written proposal in
-
Document SSR stance
- Added "Server-Side Rendering" section to
README.mdstating the package does not support SSR, why, and the condition for revisiting.
- Added "Server-Side Rendering" section to
All items above shipped across v0.0.2 through v1.1.0. See CHANGELOG.md.
P0 integration example, P1 plugin system, P2 ecosystem docs, P3 router-signal bridge decision, and P2.5 programmatic navigation are complete and prepared for the v1.2.0 minor release.
- Create
examples/directory with a minimal working SPA- Added
examples/minimal-spaas an npm workspace member (Vite-driven) bootstrapApp()wired with two routes (/,/about) using lazyloader()functions- Imports
@phcdevworks/spectre-tokens/index.cssand@phcdevworks/spectre-ui/index.css— resolved through each package's publishedexports/dist, not source - Observes
bootReadyviaeffect()from@phcdevworks/spectre-shell-signalsto confirm startup state vite buildresolves and bundles@phcdevworks/spectre-shellthrough its publishedpackage.jsonexports →dist/index.js, validating the real install path end to end
- Added
- Implement
plugins?: ShellPlugin[]onBootstrapOptionsShellPlugin/ShellPluginContextdefined insrc/bootstrap.tsand exported from the public API perPLUGIN_PROPOSAL.md- Plugins install after
beforeMount, beforeroutes(), in declaration order, with read access tobootReadyvia the context - Plugin install errors propagate into the existing error boundary
- Invocation order and error propagation covered in
tests/bootstrap.test.ts - CHANGELOG entry added under v1.2.0 (minor release)
- Add Ecosystem section to README.md
- Table mapping all Spectre packages to their roles (see shell-signals README for the established pattern)
- Note the two deployment paths: SPA (shell-based) vs Astro (ui-astro)
- Cross-link package repositories
- Decision: app-layer. Consuming apps wire
currentRouteandnavigatingsignals directly against the Router usingspectre-shell-signals. The shell does not export these signals — it stays thin. Revisit only if two or more independent apps repeat the same wiring pattern. Phase 2 is closed on this item.
bootstrapApp creates the Router internally and now returns it instead of
void (Option A). Additive change; no existing callers break; gives consumers
full router access.
- Change
bootstrapAppreturn type fromvoidtoRouter- Files:
src/bootstrap.ts,src/index.ts,tests/bootstrap.test.ts,README.md - Acceptance:
bootstrapApp(options)returns theRouterinstance; existing call sites that ignore the return value continue to work; tests confirm the instance is the same Router used internally; CHANGELOG entry added under v1.2.0
- Files:
Prerequisite met: P2.5 implemented, Phase 2 fully closed.
- Starter template or
create-spectre-appscaffolding — depends on Phase 2 closed and stable - Framework adapter evaluation — only if a downstream app requires it
@phcdevworks/spectre-init scaffolds templates against this package. These items
are needed for templates to work correctly and demonstrate the full API surface.
P0 (programmatic navigation) is done. P1 showcase items are documented for the
v1.2.0 handoff before spectre-init Phase 6 ships.
These APIs are prepared in v1.2.0 but not yet in scaffolded output. They are stable and documented so spectre-init templates can reference them.
- Confirm
beforeMount/afterMountusage example in README or examples/ - Confirm
plugins: ShellPlugin[]usage example in README or examples/ - Confirm
bootReadyobservation pattern (viaeffect()) in README or examples/
- Do not add routing internals here.
- Do not add reactive primitives here.
- Do not add token or styling definitions here.
- Do not expand
bootstrapAppinto a general application framework.