Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
49fae0a
docs: plan configuration access audit
binaryfire Aug 15, 2026
a92c6e9
docs: adopt complete config schema plan
binaryfire Aug 15, 2026
7009e73
test: fail the suite on PHP warnings
binaryfire Aug 15, 2026
6578f61
config: declare complete framework configuration schemas
binaryfire Aug 15, 2026
eee35a1
foundation: require canonical application configuration
binaryfire Aug 15, 2026
2084b59
foundation: enforce the deprecation logging record
binaryfire Aug 15, 2026
22c84e9
scheduling: use explicit timezone and cache settings
binaryfire Aug 15, 2026
e326c73
auth: define guard provider and password broker schemas
binaryfire Aug 15, 2026
ac8be1b
database: remove hidden connection and migration defaults
binaryfire Aug 15, 2026
463a2a9
redis: require complete topology-specific records
binaryfire Aug 15, 2026
f81e4c1
cache: honor Redis store prefix inheritance in benchmarks
binaryfire Aug 15, 2026
4eb3bc4
session: type required settings and preserve nullable stores
binaryfire Aug 15, 2026
887549c
hashing: read the configured driver and options by type
binaryfire Aug 15, 2026
529d1e3
broadcasting: consume complete named connection records
binaryfire Aug 15, 2026
42c8fe5
queue: make built-in connector records explicit
binaryfire Aug 15, 2026
73467fe
horizon: make runtime configuration explicit
binaryfire Aug 15, 2026
1a42a39
mail: type Markdown configuration and support null app URLs
binaryfire Aug 15, 2026
758ab5e
fortify: preserve nullable passkey configuration
binaryfire Aug 15, 2026
bdfa79d
jwt: normalize flags and make guard TTL intent explicit
binaryfire Aug 15, 2026
1cfb330
permission: type configuration and preserve nullable identifiers
binaryfire Aug 15, 2026
7eb27cd
reverb: enforce complete configured application records
binaryfire Aug 15, 2026
506c325
sanctum: type token and middleware configuration
binaryfire Aug 15, 2026
4727616
scout: use typed package configuration directly
binaryfire Aug 15, 2026
2d7a87a
sentry: centralize typed configuration and capability checks
binaryfire Aug 15, 2026
83d2c28
telescope: normalize watcher and storage configuration
binaryfire Aug 15, 2026
3cf5495
tinker: declare and consume the caster map
binaryfire Aug 15, 2026
cc67287
inertia: type fixed page and SSR configuration
binaryfire Aug 15, 2026
1cdb491
config: remove remaining fixed-record fallbacks
binaryfire Aug 15, 2026
665f1d1
docs: use typed configuration in integration examples
binaryfire Aug 15, 2026
c8eb220
docs: explain Hypervel configuration schema differences
binaryfire Aug 15, 2026
027e33e
docs: finalize the configuration access audit plan
binaryfire Aug 15, 2026
3bfe8bc
docs: define balanced configuration conventions
binaryfire Aug 16, 2026
528cf41
testing: centralize temporary environment overrides
binaryfire Aug 16, 2026
5951248
foundation: refine application configuration ownership
binaryfire Aug 16, 2026
f0f35ff
scheduling: preserve optional timezone and cache inheritance
binaryfire Aug 16, 2026
72fb347
auth: balance explicit schemas with guard defaults
binaryfire Aug 16, 2026
9a1aeff
session: document and preserve nullable security defaults
binaryfire Aug 16, 2026
d23b705
cache: clarify store options and event behavior
binaryfire Aug 16, 2026
f9eecab
redis: define topology records and explicit backoff policy
binaryfire Aug 16, 2026
8bebc53
hashing: keep complete named driver records
binaryfire Aug 16, 2026
ba8e7f5
broadcasting: normalize named connection options
binaryfire Aug 16, 2026
3680d09
filesystem: expose practical disk controls
binaryfire Aug 16, 2026
4053890
logging: preserve optional channel defaults
binaryfire Aug 16, 2026
10c042d
mail: keep transport-specific options optional
binaryfire Aug 16, 2026
9818ab3
rate-limiter: inherit shared store definitions in Testbench
binaryfire Aug 16, 2026
d90ec83
queue: make transaction timing and failover behavior explicit
binaryfire Aug 16, 2026
f9938ff
horizon: centralize optional runtime defaults
binaryfire Aug 16, 2026
613ca3d
jwt: preserve nullable lifetime configuration
binaryfire Aug 16, 2026
29ef3eb
passkeys: keep optional route and relying-party defaults
binaryfire Aug 16, 2026
2420773
fortify: preserve optional passkey and limiter settings
binaryfire Aug 16, 2026
48c2b4a
permission: define required schema and optional behavior
binaryfire Aug 16, 2026
0f515ba
reverb: normalize application records at construction
binaryfire Aug 16, 2026
a497a1f
saloon: make fixture configuration optional
binaryfire Aug 16, 2026
fffc013
sanctum: normalize token and middleware settings
binaryfire Aug 16, 2026
55db5bc
scout: type fixed engine configuration
binaryfire Aug 16, 2026
0d4fa92
sentry: normalize nullable SDK configuration once
binaryfire Aug 16, 2026
e80350a
telescope: separate required routing from optional storage defaults
binaryfire Aug 16, 2026
72ab7f4
tinker: keep extension lists optional
binaryfire Aug 16, 2026
fe98dbb
test(watcher): cover optional driver settings
binaryfire Aug 16, 2026
9dd3012
test(config): verify shipped schemas and environment types
binaryfire Aug 16, 2026
eba775e
docs: explain required and optional configuration
binaryfire Aug 16, 2026
e31dea8
docs: finalize the balanced configuration audit plan
binaryfire Aug 16, 2026
3570187
Merge branch '0.4' into config-access-audit
binaryfire Aug 16, 2026
e1b2791
docs: clarify raw config normalization boundaries
binaryfire Aug 20, 2026
bbcc9b0
foundation: isolate framework config evaluation
binaryfire Aug 20, 2026
725665e
foundation: share deprecation channel validation
binaryfire Aug 20, 2026
6400871
http: preserve nullable application URL behavior
binaryfire Aug 20, 2026
11ae727
auth: keep provider caching optional
binaryfire Aug 20, 2026
1bef886
queue: restore connector omission defaults
binaryfire Aug 20, 2026
c27a3c9
redis: normalize optional connection settings
binaryfire Aug 20, 2026
291bed6
horizon: keep single-use retention defaults local
binaryfire Aug 20, 2026
649173a
inertia: retain SSR transport defaults
binaryfire Aug 20, 2026
a8c6610
mail: preserve Markdown constructor defaults
binaryfire Aug 20, 2026
7a8fc02
broadcasting: retain the Pusher jsonp default
binaryfire Aug 20, 2026
550d0ec
permission: preserve missing-config migration errors
binaryfire Aug 20, 2026
988ec1b
sanctum: keep fixed settings strictly typed
binaryfire Aug 20, 2026
e645086
scout: resolve nullable drivers through the manager
binaryfire Aug 20, 2026
741bcb0
sentry: default omitted Redis tracing to disabled
binaryfire Aug 20, 2026
a702bfa
telescope: centralize the request size fallback
binaryfire Aug 20, 2026
5e0bbb0
fortify: document the verification limiter fallback
binaryfire Aug 20, 2026
aa3f690
docs: make nullable JWT examples complete
binaryfire Aug 20, 2026
90b38c9
docs: correct the Reverb application example
binaryfire Aug 20, 2026
74c91e1
docs: refine required and optional config guidance
binaryfire Aug 20, 2026
ceaf1ba
docs: update the config audit plan
binaryfire Aug 20, 2026
56d0aa6
foundation: preserve optional bootstrap config defaults
binaryfire Aug 20, 2026
2e423e4
foundation: keep resilient presentation fallbacks
binaryfire Aug 20, 2026
8820462
auth: normalize optional guard and broker settings
binaryfire Aug 20, 2026
549ab4a
jwt: preserve provider and ttl omission behavior
binaryfire Aug 20, 2026
ca86e9b
fortify: retain optional passkey and limiter defaults
binaryfire Aug 20, 2026
c359bcd
broadcasting: retain optional pusher client settings
binaryfire Aug 20, 2026
6574663
inertia: restore nested omission defaults
binaryfire Aug 20, 2026
ffacc01
permission: centralize optional schema defaults
binaryfire Aug 20, 2026
d0c8659
queue: align operational defaults with driver behavior
binaryfire Aug 20, 2026
5a34ea2
redis: complete optional connection normalization
binaryfire Aug 20, 2026
8834abd
reverb: normalize optional application records
binaryfire Aug 20, 2026
c5de5c7
sanctum: own optional middleware and cache defaults
binaryfire Aug 20, 2026
97b8e4d
scout: align partial engine records with shipped defaults
binaryfire Aug 20, 2026
0450ea6
sentry: unify optional feature normalization
binaryfire Aug 20, 2026
d93e66f
rate limiter: preserve optional database selection
binaryfire Aug 20, 2026
858077f
saloon: retain fixture recording defaults
binaryfire Aug 20, 2026
e26c842
tests: remove stale complete-config fixtures
binaryfire Aug 20, 2026
cd31852
tests: describe Redis config visibility accurately
binaryfire Aug 20, 2026
3dbe421
docs: clarify typed configuration defaults
binaryfire Aug 20, 2026
68b2913
docs: focus Laravel config porting guidance
binaryfire Aug 20, 2026
175648a
docs: define replaceable config record ownership
binaryfire Aug 20, 2026
daee34f
docs: finalize the config access audit plan
binaryfire Aug 20, 2026
00f0f11
Merge remote-tracking branch 'origin/0.4' into config-access-audit
binaryfire Aug 20, 2026
753f922
docs: clarify required config member failures
binaryfire Aug 20, 2026
8acf725
auth: restore verification expiry fallback
binaryfire Aug 20, 2026
21e22ec
jwt: restore the default provider implementation
binaryfire Aug 20, 2026
9bd4560
test(reverb): remove stale webhook strictness coverage
binaryfire Aug 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 14 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,21 @@ Build complete, long-term solutions, not MVPs or local workarounds. A broad chan
- **Use `Sleep::usleep()` / `Sleep::sleep()` for delays in source code** — `Sleep` is fakeable in tests. Use raw `sleep()` / `usleep()` only where real time must pass, such as test harnesses and external-process polling.
- **Use `xxh128` for internal non-cryptographic hashing** — cache and context keys, content checksums, and change detection. It is faster than `sha256`, which is reserved for trust boundaries: stored credential digests, signatures, and anything an attacker gains by forging. Seed it when the hashed value comes from user input, as `SwooleStore` does for its physical table keys.
- **Use immutable dates by default** — Hypervel defaults to `Hypervel\Support\CarbonImmutable`, including where Laravel uses mutable Carbon. Create public or application-configurable dates through the `Date` facade or date helpers, and use exact `CarbonImmutable` for framework-owned internal or held values. Type configurable Carbon boundaries as `CarbonInterface` and native or third-party boundaries as `DateTimeInterface`. Capture the return value of every date modifier whose result must persist. Use `Hypervel\Support\Carbon` only for explicit mutable opt-out or conversion behavior.
- **Use typed config getters and avoid duplicate defaults** — prefer `$config->string()`, `$config->integer()`, `$config->float()`, `$config->boolean()`, and `$config->array()` over `$config->get()` for values that cannot be null. Do not pass a code-level fallback when the framework or package config defines the key; missing or misspelled keys should fail loudly instead of silently using a second default. Framework and package defaults are shallow-merged with application config. `mergeableOptions()` is only for named groups such as connections or stores: application entries replace matching defaults, while other default entries remain. Other nested arrays are replaced as a whole. Keep a fallback when a setting inside one of those replaced arrays is intentionally optional.
- **Always use American English spelling** — E.g., "behavior" vs "behaviour", "utilize" vs "utilise".

