diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 2cd0c8a..7b25c5d 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,4 +1,4 @@ -# webware/skeleton — Copilot Agent Instructions +# webware/webware — Copilot Agent Instructions ## Mago Analyzer Docblock Types diff --git a/README.md b/README.md index d134fe5..1bfdc1a 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,16 @@ -# webware/skeleton +# webware/webware -Greenfield starter for Webware packages: the shared tooling config, the organization's -required CI workflow contract, and a containerized dev environment — so a new component -starts aligned instead of being retrofitted. +The Webware application skeleton — a Mezzio application that binds the Webware components +together. Per the standing composition doctrine, the skeleton is what binds `acl`, +`usermanager` and `admin`; no component is required to require another. It is also the first +place routing and the ACL decision path run **end to end**. -> **The badges are fenced deliberately.** Un-fence the block below, replace every -> placeholder with the derived repository's own coordinates, and delete this note. -> Nothing should advertise a workflow, a package or a report that does not exist yet. - -```markdown -[![PHP Version](https://img.shields.io/packagist/php-v/OWNER/PACKAGE)](https://packagist.org/packages/OWNER/PACKAGE) -[![Latest Version](https://img.shields.io/packagist/v/OWNER/PACKAGE)](https://packagist.org/packages/OWNER/PACKAGE) -[![License](https://img.shields.io/github/license/ORG/REPO)](LICENSE) -[![Required CI](https://github.com/ORG/REPO/actions/workflows/required/webinertia/.github/.github/workflows/org-required-ci.yml/badge.svg)](https://github.com/ORG/REPO/actions/workflows/required/webinertia/.github/.github/workflows/org-required-ci.yml) -[![codecov](https://codecov.io/gh/ORG/REPO/graph/badge.svg)](https://codecov.io/gh/ORG/REPO) -[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2FORG%2FREPO%2FDEFAULT_BRANCH)](https://dashboard.stryker-mutator.io/reports/github.com/ORG/REPO/DEFAULT_BRANCH) -``` - -Placeholders: `OWNER/PACKAGE` is the Packagist name, `ORG/REPO` the GitHub -coordinates, `DEFAULT_BRANCH` the default branch. +[![PHP Version](https://img.shields.io/packagist/php-v/webware/webware)](https://packagist.org/packages/webware/webware) +[![Latest Version](https://img.shields.io/packagist/v/webware/webware)](https://packagist.org/packages/webware/webware) +[![License](https://img.shields.io/github/license/webinertia/webware)](LICENSE) +[![Required CI](https://github.com/webinertia/webware/actions/workflows/required/webinertia/.github/.github/workflows/org-required-ci.yml/badge.svg)](https://github.com/webinertia/webware/actions/workflows/required/webinertia/.github/.github/workflows/org-required-ci.yml) +[![codecov](https://codecov.io/gh/webinertia/webware/graph/badge.svg)](https://codecov.io/gh/webinertia/webware) +[![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fwebinertia%2Fwebware%2F1.0.x)](https://dashboard.stryker-mutator.io/reports/github.com/webinertia/webware/1.0.x) ## What ships here @@ -32,7 +24,7 @@ config: | `webware-ci.json` | The required CI workflow's parameter contract — read from the repository root by `webinertia/.github`. | | `phpunit.xml.dist` | PHPUnit 13 strict mode: `requireCoverageMetadata`, `failOnNotice`, `failOnWarning`, `failOnDeprecation`. | | `compose.yml` / `Dockerfile` / `.devcontainer/` | The containerized toolchain (Composer, PHPUnit, Mago, Infection, PHPBench, roave BC-check). | -| `src/ConfigProvider.php` | The package wiring entry point, declared under `extra.laminas.config-provider`. | +| `src/App/src/ConfigProvider.php` | The application's wiring entry point, declared under `extra.laminas.config-provider`. | `mago.toml`, `phpunit.xml.dist`, `.gitattributes`, `codecov.yml`, `Dockerfile`, `.dockerignore`, `infection.json5.dist`, `phpbench.json.dist` and devcontainer config are @@ -40,33 +32,6 @@ byte-identical to the canonical artifacts in `webware-tools/presets/webware-alignment/artifacts/` — copy updates from there rather than editing them here. -## Using this template - -Work the list top to bottom; the namespace rename is the one that bites, because -`extra.laminas.config-provider` is a plain string that no tool validates for you. - -- [ ] `composer.json` — `name`, `description`, `keywords` -- [ ] `composer.json` — `extra.laminas.config-provider` → the new FQCN -- [ ] `composer.json` — both PSR-4 roots: `Webware\Skeleton\` → `src/` and the two `WebwareTest*` roots -- [ ] `src/`, `test/unit/`, `test/integration/` — namespaces and `use` statements -- [ ] Every new file's header block — "This file is part of the Webware Skeleton package" -- [ ] `.github/copilot-instructions.md` — the title line -- [ ] `README.md` — this title, the description, and the fenced badge block (un-fence it, replace the placeholders) -- [ ] `LICENSE` — copyright holder and year -- [ ] `webware-ci.json` — `min_msi` / `min_covered_msi` (see below), and uncomment the `db_*` keys for a package whose tests need a database -- [ ] Default branch — a new repo starts on an `N.N.x` branch (this one is `1.0.x`) - -The full badge block sits at the top of this file, fenced. Un-fence it and replace the -`OWNER/PACKAGE`, `ORG/REPO` and `DEFAULT_BRANCH` placeholders there rather than adding a -second copy here. - -The Stryker badge embeds the branch segment — update it in both the badge URL and the -dashboard link whenever the default branch changes. - -**Do not point the CI badge at `continuous-integration.yml`.** A consumer repository has no -such file, so that URL 404s. The required-route URL above is the one GitHub's own "Create -status badge" dialog produces, because the workflow file lives in the config repository. - ## Quality gates Both MSI gates are set to **95** — the ecosystem standard, not a starting point. Lower them diff --git a/composer.json b/composer.json index f457c97..3c885b1 100644 --- a/composer.json +++ b/composer.json @@ -1,11 +1,12 @@ { - "name": "webware/skeleton", - "description": "Greenfield starter for Webware packages: shared tooling config, the organization's required CI workflow contract, and a containerized dev environment.", + "name": "webware/webware", + "description": "The Webware application skeleton: a Mezzio application that binds the Webware components together.", "license": "BSD-3-Clause", "keywords": [ "webware", "mezzio", - "skeleton" + "skeleton", + "application" ], "authors": [ { @@ -16,7 +17,7 @@ ], "extra": { "laminas": { - "config-provider": "Webware\\Skeleton\\ConfigProvider" + "config-provider": "App\\ConfigProvider" } }, "require": { @@ -33,13 +34,13 @@ }, "autoload": { "psr-4": { - "Webware\\Skeleton\\": "src/" + "App\\": "src/App/src/" } }, "autoload-dev": { "psr-4": { - "WebwareTest\\Skeleton\\": "test/unit/", - "WebwareTestIntegration\\Skeleton\\": "test/integration/" + "AppTest\\": "test/unit/", + "AppTestIntegration\\": "test/integration/" } }, "minimum-stability": "dev", diff --git a/composer.lock b/composer.lock index acc91c2..ae4e5fb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cd5ddc70131332392f81310ba8f8f65e", + "content-hash": "260234a5eae37896509f01e3db8b0d79", "packages": [ { "name": "psr/container", diff --git a/src/ConfigProvider.php b/src/App/src/ConfigProvider.php similarity index 91% rename from src/ConfigProvider.php rename to src/App/src/ConfigProvider.php index 5ee2f01..a442da3 100644 --- a/src/ConfigProvider.php +++ b/src/App/src/ConfigProvider.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * This file is part of the Webware Skeleton package. + * This file is part of the Webware package. * * Copyright (c) 2026 Joey Smith * and contributors. @@ -12,7 +12,7 @@ * file that was distributed with this source code. */ -namespace Webware\Skeleton; +namespace App; /** * Wiring entry point for the package. diff --git a/test/integration/ConfigProviderWiringTest.php b/test/integration/ConfigProviderWiringTest.php index 69ce759..278c574 100644 --- a/test/integration/ConfigProviderWiringTest.php +++ b/test/integration/ConfigProviderWiringTest.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * This file is part of the Webware Skeleton package. + * This file is part of the Webware package. * * Copyright (c) 2026 Joey Smith * and contributors. @@ -12,13 +12,13 @@ * file that was distributed with this source code. */ -namespace WebwareTestIntegration\Skeleton; +namespace AppTestIntegration; +use App\ConfigProvider; use JsonException; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; -use Webware\Skeleton\ConfigProvider; use function file_get_contents; use function json_decode; diff --git a/test/unit/ConfigProviderTest.php b/test/unit/ConfigProviderTest.php index 9732479..a800d3b 100644 --- a/test/unit/ConfigProviderTest.php +++ b/test/unit/ConfigProviderTest.php @@ -3,7 +3,7 @@ declare(strict_types=1); /** - * This file is part of the Webware Skeleton package. + * This file is part of the Webware package. * * Copyright (c) 2026 Joey Smith * and contributors. @@ -12,13 +12,13 @@ * file that was distributed with this source code. */ -namespace WebwareTest\Skeleton; +namespace AppTest; +use App\ConfigProvider; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversMethod; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; -use Webware\Skeleton\ConfigProvider; #[CoversClass(ConfigProvider::class)] #[CoversMethod(ConfigProvider::class, '__invoke')]