2.8 KiB
BukidBountyApp — project instructions
Dictionary-first workflow (MANDATORY)
This repo maintains a project dictionary at ai-docs/dictionary.md that maps domain terms, file locations, and concepts. It exists to save tokens on repeated lookups.
At the start of every task in this repo:
- Read
ai-docs/dictionary.mdbefore exploring the codebase. Use it to resolve terms, file paths, and concepts instead of grepping/globbing first. - Only fall back to direct codebase exploration when the dictionary doesn't cover the term.
During and after the task:
3. When you discover anything worth caching for next time — a new term, a moved/renamed file, a corrected definition, a non-obvious mapping (term → file/function/route), a domain concept — update ai-docs/dictionary.md in place.
4. Keep entries concise: term, one-line definition, and the canonical file path(s).
5. Remove or correct entries you find to be stale or wrong.
The dictionary skill encapsulates this behavior — invoke it (or follow its rules manually) on every non-trivial task.
Definition of Done — New Page or Feature (MANDATORY)
Every new page or API endpoint is not complete until all of the following are verified. Check each before closing any task that adds a page, route, or feature:
Backend
UserActions::NewActionNameadded toapp/Enums/UserActions.phpUserPermissions::roles()updated — which roles get the action, and which don't- Route added to
routes/web.phpwith the correct middleware (auth,module:*, etc.) - Any raw
DB::table()->insert()or->update()includescreated_by/updated_by(Auth::id()) andcreated_at/updated_at(now()) — Eloquent listeners don't fire on raw queries
Frontend / SPA
- Route registered in
app/Http/Controllers/Support/VueRouteMap.phpwithallowedUserTypes— must happen in the same commit as the new.vuefile, not as a follow-up fix - Direct URL access tested (reload the page at its URL, not just navigate to it in-app)
Theming
- No
bg-white,bg-light, ortext-darkhardcoded in the template — use CSS variables (var(--bg-card),var(--text-primary)) or rely on the global Bootstrap overrides inapp.js - No scoped-CSS dark mode fix needed — the global
.dark-mode .bg-white/.bg-light/.text-darkoverrides inapp.jshandle Bootstrap classes automatically
Layout
- If the page uses
sticky-topon a header, settop: 66px; z-index: 1020;— the app has a fixedTopHeaderat 66px and a sticky child will hide behind it without this offset
Canonical Table Names
- Any raw SQL or
unique:/exists:validation rule uses the abbreviated table name from the dictionary (strnotstores,prd_itemsnotproducts,cstnotcustomers,prd_strnotproduct_store) — wrong names cause silent 400/500 errors