### Configuration

These rules apply to all code, including ported code.

- Always use typed getters for values with one non-null type. Only use `get()` when null, union, or mixed values are meaningful. Add a test for any supported null behavior.
- Cast environment-backed booleans and numbers in config files; if `null` is supported, cast only non-null values. Consumers must not repeat those casts. When a factory accepts raw configuration records, normalize types and documented optional defaults once at that boundary; never supply missing required members.
- Required settings live in shipped config and must not have a code-level fallback, so missing or misspelled keys fail loudly.
- Intentionally optional settings keep one owning fallback and remain discoverable in config or feature documentation. Document what omission or null means.
- Framework and package defaults are shallow-merged with application config. `mergeableOptions()` is only for named groups such as connections or stores: application entries replace matching defaults, while other default entries remain. Other nested arrays are replaced as a whole.
- Replaceable named and nested records must apply documented optional defaults at their owning boundary; missing required members must still fail.
- A non-obvious fallback value shared by multiple source paths must have an owning constant. If user-facing config exposes the same default, keep its concrete value readable and add a focused test asserting that it matches the constant. Do not create constants for obvious source fallbacks such as `true`, `false`, `null`, `[]`, or `'default'`.
- **Env var naming** — Ported config keeps upstream names. New Hypervel-specific settings should use the established prefix for the package or subsystem that owns the value (`SERVER_`, `CACHE_`, `REDIS_`, etc.). Determine ownership semantically, not from the config filename: aggregate files such as `app.php` contain multiple domains, and `APP_` is for genuinely application-wide settings. If a value mirrors another config key, reuse that key's environment variable instead of defining a duplicate.
- **Use `resolve...Using` for Hypervel-owned config resolvers** — prefer this naming for callbacks that resolve config-derived values, unless an established Laravel domain convention already exists, such as `redirectUsing()`.
- **Always use American English spelling** — E.g., "behavior" vs "behaviour", "utilize" vs "utilise".

