- Update UnVal visibility condition from ISVAL check to VAL1USER && VAL2USER - Fix validated-but-incomplete requests missing the UnVal action button - Align isValidated() function with same logic for consistency - Refactor AGENTS.md formatting
5.6 KiB
5.6 KiB
AGENTS.md
Guidance for coding agents working in D:\data\www\gdc_cmod.
1) Repository Summary
- Stack: CodeIgniter 4 + PHP 8.1+.
- Package manager: Composer.
- Test framework: PHPUnit 10 (
phpunit.xml.dist). - App domain: laboratory workflow (requests, samples, validation, reporting).
- Auth: session-based, route filters (
role,guest). - Data sources: SQL Server (
GDC_CMOD.dbo) + legacy Firebird integration. - Frontend: PHP views with Tailwind/DaisyUI/Alpine assets from
public/.
2) Rule Files Check
- Cursor rules: not found (
.cursor/rules/and.cursorrulesabsent). - Copilot rules: not found (
.github/copilot-instructions.mdabsent). - If these files are later added, treat them as high-priority instructions.
2.1) Codebase-Memory MCP Workflow (Default)
- This repository is indexed in
codebase-memory-mcp(session projectD-data-www-gdc_cmod). - Before broad architecture analysis, run:
index_status(confirm graph is ready)get_architectureforlanguages,packages,layers,file_tree
- Prefer
search_graph+get_code_snippet+trace_call_pathfor impact/call-chain questions. - For change impact before commits, use
detect_changes(scope='all'|'branch'). - Important: results can be noisy due to minified vendor assets in
public/js/*.min.js. - When querying routes/hotspots, scope to app PHP files (
file_pattern='app/**/*.php') where possible.
3) Core Commands
# install deps
composer install
# run dev server
php spark serve
# list spark commands
php spark
# list routes (preferred)
php spark routes
# alternate command used in this repo
php spark list
4) Test Commands (Use These)
# full suite
composer test
# full suite (direct)
./vendor/bin/phpunit
# windows direct
vendor\bin\phpunit
# single test file
./vendor/bin/phpunit tests/unit/ReportTest.php
# single test class
./vendor/bin/phpunit --filter ReportTest
# single test method
./vendor/bin/phpunit tests/unit/HealthTest.php --filter testIsDefinedAppPath
# single test directory
./vendor/bin/phpunit tests/unit
5) Lint / Static Analysis
- No dedicated linter/formatter configs were found (
phpcs,php-cs-fixer,pint). - No static analysis configs were found (
phpstan,psalm). - Use syntax lint for changed PHP files:
php -l app/Controllers/RequestsController.php
php -l app/Config/Routes.php
- If you add QA tooling, update this file with exact commands.
6) Code Organization
- Controllers:
app/Controllersandapp/Controllers/Pages. - Filters:
app/Filters, aliases inapp/Config/Filters.php. - Routes:
app/Config/Routes.php. - Views:
app/Views/.... - Tests:
tests/unit,tests/database,tests/session,tests/_support. - Most DB access uses raw SQL (
\Config\Database::connect()), not CI models.
7) Style Rules (PHP)
Imports and namespaces
- Keep valid namespace per folder.
- Use
useimports for frequently referenced classes. - Remove unused imports.
- Keep one class per file.
Formatting
- Prefer 4 spaces in new/edited code.
- Existing files may contain mixed tabs/spaces; avoid full-file reformat churn.
- Keep methods small; extract helpers for complex branching.
- Keep comments sparse; only explain non-obvious logic.
Types
- Add parameter and return types in new/modified methods when practical.
- Prefer explicit casts for session/DB values used in role or numeric logic.
- Prefer strict comparisons (
===,!==) over loose comparisons.
Naming
- Classes:
PascalCase. - Methods/variables:
camelCase. - Constants:
UPPER_SNAKE_CASE(ROLE_NAMES). - SQL identifiers follow existing DB naming (often uppercase).
- Views use existing naming conventions (lowercase/underscores).
8) Imports, Responses, and Controller Patterns
- API endpoints commonly use
CodeIgniter\API\ResponseTrait. - JSON responses:
$this->response->setJSON([...])or$this->respond([...]). - HTML responses:
return view('path/to/view', $data);. - Inputs:
getGet(),getPost(),getJSON(true)based on content type. - Validate required inputs early and return errors promptly.
9) SQL and Data Safety
- Prefer parameterized queries for all user/session-controlled values.
- Good:
$db->query('... WHERE ACCESSNUMBER = ?', [$accessNumber]); - Avoid: SQL string interpolation with raw request/session data.
- Good:
- Use transactions for multi-step writes that must be atomic.
- Preserve dual-validation behavior (
ISVAL1/ISVAL2, two distinct users). - Keep audit logging writes (
AUDIT_EVENTS,AUDIT_REQUESTS) intact when changing flows.
10) Error Handling and Logging
- Return consistent JSON shape for API failures (
status,message). - For external HTTP/cURL calls, check HTTP code and handle failures explicitly.
- Use
log_message('error', ...)for operational failures. - Do not expose secrets, stack traces, or sensitive internals to clients.
11) Security Requirements
- Escape user-facing output in views with
esc(). - Enforce auth + role checks through route filters and session state.
- Use
password_hash()andpassword_verify()for credentials. - Never commit
.envor secrets.
12) Role and Routing Conventions
- Role IDs:
0Superuser1Admin2Lab3Phlebo4CS
- Route filter examples:
- Single role:
['filter' => 'role:1'] - Multiple roles:
['filter' => 'role:0,1,2']
- Single role:
13) Agent Change Checklist
- Make minimal, targeted changes.
- Do not revert unrelated local modifications.
- Keep backward compatibility for response payloads unless asked otherwise.
- Run at least one relevant test file after code changes.
- If no tests exist for a changed behavior, add focused tests when feasible.
- Update this file when commands/conventions/tooling change.