Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
872cebb
Allow text columns for opaque serialized values in migrations
binaryfire Oct 20, 2026
23ad797
Batch stack cache reads and writes per layer
binaryfire Oct 20, 2026
74259c2
Test tagged stack writes of expired records and cross-layer cleanup o…
binaryfire Oct 20, 2026
a112521
Add the Pennant port plan
binaryfire Oct 20, 2026
bb26cce
Port Pennant contracts, events and feature attributes
binaryfire Oct 20, 2026
460e286
Add coroutine-scoped Pennant state and feature partitions
binaryfire Oct 20, 2026
707b6ac
Port the Pennant decorator, array driver and scoped interactions
binaryfire Oct 20, 2026
a378133
Port the Pennant database driver with batched, conflict-safe writes
binaryfire Oct 20, 2026
a5b4e95
Port the Pennant manager, facade, middleware and commands
binaryfire Oct 20, 2026
94f6fa7
Register the hypervel/pennant package
binaryfire Oct 20, 2026
3213968
Flush Pennant static state between tests
binaryfire Oct 20, 2026
c9daafe
Port the Pennant driver tests and fixtures
binaryfire Oct 20, 2026
4a93ba5
Port the remaining Pennant tests
binaryfire Oct 20, 2026
3a3cb52
Update the Pennant plan for the reviewed source port
binaryfire Oct 20, 2026
43f3769
Reject non-integer Pennant cache TTLs
binaryfire Oct 20, 2026
10fd739
Add Pennant coroutine isolation and transaction tests
binaryfire Oct 20, 2026
ca3f61d
Add Pennant partition tests
binaryfire Oct 20, 2026
1ef3706
Add Pennant shared cache tests
binaryfire Oct 20, 2026
9b1c850
Extend the ported Pennant driver and manager tests
binaryfire Oct 20, 2026
b94b018
Add Pennant database engine and Redis integration tests
binaryfire Oct 20, 2026
b8dce17
Update the Pennant port plan after checkpoint 3
binaryfire Oct 20, 2026
8d3da3e
Add Sentry's Pennant feature flag integration
binaryfire Oct 20, 2026
df612f3
Document that feature scopes receive the store name
binaryfire Oct 20, 2026
ec1ac73
Add the Pennant documentation
binaryfire Oct 20, 2026
b882ab1
Update the Pennant port plan after checkpoint 4
binaryfire Oct 20, 2026
36807c6
Narrow the Pennant port plan's integration checks
binaryfire Oct 20, 2026
ac45a89
Mark the Pennant port plan complete
binaryfire Oct 20, 2026
87cc309
Match the Pennant engine tests to each server's behavior
binaryfire Oct 20, 2026
86a4cdf
Read keyed Pennant scopes by position
binaryfire Oct 20, 2026
61b293c
Match pennant:purge exclusions exactly
binaryfire Oct 20, 2026
5cd9a81
Skip empty Pennant purges and bulk writes
binaryfire Oct 20, 2026
3adc75b
Start each stack layer's batch expiration when it's written
binaryfire Oct 20, 2026
9e696ee
Let migrate --database choose the Pennant migration's connection
binaryfire Oct 20, 2026
665d1d7
Don't record feature flags checked while providers boot
binaryfire Oct 20, 2026
555f747
Use fixed-length keys for Pennant's shared cache
binaryfire Oct 20, 2026
f8bff90
Give each non-coroutine task its own context
binaryfire Oct 20, 2026
17af732
Clarify Pennant's purge contract and rich value storage
binaryfire Oct 20, 2026
aac7806
Match pennant:purge exclusions by registered name
binaryfire Oct 20, 2026
4982ecc
Return Pennant feature names as strings
binaryfire Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/redis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ jobs:
vendor/bin/paratest --max-processes=15 tests/Integration/Horizon
vendor/bin/paratest --max-processes=15 tests/Integration/Http/Redis
vendor/bin/paratest --max-processes=15 tests/Integration/OpenTelemetry/Redis
vendor/bin/paratest --max-processes=15 tests/Integration/Pennant/Redis
CACHE_STORE=redis vendor/bin/paratest --max-processes=15 tests/Permission
QUEUE_CONNECTION=redis vendor/bin/paratest --max-processes=15 tests/Integration/Queue
vendor/bin/paratest --max-processes=15 tests/Integration/RateLimiter/Redis
Expand Down Expand Up @@ -209,6 +210,7 @@ jobs:
vendor/bin/phpunit --no-progress tests/Integration/Horizon
vendor/bin/phpunit --no-progress tests/Integration/Http/Redis
vendor/bin/phpunit --no-progress tests/Integration/OpenTelemetry/Redis
vendor/bin/phpunit --no-progress tests/Integration/Pennant/Redis
QUEUE_CONNECTION=redis vendor/bin/phpunit --no-progress tests/Integration/Queue
vendor/bin/phpunit --no-progress tests/Integration/RateLimiter/Redis
vendor/bin/phpunit --no-progress tests/Integration/Session/Redis
Expand Down Expand Up @@ -279,6 +281,7 @@ jobs:
vendor/bin/paratest --max-processes=15 tests/Integration/Horizon
vendor/bin/paratest --max-processes=15 tests/Integration/Http/Redis
vendor/bin/paratest --max-processes=15 tests/Integration/OpenTelemetry/Redis
vendor/bin/paratest --max-processes=15 tests/Integration/Pennant/Redis
QUEUE_CONNECTION=redis vendor/bin/paratest --max-processes=15 tests/Integration/Queue
vendor/bin/paratest --max-processes=15 tests/Integration/RateLimiter/Redis
vendor/bin/paratest --max-processes=15 tests/Integration/Redis
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ Build complete, long-term solutions, not MVPs or local workarounds. A broad chan
- **Prefer union types over `mixed` when all types are known** — `mixed` is only for truly unconstrained values or cases that cannot be safely narrowed after control-flow analysis.
- **Type decisions must be evidence-based** — check corresponding Laravel/Hyperf signatures and docblocks as a reference, then trace the real control flow through method bodies across all callers and callees to confirm the types are correct.
- **Fail fast with framework and PHP exceptions** — don't add guards, wrapping, or defensive checks unless they handle a reachable invalid case or materially improve the error, and never swallow exceptions. If code would fail anyway (e.g. null passed to a typed parameter), let it fail naturally instead of adding a check that throws a custom exception — the stack trace is enough to diagnose.
- **Use semantic column types in migrations** — `jsonb()` over `json()`, `uuid()` / `foreignUuid()` / `uuidMorphs()` over strings for UUIDs, `ipAddress()` and `macAddress()` over `string()`. PostgreSQL gets the real types (`jsonb`, `uuid`, `inet`, `macaddr`); the other supported databases fall back automatically to compatible types.
- **Use semantic column types in migrations** — `uuid()` / `foreignUuid()` / `uuidMorphs()` for UUIDs, `ipAddress()` / `macAddress()` for network addresses, and `jsonb()` for JSON the database queries, indexes or validates. Use `text()` for opaque serialized values that are only read back whole. PostgreSQL gets the real types (`jsonb`, `uuid`, `inet`, `macaddr`); the other supported databases fall back automatically to compatible types.
- **No arbitrary string lengths** — use `->string('name')`, not `->string('name', 100)`. Don't invent limits; specify a length only when the domain or protocol defines one — exact (UUID: 36, ULID: 26, sha-256 hex token: 64) or a defined maximum (IPv6 address: 45).
- **No database enums** — use string columns plus PHP enums. Adding a value to a database enum requires a migration.
- **Use `dateTime` for arbitrary dates** — use `dateTime` instead of `timestamp` for scheduled dates, expiry dates, historical dates, and similar arbitrary dates. Keep `timestamp` for dates recorded when an action happens, such as `created_at`, `updated_at`, and `deleted_at`. On MySQL and MariaDB, `timestamp` only supports 1970–2038.
Expand Down
6 changes: 6 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@
"hypervel/pagination": "self.version",
"hypervel/passkeys": "self.version",
"hypervel/passport": "self.version",
"hypervel/pennant": "self.version",
"hypervel/permission": "self.version",
"hypervel/pipeline": "self.version",
"hypervel/process": "self.version",
Expand Down Expand Up @@ -286,6 +287,7 @@
"Hypervel\\Passkeys\\": "src/passkeys/src/",
"Hypervel\\Passport\\": "src/passport/src/",
"Hypervel\\Passport\\Database\\Factories\\": "src/passport/database/factories/",
"Hypervel\\Pennant\\": "src/pennant/src/",
"Hypervel\\Permission\\": "src/permission/src/",
"Hypervel\\Pipeline\\": "src/pipeline/src/",
"Hypervel\\Process\\": "src/process/src/",
Expand Down Expand Up @@ -336,6 +338,8 @@
"src/log/src/functions.php",
"src/prompts/src/helpers.php",
"src/reflection/src/helpers.php",
"src/pennant/src/helpers.php",
"src/pennant/src/functions.php",
"src/permission/src/helpers.php",
"src/collections/src/functions.php",
"src/collections/src/helpers.php",
Expand Down Expand Up @@ -373,6 +377,7 @@
},
"hypervel": {
"aliases": {
"Feature": "Hypervel\\Pennant\\Feature",
"Mcp": "Hypervel\\Mcp\\Facades\\Mcp",
"OpenTelemetry": "Hypervel\\OpenTelemetry\\Facades\\OpenTelemetry",
"Saloon": "Hypervel\\Saloon\\Facades\\Saloon",
Expand Down Expand Up @@ -415,6 +420,7 @@
"Hypervel\\Fortify\\FortifyServiceProvider",
"Hypervel\\Grpc\\GrpcServiceProvider",
"Hypervel\\Passport\\PassportServiceProvider",
"Hypervel\\Pennant\\PennantServiceProvider",
"Hypervel\\Permission\\PermissionServiceProvider",
"Hypervel\\Pipeline\\PipelineServiceProvider",
"Hypervel\\Queue\\QueueServiceProvider",
Expand Down
Loading
Loading