Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -981,7 +981,7 @@ Append package entries in checklist order. Keep each entry compact but complete
| `database-03` | Defect and parity defect | Major | High | Lazy refresh hooks run in the wrong coroutine/lifetime, runtime opt-out is ignored, and current assertion shapes are missing | Use the actual runtime coroutine flag, install hooks on every owned connection, make refresh state exception-safe, and port current multiple-row, iterable, and connection-aware assertions |
| `foundation-16` | Package metadata and documentation defect | Major | High | Foundation's split package omits direct dependencies and provenance while several new public APIs and runtime limitations are undiscoverable | Declare only direct split dependencies, add focused metadata coverage and provenance, and update seven task-first user guides plus the Kernel contract note |
| `foundation-17` | Integration-test harness defect | Major | High | Foundation's Meilisearch waiter discards failed task results and cleanup returns before its asynchronous index deletions finish, allowing consumers to report success after failed work or race the next test | Check every awaited result, propagate failures, wait for exact cleanup tasks, and keep Foundation as the single owner |
| `foundation-18` | Integration-test harness defect | Major | High | Foundation's Algolia cleanup returns before its asynchronous index deletions finish, allowing the next test to reuse an index while deletion remains queued | Wait for each exact index-deletion task before setup or teardown continues |
| `foundation-18` | Integration-test harness defect | Major | High | Foundation's Algolia cleanup returns before its asynchronous index deletions finish, allowing the next test to reuse an index while deletion remains queued | Wait for each exact index-deletion task and require a published terminal result before setup or teardown continues |

- **Approved owner gates:** The owner approved the process-local/testing-only array maintenance driver, nullable redirect and current Laravel API additions, the truthful `Http\Kernel` contract expansion required by middleware configuration, the `0600` default for newly decrypted plaintext, and correcting verified upstream defects rather than preserving parity bugs. The Kernel contract change is documented for custom implementations. The existing worker maintenance wrapper remains a periodic same-process snapshot and does not make the array driver cross-process.
- **Important rejected concerns:** Do not add shutdown-callback registries, PHPUnit meta-fixtures, a generic finalizer, request-scoped Application/Vite clones, Carbon managers, locks, watchers, retry loops, PID incarnation tracking, publication/delete transaction services, arbitrary-stream copy transactions, SQL parsers, TTY emulation, or broad PHPStan impurity annotations. The supported paths are covered by existing lifecycle, coroutine-context, Filesystem replacement, Process, and typed-reflection primitives. Retain `Filesystem::delete()` cache clearing because the full caller set and PHP stat cache require it; use targeted cache invalidation only where raw command/native postconditions demand it.
Expand Down Expand Up @@ -1563,7 +1563,7 @@ Append package entries in checklist order. Keep each entry compact but complete
| `scout-19`, `scout-20`, `scout-36` | Correct provenance, concise actionable differences, current public docs/CLI language, and the identified Scout test typing. |
| `scout-38`, `database-22` | Instantiate Scout search attributes and Database `CollectedBy` so positional and named arguments share the constructor-owned contract and malformed declarations fail fast. |
| `foundation-17` | Make Foundation's Meilisearch test waiter reject failed awaited tasks and propagate timeouts, and make cleanup wait for its exact deletion tasks; delete Scout's duplicate wait path, use a service-valid custom-key fixture, and document the identifier restriction. |
| `foundation-18` | Make Foundation's Algolia cleanup wait for each exact index-deletion task before setup or teardown continues. |
| `foundation-18` | Make Foundation's Algolia cleanup wait for each exact index-deletion task and require a published terminal result before setup or teardown continues. |

- **Worker and operation ownership:** Engines, SDK clients, and reusable transports remain worker-shared. Mutable builders, paginators, import failure state, observer suppression, and detached Typesense wrappers remain operation/coroutine-local. No per-request client, static reset, second cleanup registry, lock, or unbounded retained state is introduced.
- **Approved Laravel-facing gates:** The owner approved top-level `scout.after_commit` / `SCOUT_AFTER_COMMIT`; three observer-required `SearchableInterface` methods; model-selected/container-substituted builders and paginators; Database raw pagination honoring its advertised model capability; Typesense rejecting unknown comparison operators; and four temporary wrapper objects per remote Typesense operation to eliminate unbounded per-name retention. Scout job-option properties remain intentionally untyped because current Laravel supports subclasses that redeclare them.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ Apart from the approved `database-21` behavior correction, no accepted item adds
| `database-23` | Descending cursor type defect | Major | `forPageBeforeId()` accepts string keys so descending chunk and lazy traversal work beyond the first page. |
| `scout-40` | Integer range defect and upstream defect | Major | Descending queue-import ranges use overflow-safe remaining-distance arithmetic; the ascending branch uses the same exact formulation instead of relying on mixed numeric tie-breaking. |
| `foundation-17` | Integration-test harness defect | Major | Foundation's Meilisearch waiter reports failed awaited tasks and timeouts, while cleanup waits for its exact deletion tasks; Scout uses that single owner, a service-valid custom-key fixture, and documents Meilisearch's identifier alphabet. |
| `foundation-18` | Integration-test harness defect | Major | Foundation's Algolia cleanup waits for each exact index-deletion task before setup or teardown continues. |
| `foundation-18` | Integration-test harness defect | Major | Foundation's Algolia cleanup waits for each exact index-deletion task and requires a published terminal result before setup or teardown continues. |

## Implementation design

Expand Down Expand Up @@ -321,9 +321,9 @@ The two existing `DatabaseQueryBuilderTest` methods retain their current signatu

### 9. External search integration task truthfulness (`foundation-17`, `foundation-18`)

Use Foundation's `InteractsWithMeilisearch::waitForMeilisearchTasks()` as the single wait owner. Preserve its current selection of all pending tasks, inspect each terminal result returned by `waitForTask()`, throw its error when the status is not `succeeded`, and let timeout or transport exceptions propagate. Meilisearch cleanup waits for the exact `taskUid` values returned by its deletions; Algolia cleanup waits for each exact index name and `taskID`. Setup failures propagate, while teardown remains exception-safe. Delete the duplicate Support implementation; Scout keeps its longer timeout through parent delegation.
Use Foundation's `InteractsWithMeilisearch::waitForMeilisearchTasks()` as the single wait owner. Select pending tasks whose index UID begins with the current test worker's prefix, inspect each terminal result returned by `waitForTask()`, throw its error when the status is not `succeeded`, and let timeout or transport exceptions propagate. Meilisearch cleanup waits for the exact `taskUid` values returned by its deletions; Algolia cleanup waits for each exact index name and `taskID` and requires a published terminal result because its SDK can swallow a polling failure and return null. Setup failures propagate, while teardown remains exception-safe. Delete the duplicate Support implementation; Scout keeps its longer timeout through parent delegation.

The shared custom-key fixture uses a Meilisearch-valid hyphenated key while remaining distinct from the database key. Keep the positive remote precondition before queued removal. Add deterministic harness coverage for successful, failed, and timed-out waits rather than racing the real service, and state the Meilisearch identifier alphabet once in the custom-key guide. Do not poll in production, change `Engine::update(): void`, scan already-terminal global failures, filter by test prefix, or add a task watermark.
The shared custom-key fixture uses a Meilisearch-valid hyphenated key while remaining distinct from the database key. Keep the positive remote precondition before queued removal. Add deterministic harness coverage for successful, failed, and timed-out waits rather than racing the real service, and state the Meilisearch identifier alphabet once in the custom-key guide. Do not poll in production, change `Engine::update(): void`, scan already-terminal global failures, or add a task watermark.

## Test plan

Expand Down
Loading