Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1e294d9
Clarify comments for upstream API and behavior differences
binaryfire Oct 22, 2026
ab73bca
Expose connection-owned skip-locked capability detection
binaryfire Oct 22, 2026
a7cedcf
Add fluent skip-locked query support
binaryfire Oct 22, 2026
bacd140
Make queue rate-limit retry padding configurable
binaryfire Oct 22, 2026
14f8a06
Enforce numeric exponent policy across validation paths
binaryfire Oct 22, 2026
444d2ac
Bound decimal exponent expansion and preserve integer precision
binaryfire Oct 22, 2026
619832b
Document framework correctness improvements
binaryfire Oct 22, 2026
2960533
Restore cached SQLite databases at the physical test pool
binaryfire Oct 22, 2026
c754839
Restore pooled databases before registering lazy refresh hooks
binaryfire Oct 22, 2026
a856bd9
Document pooled database restoration requirements
binaryfire Oct 22, 2026
b18322a
Merge 0.4 into framework-correctness-improvements
binaryfire Oct 23, 2026
8be4d38
Clarify conditional pooled database restoration naming
binaryfire Oct 23, 2026
d969f23
Preserve exact numeric tokens when decoding JSON
binaryfire Oct 24, 2026
da60af9
Merge 0.4 into framework-correctness-improvements
binaryfire Oct 25, 2026
c860506
Accept model-specific Eloquent builders in attribute types
binaryfire Oct 28, 2026
3945b57
Preserve the immutable date type after adding months
binaryfire Oct 28, 2026
1ce60bd
Merge current 0.4 into framework correctness work
binaryfire Oct 29, 2026
58fc2c3
Preserve chained cancellation across database callbacks
binaryfire Oct 29, 2026
89189f2
Clear Eloquent cast caches before synchronizing raw replacements
binaryfire Oct 29, 2026
b605c54
Correct constrained relationship loader types
binaryfire Oct 30, 2026
a60fb5e
Honor write index hints and keep outbox claims bounded
binaryfire Oct 30, 2026
b3c4dd8
Merge 0.4 into the framework correctness branch
binaryfire Nov 1, 2026
5e00ae6
Explain the case-sensitive Vitess capability comparison
binaryfire Nov 1, 2026
97543ad
Merge framework correctness improvements into 0.4
binaryfire Nov 2, 2026
ff0bed9
Rebuild JWT signing configuration after boot-time settings settle
binaryfire Nov 2, 2026
16ec6f3
Document AI stopping middleware and sub-agent approval limits
binaryfire Nov 2, 2026
dfdf100
Explain MCP OAuth registration rate limiting
binaryfire Nov 2, 2026
d0c78c7
Warn against user-selected upload filenames
binaryfire Nov 2, 2026
2d71f9b
Document initial Inertia page preloading and Link header limits
binaryfire Nov 2, 2026
9fa4830
Track a targeted audit of cancellation through cleanup failures
binaryfire Nov 2, 2026
2e555f3
Preserve chained cancellation through pool teardown and acquisition
binaryfire Nov 2, 2026
3fd0a4f
Reject SQLite test restoration while a pooled session is borrowed
binaryfire Nov 2, 2026
055b97e
Clarify the required lock for skipLocked
binaryfire Nov 2, 2026
f32b84a
Describe decimal parsing test datasets
binaryfire Nov 2, 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
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ Build complete, long-term solutions, not MVPs or local workarounds. A broad chan
- **Use Laravel observer conventions** — place Eloquent observers in a top-level `Observers/` directory. Register model-specific observers with `#[ObservedBy(...)]`; use `observe()` only for dynamic registration or observers supplied automatically by a reusable concern.
- **Use attributed local scopes** — define local Eloquent query scopes as protected methods marked with `#[Scope]`, rather than legacy public `scopeFoo()` methods. Use separate scope classes only for genuine global scopes.
- **No class docblocks unless warranted** — only add a class-level docblock if something unusual or complex needs explanation: purpose, architectural role, usage patterns. Never write one that inventories the class — trait lists, method summaries, "registers X, configures Y" — that duplicates the members' own docblocks and goes stale. Method docblocks (title only, Laravel-style, imperative mood: "Return", not "Returns") are always added, except on test methods, whether identified by a test name prefix or PHPUnit’s `#[Test]` attribute. A body can accompany the title for complex methods that need further explanation.
- **Add comments only where they're genuinely useful** (required Laravel-style method title docblocks and config section comment blocks still apply) — a short WHY for logic that isn't obvious from reading the code, the reason behind a bug fix, or logic that's coupled to code in other files and hard to understand in isolation. Avoid unnecessary code comments; don't comment what the code does, and don't annotate framework divergences, routine casts, or type normalizations. When reconciling upstream changes, add missing explanations for non-obvious Hypervel behavior being retained, so future syncs can understand why it exists.
- **Add comments only where they're genuinely useful** (required Laravel-style method title docblocks and config section comment blocks still apply) — a short WHY for logic that isn't obvious from reading the code, the reason behind a bug fix, or logic that's coupled to code in other files and hard to understand in isolation. Avoid unnecessary code comments; don't comment what the code does, and don't annotate routine casts or type normalizations. When reconciling upstream changes, add missing explanations for non-obvious Hypervel behavior being retained, so future syncs can understand why it exists.
- **Explain intentional public API and behavior differences from upstream** — Where a future sync could revert or overwrite an intentional difference, add a concise comment beside the relevant code explaining why it differs. Do not annotate mechanical porting changes. Comments on internal implementation differences follow the general commenting rule.
- **Don't make classes final by default** — keep classes open; add `final` only when it protects a real invariant or avoids a concrete framework/API problem, e.g. immutability, coroutine-safety, or a security guarantee.
- **Place methods logically, not at the end** — group new methods with related ones (getters with getters, setters with setters). Two exceptions: preserve upstream order when merging ported code (see Porting rules), and `flushState()` has its own placement rule (see Static state and test cleanup).
- **Only extract methods when justified** — extract only when the logic is complex enough to benefit from a name, it's likely to be reused, or two or more methods call it. Don't extract a simple one-liner with a single caller.
Expand Down Expand Up @@ -861,7 +862,7 @@ When ported code adds a provider or listener, wire providers and aliases in both
Keep everything else: behavioral descriptions, `@see` links, `@throws` annotations, warnings, contract explanations, usage notes.
Modernize the title line to imperative form ("Returns" → "Return", "Retrieves" → "Retrieve") but do not remove or rewrite the body content beneath it.
Translate non-English comments to English and fix grammar errors.
- **Record intentional Laravel differences where future ports will look** — When a Laravel feature is intentionally not ported because it does not fit Hypervel's Swoole/coroutine architecture, or because Hypervel has a better native equivalent, record it in three places so a future port cannot miss it: (1) the package README under `Differences From Laravel`, following the Package READMEs rules above and explaining what to use instead; (2) a concise source comment at the natural insertion point where the skipped method/class would otherwise sit; (3) a concise `REMOVED:` comment at the matching upstream test location when tests are skipped. This is a narrow exception to the "don't annotate divergences" rule: it applies only to intentionally omitted methods or features, never to ordinary ported-and-adapted code. Closed decisions only — real gaps still worth doing go in `docs/todo.md`.
- **Record intentionally omitted upstream features where future syncs will look** — When a Laravel feature is intentionally not ported because it does not fit Hypervel's Swoole/coroutine architecture, or because Hypervel has a better native equivalent, record it in three places so a future port cannot miss it: (1) the package README under `Differences From Laravel`, following the Package READMEs rules above and explaining what to use instead; (2) a concise source comment at the natural insertion point where the skipped method/class would otherwise sit; (3) a concise `REMOVED:` comment at the matching upstream test location when tests are skipped. This three-location requirement applies only to intentionally omitted methods or features, not ordinary ported-and-adapted code. Closed decisions only — real gaps still worth doing go in `docs/todo.md`.
- **Replace framework names in code** — any occurrence of the word `laravel` or `hyperf` in ported code (string literals, comments, prefixes, identifiers, etc.) must be replaced with `hypervel`, preserving the original casing. For example: `laravel_reserved_` → `hypervel_reserved_`, `LaravelExcelExporter` → `HypervelExcelExporter`, `HYPERF_VERSION` → `HYPERVEL_VERSION`. This does not apply to namespaces (which have their own conversion rules) or to references that describe the upstream source (e.g., docblock `@see` links to Laravel/Hyperf source).
- **Don't copy Laravel/Hyperf-specific framework details just to stay 1:1** — preserve public APIs and behavior while translating upstream-specific packages, providers, bootstrap mechanisms, and architecture to Hypervel equivalents. If no equivalent exists, reach consensus on the appropriate adaptation through a second-opinion loop with your peer agent before implementing.

Expand Down
Loading
Loading