… populate example openspec
Consolidates the unique, still-unmerged work from the stale PRs #19, #20 and
#22 (their branches predated the manifest-renderer refactor and could not be
merged without reverting it), reapplied freshly on current development:
Headers / SPDX / @SPEC (was #19):
- Fix the propagated `dev@conductio.nl` -> `info@conduction.nl` typo across all
10 template PHP files (root-cause fix; the typo had spread fleet-wide via
scaffolds).
- Bump @copyright 2024 -> 2026 and add SPDX-FileCopyrightText /
SPDX-License-Identifier inside the main docblock (after @license), matching
the canonical format already used by lib/Mcp/ExampleToolProvider.php.
- Add the file-level @SPEC example to Application.php (ADR-003) so scaffolds
show builders the convention.
Observability + REUSE (was #20):
- Add HealthController + MetricsController. appinfo/routes.php already declared
metrics#index and health#index, but the classes were missing, so /api/health
and /api/metrics returned 500. HealthController is public (@publicpage) and
verifies OpenRegister; MetricsController is admin-only Prometheus text with
{app}_info and {app}_health_status gauges (ADR-006).
- Add REUSE.toml for non-PHP source files.
Example OpenSpec (was #22):
- Populate openspec/changes/example-change/ + 7 openspec/specs/ capabilities
that the @SPEC docblock tags point at, so the tags no longer resolve to dead
links. Adapted task-5 / item-management / design.md to the current layout:
the removed ItemController/ItemService demo is replaced by ActionAuthService
(ADR-023, merged in #21) as the per-object-auth illustration.
Summary
Consolidates the unique, still-unmerged work from three stale PRs whose branches predated the manifest-renderer refactor (hydra ADR-024) and could not be merged without reverting it. Reapplied freshly on current
development(which now also includes the ADR-023ActionAuthServicefrom #21).Supersedes and closes #19, #20, #22.
Headers / SPDX / @SPEC (was #19)
dev@conductio.nl→info@conduction.nltypo across all 10 template PHP files — root-cause fix; the typo had spread fleet-wide via scaffolds.@copyright 2024 → 2026; addSPDX-FileCopyrightText+SPDX-License-Identifierinside the main docblock (after@license), matching the canonical format already used bylib/Mcp/ExampleToolProvider.php.@specexample toApplication.php(ADR-003).Observability + REUSE (was #20)
HealthController+MetricsController.appinfo/routes.phpalready declaredmetrics#indexandhealth#index, but the classes were missing, so/api/healthand/api/metricsreturned 500. Health is@PublicPage+ verifies OpenRegister; Metrics is admin-only Prometheus text with{app}_info+{app}_health_status(ADR-006).REUSE.tomlfor non-PHP source files.Example OpenSpec (was #22)
openspec/changes/example-change/+ 7openspec/specs/capabilities that the@specdocblock tags point at (previously dead links).task-5/item-management/design.mdto the current layout: the removedItemController/ItemServicedemo is replaced byActionAuthService(ADR-023, feat(adr-023): ActionAuthService skeleton + repair step + empty seed + unit tests #21) as the per-object-auth illustration.Test plan
php -lclean on all 12 modified/added PHP filesnpm run check:specspasses (json-strict + manifest + register + registry)curl /api/healthreturns JSON andcurl /api/metricsreturns Prometheus text