Laravel Project Patterns
Adapt fictional domain types and helpers to inspected contracts, keep reference-project identities confidential,
and preserve real APIs such as sqid and HasSqid. For uncovered behavior,
report the gap and follow the project’s conventions.
Inspect affected code, nearby tests and test configuration; use their actual namespaces and suite paths.
Retrieve Missing Patterns
Reuse examples and candidate descriptions already in this context first. For
missing behavior, write temporary JSON with request, paths (actual project
paths), and code_context (concise inspected facts), then use:
uv run <skill-directory>/scripts/search.py search --task-file=<task.json> --session=<session.json>
uv run <skill-directory>/scripts/search.py read --session=<session.json> --ids <id> <id>
Search returns five ranked candidates; new IDs include applicability and token
cost, known IDs only id and read. Select the smallest applicable set. For a
complete block select its ordered checklist: create,
destroy, edit,
index, show,
store, update,
authentication or move.
Initial and default
selection include their ordered cases. For model work use the
model checklist; for HTTP Resources use the
resource checklist; for enums use the
enum checklist; for actions use the
action checklist.
Media dimensions belong to Listener tests.
Keep standalone tests at file scope when the suite uses no describe.
A specialized example covers its stated assertions; retrieve another only for
missing contracts. Search uncovered requirements with relevant
facts; --limit=10 can broaden a shortlist. Rank and shortlist size do not prove
coverage. Do not glob the catalog or open its linked files directly.
Read emits complete Markdown examples and a receipt; blocked IDs need another
batch (4,000 source tokens per response). read: true means already emitted:
reuse that content; repeated reads omit it. Use one temporary session outside the
skill per task/agent context. After compaction use a new session to restore
descriptions, or read --repeat if the needed ID remains known. Receipts are not
model memory. Changed sources require searching again.
Keep canonical test names, documented case order, fixtures, assertions and datasets.
Keep behavior qualifiers (parent/ancestor, case-insensitive, relation state). Add
: field_name only to distinguish separate tests within one block; named dataset
rows already distinguish fields. Do not introduce behavior to match an example.
Prefer one line for simple calls of up to 100 characters; wrap longer calls or
when a break improves readability.
Inspect factory definitions: use recycle() for existing default parents and
derive unmodified intermediates from the created record. Keep trashed parents
explicit. Use for() for optional or role-specific relations, root-only tenant
assignment and deliberate mismatches. Recycling reaches nested factories, matches
model type and leaves fixed/derived foreign keys unchanged; verify option-list
membership and avoid same-type pools when an exact parent matters.
First search installs dependencies, downloads the model and builds the index; later searches refresh changed Markdown. Read loads no model. Resolve failures using the search guide. Benchmark evidence is optional. Maintainers may inspect catalog files directly.