Skip to content

Glossary ​

A reference for terms and patterns used across our projects. If you encounter unfamiliar terminology in the decision records, check here first.

Architecture & Patterns ​

Action ​

A final readonly PHP class with a single execute() method that contains business logic. Actions are the authority for all mutations — creating, updating, and deleting records. See Principles.

DTO (Data Transfer Object) ​

A typed, immutable object that carries validated data between layers. In our pipeline, Form Requests produce DTOs, and DTOs are passed to Actions. No raw arrays.

Form Request ​

Laravel's built-in request validation class. In our pipeline, it validates HTTP input and converts it to a DTO before the Action sees the data.

ResourceData ​

A custom base class that replaces Laravel's JsonResource for API response serialization. Uses constructor-promoted readonly properties, reflection-based serialization, and runtime relation validation. See Unified ResourceData Pattern.

Architecture Tests ​

Automated tests written with Pest PHP that verify structural patterns across the codebase. They run on every PR and catch things like: "this delete Action doesn't handle all cascade relations" or "this Action doesn't call the audit logger."

Cascade Relations ​

When a parent model is deleted, its children must be cleaned up. Each model declares its children via cascadeRelations(), and the delete Action handles them explicitly. See Cascade Deletion & Soft Deletes.

GithubOAuthClient ​

A final readonly PHP service in App\Services\Github\ (kendo) that owns the GitHub OAuth handshake. Two methods: getAuthorizationUrl(string $state) and exchangeCodeForToken(string $code). Constructor depends on the kendo OAuth client credentials (#[Config('github.client_id')], client_secret, redirect_uri, scopes) and HttpFactory. Does not own user tokens or the GitHub API surface — that lives in GithubApiClient. See GitHub Integration Split.

GithubApiClient ​

A final readonly PHP service in App\Services\Github\ (kendo) that owns kendo's user-perspective GitHub REST API calls (repos, branches, file content, code search, branch creation, authenticated-user profile). Bearer-token-parametrized: every method takes string $token as its first argument. Caller-agnostic — accepts both user OAuth tokens and GitHub App installation tokens, because GitHub's REST API treats both identically at the bearer-token boundary. Constructor depends only on HttpFactory. The interface separation from GithubOAuthClient and GithubAppService makes credential acquisition explicit at every call site. See GitHub Integration Split.

Audit & Compliance ​

Hash Chain ​

A tamper-detection mechanism used in audit logs. Each log entry's hash includes the previous entry's hash, creating a chain. If any entry is modified or deleted, the chain breaks and the tampering is detectable.

Point-in-Time Snapshot ​

Audit log entries capture the actor's name, email, and role at the time of the action — not via a foreign key join. This ensures the audit trail remains accurate even if the user's profile changes later.

Append-Only Table ​

An audit log table that only supports INSERT. No UPDATE, no DELETE. Records are immutable once written.

ActorType ​

An enum that identifies who performed an action: User, Scheduler, Cli, or GitHubWebhook. Stored as an integer in the database.

RequestContext ​

A DTO that captures forensic metadata: IP address, user agent, and request URL. Built from the HTTP request and passed explicitly to Actions for audit logging.

ISO 27001 ​

An international standard for information security management. The Kendo project operates under this certification, which requires audit trails, access controls, and data protection measures.

Authorization ​

Model-Based Permission ​

An authorization check that depends only on the user and the target resource. Enforced at the route level via Laravel's ->can() middleware. Example: "Can this user update this project?"

Interaction-Based Permission ​

An authorization check that requires runtime context beyond route bindings — like which role is being assigned. Enforced inside the Action via Gate::authorize(). Example: "Can this manager assign the admin role to this user?" See Two-Tier Authorization.

Multi-Tenancy ​

Tenant ​

A company that uses the application. Each tenant gets their own database for hard data isolation. See Multi-Tenancy.

Central Database ​

A thin registry database containing only tenant and domain records. All application data lives in tenant databases.

TenantManager ​

A singleton service that resolves the current tenant from the subdomain and switches the database connection at runtime.

Projects ​

Kendo ​

A project management application built with Laravel 12 + Vue 3. Operates under ISO 27001 certification. Uses MySQL.

Brick Inventory (BIO) ​

A LEGO inventory management system built with Laravel 12 + Vue 3. Consists of a backend (lego-storage) and frontend (lego-storage-frontend). Uses PostgreSQL.

Architecture documentation for contributors and collaborators.