## Container

Expand Down Expand Up @@ -729,7 +740,7 @@ Full PHPStan runs through `composer fix` at checkpoints. During implementation,
When porting Laravel packages, whether first-party or third-party, keep them as close to 1:1 with upstream as possible so future changes are easy to merge. The exceptions are:
- Modernizing PHP types, including native parameter, return, property, and class-constant types, plus other appropriate PHP 8.4+ features, strict types, and strict comparisons
- Converting mutable Laravel date construction to Hypervel's immutable date conventions, typing configurable factory output as `CarbonInterface`, and capturing date-modifier return values
- Converting container array access (`$app['events']`) and dynamic service-property access (`$app->events`) in ported code to named container methods, and untyped `$config->get()` calls to typed getters where the key isn't nullable (see Container and the typed-getter rule under Development Conventions)
- Converting container array access (`$app['events']`) and dynamic service-property access (`$app->events`) in ported code to named container methods, and applying the Configuration rules to ported config and its consumers
- Adding Laravel-style title docblocks to methods (not classes — see Development Conventions)
- For ported Laravel packages: making them coroutine-safe, adding Swoole performance enhancements (e.g., static property caching), making them pass PHPStan
- Not porting upstream framework-specific integrations that only make sense in the source framework (for example packages, drivers) unless Hypervel intentionally has an equivalent surface
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ Cover:
- no command is invoked twice;
- Redis and Valkey integration confirms synchronized server-error equality where a stable command can produce it.

Delete replay assertions. In `src/boost/docs/redis.md`, delete only the framework replay sentence. Keep native phpredis `retry_interval`, `max_retries`, and backoff documentation.
Delete replay assertions. In `src/boost/docs/redis.md`, delete only the framework replay sentence. Keep native PhpRedis `max_retries` and backoff documentation; Hypervel does not expose `retry_interval` because its complete backoff policy replaces that initial seed before issuing a command.

## 3. Replace subscriber EOF framing with exact RESP2 decoding

Expand Down
Loading