No reviewers
Labels
No labels
area: build
area: ci
area: compare
area: data
area: engine
area: model
area: provenance
area: rite
area: validation
backport
blocked
breaking
confirmed
dependencies
duplicate
epic
github_actions
invalid
needs-info
needs-triage
php
priority: high
priority: low
priority: medium
regression
type: bug
type: chore
type: correction
type: docs
type: enhancement
type: feature
type: fix
type: perf
type: refactor
type: security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Directorium/Core!476
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/88-api-freeze"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Epic #88 — contract & API freeze: lock the public API and the 1.0 output contract so an accidental breaking change can't merge unnoticed. Additive — the only production-code change is two
@internaldocblocks; the golden suite is byte-identical.#89 — public API surface freeze
tests/Api/PublicApiSurface.phpenumerates the public surface (3 functions + 23 classes) and renders a canonical reflection snapshot of every public constant + method signature.tests/Api/public-api-surface.txt(242 lines) is the committed snapshot;PublicApiSnapshotTestfails on any change;bin/freeze-api-surface.phpregenerates it.DayResolverandResolvedYearmarked@internal.Cross-version correctness (caught by adversarial review):
ReflectionNamedType::getName()returns the literalselfon PHP ≤8.3 but resolves it to the class FQCN on 8.4+. The fixture was frozen on 8.5 (FQCN), which would have failed on all four CI legs (7.4/8.1/8.2/8.3) — 42 lines.renderType()now normalisesself/staticto the declaring-class FQCN so the snapshot is byte-identical across the matrix. (The CI matrix run on this PR is the definitive cross-version proof.)#90 — 1.0 contract shape freeze
ContractShapeTestpins the structural shape: the top-level key order, the office key set, thecalendar/particular/astronomicalblocks, theresolutionslot, andSHAPE_VERSION1.0.2. The golden-year digest remains the exhaustive value guard.Docs
docs/api-stability.md— the public allowlist, the semver + deprecation policy, the 0.x→1.0 migration note, and how the snapshot treats internal types named in frozen signatures (a re-freeze, not a break).output-contract.mdlinks the guards.Verification
lint✅ ·analyse✅ ·test✅ 1036 tests (+6). Golden suite byte-identical.selfrendering bug; the MEDIUM finding (internal types named in frozen signatures) is reconciled by explicit policy inapi-stability.md; both advisories addressed.Closes #89, closes #90.