# Personal Engineering Platform

> An executable developer platform for building and operating personal projects

- HTML version: https://robbiepalmer.me/projects/personal-engineering-platform
- Status: live
- Started: 2026-09-12
- Updated: 2026-10-25
- Technologies: TypeScript, Python, Zod, Pydantic, pytest-cases, Cloudflare Workers, Terraform, PostHog, Netdata, PostgreSQL, Neon, DuckDB, GitHub, Mise, GitHub Actions, Renovate, actionlint, zizmor, Trivy, SonarQube, OpenSSF Scorecard, Gitleaks, typos, Doppler, GitHub Secrets, pnpm, Vitest, Biome, Husky, Knip, CodeQL, uv, Ruff, pytest, React, Next.js, Tailwind CSS, shadcn/ui, Cloudflare Pages, Terraform Cloud, TFLint, Claude Code, Codex, CodeRabbit, Greptile, Agentic Code Review, Nix, Hono, OpenAPI, Spectral, oasdiff, Cloudflare R2, Drizzle, Hyperdrive, age, Cloudflare Access, Better Auth, Google OAuth, TanStack Query, Tailscale, OpenTelemetry, Slack, DVC, tsmetrics, React Doctor, Copier, CloudEvents, AsyncAPI, Kafka, @hono/zod-openapi, Score, Docker, Kubernetes, Kustomize, Helm

# Vision

Build an executable developer platform that turns a project's declared needs
into a working route from checkout to production. New work should inherit the
engineering decisions, repository structure, build and release machinery,
infrastructure, delivery path, and application capabilities it needs without
copying old ADRs or rediscovering the same tools.

The platform is the part of my engineering practice that should compound. A
project remains responsible for its product, domain model, and unusual
constraints. The platform owns the defaults that become more useful when every
project exercises the same path. Documentation explains the decisions, but it
is not the product. The product is the automation that applies those decisions
and keeps adopted projects aligned as the defaults change.

The platform spans four connected planes:

* **Control and catalog:** model projects, technology stacks, capabilities,
  dependencies, defaults, and explicit overrides;
* **Build and release:** create reproducible development environments, package
  software and models, publish OCI artifacts, and attach provenance;
* **Delivery:** provision infrastructure and deploy through the appropriate
  transition point, including serverless runtimes, managed application
  runtimes, NixOS hosts, K3s, and Kubernetes; and
* **Application capabilities:** provide reusable contracts and implementations
  for concerns such as identity, APIs, events, feature flags, telemetry, and
  data access without forcing one runtime on every project.

# Why this is a project

The Personal Knowledge Graph was the first place these choices accumulated.
That worked while the site was the only active product. Once Recipe Site,
Agentic Code Review, the Work Graph, and the writing editor began sharing its
tooling, their ADR histories filled with inherited setup decisions. The same
decision appeared to belong to four products, and a later change could not
explain which default an older project had used.

Giving the shared policy its own owner fixes that boundary. Projects can say
that they use the governance, base, TypeScript, web application, API,
infrastructure, observability, or database layer. Their local ADRs can return
to the decisions that make the product distinct.

# Responsibilities

The Personal Engineering Platform owns reusable engineering policy and the
automation that enforces it. Projects opt into named layers and capabilities,
then keep their own decision histories for product choices and deliberate
overrides.

The manifest below the project introduction is the declarative source of truth
for current defaults. It drives project generation, validation,
reconciliation, artifact production, provisioning, and deployment. Every
policy and selection has an effective period and a deciding ADR, so historical
project stacks do not change when the platform does.

Provenance keeps origins, evidence, and adopters separate. A selection names
the projects that produced it and the exact ADRs that support that claim.
Projects record their own adoption decision or a short rationale. Current
adopters are derived from those dated records rather than copied into the
manifest.

# Scope

The platform models and applies choices that recur across projects: source
governance, repository and CI defaults, agentic development, language tooling,
application runtimes, infrastructure, delivery, telemetry, and data stores. It
generates new projects and reconciles existing adopters. It does not own
product architecture or employer policy.

Required slots apply to every project that uses their layer. Preferred slots
apply only after a project records that it needs the capability.

The platform does not try to describe every package in a lockfile. A slot earns
its place when projects face the same architectural role, credible alternatives
exist, and I am willing to recommend one default. Product features, domain
models, and organisation-owned systems stay with the project that controls
them.

# Principles

## Make the common path cheap

A default should remove repeated work. The repository pins tools with mise,
exposes the same tasks to people, agents, and CI, and keeps checks close to the
change that caused them. This applies [Short Feedback Loops](/projects?tab=philosophy#short-feedback-loops)
to the development system itself.

## Prefer accumulated familiarity

The platform favours tools with strong documentation, broad use, and enough
public examples for coding agents to handle them well. Novel technology still
has a place when a project needs it, but novelty should belong to the product's
problem rather than its routine setup. This follows [The Goldilocks Zone](/projects?tab=philosophy#the-goldilocks-zone)
and [LLM-Optimized](/projects?tab=philosophy#llm-optimized).

## Keep defaults replaceable

Projects adopt capabilities, not brands. A slot such as
`database.relational-host` can move from Neon to another PostgreSQL host without
changing what the project says it needs. Effective periods preserve the old
answer for completed work.

## Earn every shared rule

Shared policy adds maintenance and constrains every adopter. A choice moves into
the platform only after more than one project needs it or the repository has
made it a real cross-project control. Otherwise it remains local. That keeps the
platform aligned with [Less Is More](/projects?tab=philosophy#less-is-more).

## Put policy where tools can check it

The manifest is data rather than a prose inventory. Validation rejects unknown
layers, overlapping defaults, broken replacement chains, and preferred slots a
project has not activated. Prose and ADRs explain the reasons. The manifest
answers what applies now.

# How adoption works

Each project explicitly adopts the layers it uses. Required slots resolve as
soon as their layer applies. Preferred slots need a separate project record, so
adopting the database layer does not claim that a project has every kind of
database.

A project can override one slot through a local ADR. The override must name the
replacement technology or policy value and its effective period. It leaves the
rest of the layer intact and makes the departure visible instead of quietly
drifting from the shared setup.

The local ADR frontmatter is the authoring path. This illustrative override is
not an active product decision:

```yaml
title: "ADR 012: Use Python for model training"
date: "2026-09-20"
status: "Accepted"
overrides_default:
  slot: "project.primary-language"
  kind: "technology"
  technology: "Python"
  adopted: "2026-09-20T00:00:00Z"
  until: "2026-10-01T00:00:00Z"
```

The project must adopt the layer throughout that half-open period. Preferred
slots also need a slot-use record for the same period. At `until`, the project
returns to the accepted platform selection unless another local ADR starts at
that exact boundary. Single-valued slots allow only one active override.
Multi-valued slots may carry different values concurrently, but duplicate
values may not overlap.

Tracking projects follow accepted replacements. Completed or deliberately
frozen projects close their adoption periods and keep the stack they last used.
The platform has no coordinated version number. Each policy and selection
changes on its own timeline.

# Promotion test

A project decision is ready to become a platform default when:

* the need recurs outside the project that introduced it;
* the slot describes a stable job rather than the selected product;
* repository and CI tooling can enforce or observe the choice;
* its operational cost is acceptable for small personal projects; and
* another project can override it without abandoning the whole layer.

The reverse test matters too. A default should leave the platform when it no
longer saves work, its maintenance exceeds its benefit, or projects routinely
override it for the same reason.

## Component catalog

Schema version 1. The complete derived catalog is available at https://robbiepalmer.me/catalog.json.

### Personal Engineering Platform

- ID: `system:personal-engineering-platform/platform`
- Kind: system
- Project: `project:personal-engineering-platform`
- Source paths: `.mise.toml`, `scripts/check-monorepo-layout.ts`, `packages/browser-base`, `packages/node-base`, `packages/platform-contracts`, `packages/project-economics-domain`, `packages/project-generator`, `packages/ts-base`, `infra/project-modules`, `ui/content/projects/personal-engineering-platform`
- Relations: part_of `project:personal-engineering-platform`

### Project economics domain

- ID: `component:personal-engineering-platform/project-economics-domain`
- Kind: component
- Project: `project:personal-engineering-platform`
- Source paths: `packages/project-economics-domain`
- Relations: part_of `system:personal-engineering-platform/platform`

### Copier project generator

- ID: `component:personal-engineering-platform/project-generator`
- Kind: component
- Project: `project:personal-engineering-platform`
- Source paths: `packages/project-generator`
- Relations: part_of `system:personal-engineering-platform/platform`

### Project infrastructure modules

- ID: `component:personal-engineering-platform/project-infrastructure-modules`
- Kind: component
- Project: `project:personal-engineering-platform`
- Source paths: `infra/project-modules`
- Relations: part_of `system:personal-engineering-platform/platform`

### Personal Finance App

- ID: `system:personal-finance-app/application`
- Kind: system
- Project: `project:personal-finance-app`
- Source paths: `infra/personal-finance`, `packages/finance-housing-indices`, `packages/finance-inflation-indices`, `packages/finance-tax-rules`, `packages/planning-case-domain`, `ui/app/_projects/personal-finance-app`

### Finance housing indices

- ID: `component:personal-finance-app/finance-housing-indices`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `packages/finance-housing-indices`
- Relations: part_of `system:personal-finance-app/application`

### Finance inflation indices

- ID: `component:personal-finance-app/finance-inflation-indices`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `packages/finance-inflation-indices`
- Relations: part_of `system:personal-finance-app/application`

### Finance tax rules

- ID: `component:personal-finance-app/finance-tax-rules`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `packages/finance-tax-rules`
- Relations: part_of `system:personal-finance-app/application`

### Personal Finance infrastructure

- ID: `component:personal-finance-app/personal-finance`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `infra/personal-finance`
- Relations: part_of `system:personal-finance-app/application`

### Planning case domain

- ID: `component:personal-finance-app/planning-case-domain`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `packages/planning-case-domain`
- Relations: part_of `system:personal-finance-app/application`

### Asset Tracker

- ID: `component:personal-finance-app/web`
- Kind: component
- Project: `project:personal-finance-app`
- Source paths: `ui/app/_projects/personal-finance-app`
- Relations: part_of `system:personal-finance-app/application`

### Recipe Site

- ID: `system:recipe-site/application`
- Kind: system
- Project: `project:recipe-site`
- Source paths: `ml-pipelines/recipe-dataset`, `packages/recipe-db`, `packages/recipe-domain`, `packages/recipe-parsing`, `workers/recipe-api`, `workers/recipe-ingest`

### Recipe Site web application

- ID: `component:recipe-site/web`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `ui`
- Relations: part_of `system:recipe-site/application`, deployed_as `workload:recipe-site/web`, uses `package:recipe-site/zod`

### Recipe Site API

- ID: `component:recipe-site/api`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `workers/recipe-api`
- Relations: part_of `system:recipe-site/application`, provides `api:recipe-site/http`, uses `resource:recipe-site/production-database`, deployed_as `workload:recipe-site/api`

### Recipe Site HTTP API

- ID: `api:recipe-site/http`
- Kind: api
- Project: `project:recipe-site`
- Source paths: `workers/recipe-api/openapi.json`
- Relations: part_of `system:recipe-site/application`

### Recipe Site web workload

- ID: `workload:recipe-site/web`
- Kind: workload
- Project: `project:recipe-site`
- Source paths: `ui`
- Relations: part_of `system:recipe-site/application`, uses `resource:recipe-site/production-web-host`

### Recipe Site API workload

- ID: `workload:recipe-site/api`
- Kind: workload
- Project: `project:recipe-site`
- Source paths: `workers/recipe-api`
- Relations: part_of `system:recipe-site/application`, uses `resource:recipe-site/production-database`

### Recipe Site production database

- ID: `resource:recipe-site/production-database`
- Kind: resource
- Project: `project:recipe-site`
- Source paths: `infra/public-platform`
- Relations: part_of `project:recipe-site`, uses `technology:postgresql`

### Recipe Site production web host

- ID: `resource:recipe-site/production-web-host`
- Kind: resource
- Project: `project:recipe-site`
- Source paths: `infra/public-platform`
- Relations: part_of `project:recipe-site`, uses `technology:cloudflare-pages`

### Recipe Site production

- ID: `environment:recipe-site/production`
- Kind: environment
- Project: `project:recipe-site`
- Relations: part_of `project:recipe-site`

### Zod 4.6.5

- ID: `package:recipe-site/zod`
- Kind: package
- Project: `project:recipe-site`
- Source paths: `pnpm-lock.yaml`
- Relations: part_of `project:recipe-site`, uses `technology:zod`

### Agent-first Writing Editor

- ID: `system:agent-first-writing/data-pipeline`
- Kind: system
- Project: `project:agent-first-writing`
- Source paths: `ml-pipelines/writing-editor-evaluation`, `packages/writing-editor-domain`

### Writing editor domain

- ID: `component:agent-first-writing/writing-editor-domain`
- Kind: component
- Project: `project:agent-first-writing`
- Source paths: `packages/writing-editor-domain`
- Relations: part_of `system:agent-first-writing/data-pipeline`

### Writing editor evaluation

- ID: `component:agent-first-writing/writing-editor-evaluation`
- Kind: component
- Project: `project:agent-first-writing`
- Source paths: `ml-pipelines/writing-editor-evaluation`
- Relations: part_of `system:agent-first-writing/data-pipeline`

### Agentic Code Review

- ID: `system:agentic-code-review/service`
- Kind: system
- Project: `project:agentic-code-review`
- Source paths: `ml-pipelines/ai-review-evaluation`, `packages/ai-review-domain`

### AI review domain

- ID: `component:agentic-code-review/ai-review-domain`
- Kind: component
- Project: `project:agentic-code-review`
- Source paths: `packages/ai-review-domain`
- Relations: part_of `system:agentic-code-review/service`

### AI review evaluation

- ID: `component:agentic-code-review/ai-review-evaluation`
- Kind: component
- Project: `project:agentic-code-review`
- Source paths: `ml-pipelines/ai-review-evaluation`
- Relations: part_of `system:agentic-code-review/service`

### Personal Knowledge Graph

- ID: `system:personal-knowledge-graph/application`
- Kind: system
- Project: `project:personal-knowledge-graph`
- Source paths: `ui/content/projects/personal-knowledge-graph`

### Personal Knowledge Graph publication

- ID: `component:personal-knowledge-graph/publication`
- Kind: component
- Project: `project:personal-knowledge-graph`
- Source paths: `ui/content/projects/personal-knowledge-graph`
- Relations: part_of `system:personal-knowledge-graph/application`

### Recipe API

- ID: `component:recipe-site/recipe-api`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `workers/recipe-api`
- Relations: part_of `system:recipe-site/application`

### Recipe dataset pipeline

- ID: `component:recipe-site/recipe-dataset`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `ml-pipelines/recipe-dataset`
- Relations: part_of `system:recipe-site/application`

### Recipe database package

- ID: `component:recipe-site/recipe-db`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `packages/recipe-db`
- Relations: part_of `system:recipe-site/application`

### Recipe domain package

- ID: `component:recipe-site/recipe-domain`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `packages/recipe-domain`
- Relations: part_of `system:recipe-site/application`

### Recipe ingestion Worker

- ID: `component:recipe-site/recipe-ingest`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `workers/recipe-ingest`
- Relations: part_of `system:recipe-site/application`

### Recipe parsing package

- ID: `component:recipe-site/recipe-parsing`
- Kind: component
- Project: `project:recipe-site`
- Source paths: `packages/recipe-parsing`
- Relations: part_of `system:recipe-site/application`

### Work Graph

- ID: `system:work-graph/service`
- Kind: system
- Project: `project:work-graph`
- Source paths: `infra/work-graph`, `packages/work-graph-cli`, `packages/work-graph-db`, `packages/work-graph-domain`, `workers/work-graph-api`, `workers/work-graph-observer`

### Work Graph infrastructure

- ID: `component:work-graph/work-graph`
- Kind: component
- Project: `project:work-graph`
- Source paths: `infra/work-graph`
- Relations: part_of `system:work-graph/service`

### Work Graph API

- ID: `component:work-graph/work-graph-api`
- Kind: component
- Project: `project:work-graph`
- Source paths: `workers/work-graph-api`
- Relations: part_of `system:work-graph/service`

### Work Graph CLI

- ID: `component:work-graph/work-graph-cli`
- Kind: component
- Project: `project:work-graph`
- Source paths: `packages/work-graph-cli`
- Relations: part_of `system:work-graph/service`

### Work Graph database

- ID: `component:work-graph/work-graph-db`
- Kind: component
- Project: `project:work-graph`
- Source paths: `packages/work-graph-db`
- Relations: part_of `system:work-graph/service`

### Work Graph domain

- ID: `component:work-graph/work-graph-domain`
- Kind: component
- Project: `project:work-graph`
- Source paths: `packages/work-graph-domain`
- Relations: part_of `system:work-graph/service`

### Work Graph observer

- ID: `component:work-graph/work-graph-observer`
- Kind: component
- Project: `project:work-graph`
- Source paths: `workers/work-graph-observer`
- Relations: part_of `system:work-graph/service`

### Personal Digital Infrastructure

- ID: `system:personal-digital-infrastructure/platform`
- Kind: system
- Project: `project:personal-digital-infrastructure`
- Source paths: `ui/content/projects/personal-digital-infrastructure`

### Personal Digital Infrastructure publication

- ID: `component:personal-digital-infrastructure/publication`
- Kind: component
- Project: `project:personal-digital-infrastructure`
- Source paths: `ui/content/projects/personal-digital-infrastructure`
- Relations: part_of `system:personal-digital-infrastructure/platform`

### Wedding planner

- ID: `system:wedding-planner/application`
- Kind: system
- Project: `project:wedding-planner`
- Source paths: `packages/wedding-planner-domain`, `ui/content/projects/wedding-planner`

### Wedding planner publication

- ID: `component:wedding-planner/publication`
- Kind: component
- Project: `project:wedding-planner`
- Source paths: `ui/content/projects/wedding-planner`
- Relations: part_of `system:wedding-planner/application`

### Wedding planner domain

- ID: `component:wedding-planner/wedding-planner-domain`
- Kind: component
- Project: `project:wedding-planner`
- Source paths: `packages/wedding-planner-domain`
- Relations: part_of `system:wedding-planner/application`

## Current layer manifest

### Base

Repository, task-running, CI, and common security defaults.

- project.repository-host: required
- project.task-runner: required
- project.scaffolding-engine: required
- project.primary-language: required
- development.coding-agents: required
- quality.ai-reviewers: required
- delivery.ci: required
- delivery.preview-environment: preferred; prerequisites: delivery.ci, preview-scoped-credentials, synthetic-preview-data, preview-cleanup
- delivery.dependency-updates: required
- delivery.workflow-linter: required; prerequisites: delivery.ci = github-actions
- security.workflow-analysis: required; prerequisites: delivery.ci = github-actions
- security.dependency-and-iac-scan: required
- security.repository-posture: required
- security.secret-scan: required
- security.preview-access: preferred; prerequisites: delivery.preview-environment, provider-registration
- security.service-auth: preferred; prerequisites: secrets.runtime-store, credential-rotation
- quality.code-analysis: required
- content.spell-check: required
- secrets.runtime-store: preferred
- secrets.ci-store: preferred; prerequisites: delivery.ci = github-actions

### Governance

Ownership, publication, licensing, and source-boundary defaults.

- governance.repository-visibility: required
- governance.license: required
- governance.source-boundary: required

### TypeScript

Defaults for projects whose primary language is TypeScript. Activated when project.primary-language resolves to typescript.

- typescript.package-manager: required
- typescript.test-runner: required
- typescript.linter-formatter: required
- typescript.git-hooks: required
- typescript.dead-code-analysis: required
- typescript.source-security: required
- typescript.schema-validation: required

### Python

Defaults for projects whose primary language is Python. Activated when project.primary-language resolves to python.

- python.package-manager: required
- python.linter-formatter: required
- python.test-runner: required
- python.data-validation: required
- python.test-cases: required

### Web application

Defaults for browser-delivered applications.

- web-app.ui-library: required
- web-app.framework: required; prerequisites: web-app.ui-library = react
- web-app.styling: required
- web-app.component-library: required; prerequisites: web-app.styling = tailwind-css
- web-app.component-maintainability-analysis: required; prerequisites: web-app.ui-library = react
- web-app.server-state-client: preferred; prerequisites: web-app.ui-library = react, interactive-browser-server-state
- web-app.host: preferred

### Backend API

Defaults for network APIs and server-side application code.

- backend-api.runtime: preferred
- backend-api.http-framework: preferred; prerequisites: backend-api.runtime
- backend-api.contract-format: preferred
- backend-api.contract-generator: preferred; prerequisites: backend-api.http-framework = hono, backend-api.contract-format = openapi, typescript.schema-validation = zod, runtime-derived-api-contract
- backend-api.relational-connection: preferred; prerequisites: backend-api.runtime = cloudflare-workers, database.relational-engine = postgresql

### Identity

Defaults for human and agent authentication, browser sessions, and application authorization.

- identity.authentication-library: preferred; prerequisites: project.primary-language = typescript, javascript-typescript-server-component, backend-api.runtime, database.relational-engine, secrets.runtime-store, durable-session-store, identity.authorization-policy
- identity.session-transport: preferred; prerequisites: identity.authentication-library = better-auth, backend-api.runtime, same-origin-auth-routes, secure-http-only-cookie
- identity.login-provider: preferred; prerequisites: identity.authentication-library = better-auth, identity.session-transport, secrets.runtime-store, environment-specific-redirect-uri, provider-registration
- identity.authorization-policy: required; prerequisites: server-side-authorization

### API governance

Contract correctness, compatibility, lifecycle, and publication controls. Activated when backend-api.contract-format resolves to openapi.

- api-governance.contract-linter: required; prerequisites: backend-api.contract-format = openapi, committed-api-contract
- api-governance.compatibility-check: preferred; prerequisites: backend-api.contract-format = openapi, published-api-baseline
- api-governance.contract-lifecycle: required

### Event contracts

Portable event envelopes and transport-specific asynchronous API contracts.

- event.contract-format: required
- event.envelope-format: required
- event.schema-selection: required
- event.transport-semantics: required

### Infrastructure

Defaults for provisioning and infrastructure management.

- infrastructure.provisioner: preferred
- infrastructure.state-backend: preferred; prerequisites: infrastructure.provisioner = terraform
- infrastructure.linter: required; prerequisites: infrastructure.provisioner = terraform

### Build and runtime

Reproducible builds, artifact publication, host configuration, workload state, catalog projection, and deployment targets.

- build.reproducibility: preferred
- artifact.contract: preferred
- artifact.distribution: preferred; prerequisites: artifact.contract
- artifact.blob-provider: preferred; prerequisites: artifact.distribution
- artifact.identity: required
- container.build-definition: preferred; prerequisites: artifact.contract
- container.base-image: preferred; prerequisites: container.build-definition
- host.configuration: preferred
- workload.orchestrator: preferred
- workload.packaging: preferred; prerequisites: workload.orchestrator
- workload.manifest-validation: preferred; prerequisites: workload.orchestrator
- deployment.target: preferred
- network.public-ingress: preferred
- network.private-overlay: preferred; prerequisites: network.public-ingress
- catalog.integration: preferred; prerequisites: catalog.metadata-authority
- catalog.metadata-authority: required

### Observability

Defaults for application telemetry and node monitoring.

- observability.telemetry-protocol: preferred; prerequisites: instrumented-runtime, telemetry-redaction, bounded-exporter-failure
- observability.application-telemetry: preferred; prerequisites: observability.telemetry-protocol = opentelemetry, telemetry-retention
- observability.alert-evaluation: preferred; prerequisites: observability.application-telemetry = posthog, responder-ownership
- observability.alert-delivery: preferred; prerequisites: observability.alert-evaluation = posthog, alert-routing, project-owned-slack-credentials
- observability.node-monitoring: preferred

### Database

Conditional defaults for transactional and analytical data.

- database.relational-engine: preferred
- database.relational-host: preferred; prerequisites: database.relational-engine = postgresql
- database.relational-access: preferred; prerequisites: database.relational-engine = postgresql
- database.migration-discipline: preferred; prerequisites: database.relational-engine = postgresql, database.relational-access = drizzle, committed-migration-history, serialized-migration-runner
- database.backup-restore: preferred; prerequisites: database.relational-engine = postgresql, storage.object-store, backup-key-custody, backup-retention-policy, restore-drill
- database.preview-isolation: preferred; prerequisites: delivery.preview-environment, database.relational-engine = postgresql, database.migration-discipline, fresh-migration-baseline
- database.olap-engine: preferred

### Storage

Conditional defaults for durable files, uploads, backups, and artifact bytes.

- storage.object-store: preferred; prerequisites: data-classification, object-lifecycle-policy, scoped-storage-credentials

### Data

Defaults for versioned datasets and evaluation artifacts.

- data.artifact-versioning: preferred; prerequisites: git-repository, external-blob-remote

## Default history

### Repository visibility

Who can read the source repository.

- Public source: Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/010-governance-policy-values.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Source licence

The terms under which other people may use and redistribute the source.

- AGPL-3.0: Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/010-governance-policy-values.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Source boundary

The repository boundary within which project source and shared engineering controls live.

- Shared personal-project monorepo: Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/010-governance-policy-values.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Source repository host

The service that hosts Git repositories, Pull Requests, and repository policy.

- [github](https://robbiepalmer.me/technologies/github.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Task and tool-version interface

The project-level command interface used locally and in CI.

- [mise](https://robbiepalmer.me/technologies/mise.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Project scaffolding engine

The template engine that creates and updates project-owned structures inside the source boundary.

- [copier](https://robbiepalmer.me/technologies/copier.md): Accepted, 2026-10-08T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/028-copier-monorepo-scaffolding.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Primary language

The language that determines the project's language-tooling layer.

- [typescript](https://robbiepalmer.me/technologies/typescript.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Overrides: [agent-first-writing:009-primary-language-python](https://robbiepalmer.me/projects/agent-first-writing/adrs/009-primary-language-python.md)

### Coding agents

Agents permitted to plan, implement, and verify changes in project repositories.

- [claude-code](https://robbiepalmer.me/technologies/claude-code.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- [codex](https://robbiepalmer.me/technologies/codex.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### AI reviewers

Automated reviewers that provide independent findings on proposed changes.

- [coderabbit](https://robbiepalmer.me/technologies/coderabbit.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- [greptile](https://robbiepalmer.me/technologies/greptile.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- [codex](https://robbiepalmer.me/technologies/codex.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- [agentic-code-review](https://robbiepalmer.me/technologies/agentic-code-review.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md); driven by [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Continuous integration

The service that runs repository checks and delivery workflows.

- [github-actions](https://robbiepalmer.me/technologies/github-actions.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Pull-request preview environment

A disposable deployment for reviewing a pull request before it reaches production.

- Isolated pull-request deployments with scoped resources and automatic cleanup: Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/018-pull-request-preview-environments.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Dependency update automation

Automated discovery and proposal of dependency updates.

- [renovate](https://robbiepalmer.me/technologies/renovate.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Delivery workflow linter

Static correctness checks for CI workflow syntax and expressions.

- [actionlint](https://robbiepalmer.me/technologies/actionlint.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Delivery workflow security analysis

Static security analysis for CI workflow permissions, triggers, and expressions.

- [zizmor](https://robbiepalmer.me/technologies/zizmor.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Dependency and infrastructure scan

Known-vulnerability and configuration scanning for dependencies and infrastructure files.

- [trivy](https://robbiepalmer.me/technologies/trivy.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Repository security posture

Periodic checks of repository settings and software supply-chain practices.

- [openssf-scorecard](https://robbiepalmer.me/technologies/openssf-scorecard.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Committed secret detection

Detection of credentials before commit and across repository history.

- [gitleaks](https://robbiepalmer.me/technologies/gitleaks.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Preview access control

The identity gate in front of pull-request preview hostnames.

- [cloudflare-access](https://robbiepalmer.me/technologies/cloudflare-access.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/019-cloudflare-access-boundaries.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Service authentication

Authentication of non-interactive clients before requests reach a private service.

- [cloudflare-access](https://robbiepalmer.me/technologies/cloudflare-access.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/019-cloudflare-access-boundaries.md); driven by [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Code quality analysis

Cross-project analysis of maintainability, duplication, coverage, and security findings.

- [sonarqube](https://robbiepalmer.me/technologies/sonarqube.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Spelling checks

Deterministic spelling checks for source code, documentation, and published content.

- [typos](https://robbiepalmer.me/technologies/typos.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Runtime secret store

The source of truth for sensitive application and development configuration.

- [doppler](https://robbiepalmer.me/technologies/doppler.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### CI secret delivery

The boundary that releases credentials to approved delivery jobs.

- [github-secrets](https://robbiepalmer.me/technologies/github-secrets.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript package manager

Locked dependency installation and workspace management for TypeScript projects.

- [pnpm](https://robbiepalmer.me/technologies/pnpm.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript test runner

The default runner for TypeScript unit and integration tests.

- [vitest](https://robbiepalmer.me/technologies/vitest.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript linter and formatter

Fast formatting and static checks for JavaScript and TypeScript source.

- [biome](https://robbiepalmer.me/technologies/biome.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript Git hook manager

Repository hooks that run fast checks before a commit leaves the working tree.

- [husky](https://robbiepalmer.me/technologies/husky.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript dead-code analysis

Whole-project detection of unused files, exports, and dependencies.

- [knip](https://robbiepalmer.me/technologies/knip.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript source security analysis

Semantic security analysis of TypeScript source and data flow.

- [codeql](https://robbiepalmer.me/technologies/codeql.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### TypeScript schema validation

Runtime validation at TypeScript data boundaries.

- [zod](https://robbiepalmer.me/technologies/zod.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Python package and environment manager

Locked dependency resolution and virtual-environment management for Python projects.

- [uv](https://robbiepalmer.me/technologies/uv.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Python linter and formatter

Formatting and static lint checks for Python source.

- [ruff](https://robbiepalmer.me/technologies/ruff.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Python test runner

The default runner and fixture system for Python tests.

- [pytest](https://robbiepalmer.me/technologies/pytest.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Python data validation

Typed validation for Python inputs and configuration.

- [pydantic](https://robbiepalmer.me/technologies/pydantic.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Python test cases

Reusable and parameterised Python test cases.

- [pytest-cases](https://robbiepalmer.me/technologies/pytest-cases.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Web UI library

The component and rendering model used to build browser interfaces.

- [react](https://robbiepalmer.me/technologies/react.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Web application framework

Routing, build, rendering, and deployment conventions for browser applications.

- [nextdotjs](https://robbiepalmer.me/technologies/nextdotjs.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Web styling system

The default way to express responsive styles and shared design tokens.

- [tailwind-css](https://robbiepalmer.me/technologies/tailwind-css.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Web component starting point

Accessible interface components that projects can own and adapt.

- [shadcnui](https://robbiepalmer.me/technologies/shadcnui.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### React component maintainability analysis

Static analysis of component size, responsibilities, rendering complexity, and repeated JSX structures.

- [tsmetrics](https://robbiepalmer.me/technologies/tsmetrics.md): Accepted, 2026-10-04T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/025-react-component-maintainability-analysis.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- [react-doctor](https://robbiepalmer.me/technologies/react-doctor.md): Accepted, 2026-10-04T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/025-react-component-maintainability-analysis.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Client-side server-state library

Browser-side synchronization of remote state for interactive client components.

- [tanstack-query](https://robbiepalmer.me/technologies/tanstack-query.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/021-tanstack-query-for-client-server-state.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Managed web application host

Preview and production hosting for a browser-delivered application.

- [cloudflare-pages](https://robbiepalmer.me/technologies/cloudflare-pages.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Backend API runtime

The managed runtime for an HTTP API.

- [cloudflare-workers](https://robbiepalmer.me/technologies/cloudflare-workers.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/002-cloudflare-workers.md); driven by [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### HTTP API framework

The request routing and middleware framework used to implement an HTTP API.

- [hono](https://robbiepalmer.me/technologies/hono.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/014-hono-openapi.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### HTTP API contract format

The machine-readable description of an HTTP API's operations and schemas.

- [openapi](https://robbiepalmer.me/technologies/openapi.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/014-hono-openapi.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### HTTP API contract generator

The adapter that derives an API contract from runtime route and schema declarations.

- [honozod-openapi](https://robbiepalmer.me/technologies/honozod-openapi.md): Accepted, 2026-10-19T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/035-web-api-data-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Relational database connection

The connection and pooling service between a managed API runtime and PostgreSQL.

- [hyperdrive](https://robbiepalmer.me/technologies/hyperdrive.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/017-relational-data-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### User authentication library

The application-owned library that manages user identities, sessions, and sign-in flows.

- [better-auth](https://robbiepalmer.me/technologies/better-auth.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/020-better-auth-and-google-oidc.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Human login provider

An external identity provider offered for application sign-in.

- [github](https://robbiepalmer.me/technologies/github.md): Proposed, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/034-identity-and-access-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- [google-oauth](https://robbiepalmer.me/technologies/google-oauth.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/020-better-auth-and-google-oidc.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Delegated agent authentication

The credential and proof protocol that identifies an agent acting with a user's delegated authority.

- [better-auth](https://robbiepalmer.me/technologies/better-auth.md): Proposed, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/034-identity-and-access-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Browser session transport

The browser mechanism that carries an authenticated application session.

- Same-origin Secure HttpOnly first-party cookie session: Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/034-identity-and-access-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Application authorization policy

The server-side policy that decides which resources and actions an authenticated principal may access.

- Project-owned server-side resource and action policy: Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/034-identity-and-access-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### API contract linter

Static correctness, security, and repository-policy checks for API contracts.

- [spectral](https://robbiepalmer.me/technologies/spectral.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/015-api-governance.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### API compatibility check

Detection of breaking changes between a proposed API contract and its published baseline.

- [oasdiff](https://robbiepalmer.me/technologies/oasdiff.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/015-api-governance.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### API contract lifecycle

Generation, examples, tests, versioning, deprecation, indexing, and publication of API contracts.

- Runtime-derived, committed, validated, compatibility-gated, indexed, versioned, and published as immutable OCI artifacts: Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Asynchronous API contract format

The machine-readable description of channels, operations, messages, and protocol bindings.

- [asyncapi](https://robbiepalmer.me/technologies/asyncapi.md): Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)

### Event envelope format

The transport-neutral metadata envelope around a domain event payload.

- [cloudevents](https://robbiepalmer.me/technologies/cloudevents.md): Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)

### Event payload schema selection

The boundary for choosing JSON Schema, Avro, or Protocol Buffers for an asynchronous API.

- JSON Schema by default; Avro for governed Kafka evolution; Protocol Buffers for established binary or RPC ecosystems: Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)

### Event transport semantics

The delivery and failure behavior that an asynchronous API contract must retain.

- Contracts retain topology, routing or keys, ordering, groups and offsets, delivery, retry, and dead-letter behavior: Accepted, 2026-10-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)

### Infrastructure provisioner

Declarative provisioning for managed infrastructure.

- [terraform](https://robbiepalmer.me/technologies/terraform.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/003-terraform.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Terraform state backend

Protected shared storage and locking for Terraform state.

- [terraform-cloud](https://robbiepalmer.me/technologies/terraform-cloud.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/009-infrastructure-operations.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Terraform static analysis

Provider-aware lint checks beyond Terraform's built-in validation.

- [tflint](https://robbiepalmer.me/technologies/tflint.md): Accepted, 2026-09-15T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/009-infrastructure-operations.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Reproducible build definition

The locked definition used to reproduce build inputs and outputs.

- [nix](https://robbiepalmer.me/technologies/nix.md): Accepted, 2026-09-28T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Artifact contract

The portable identity and media contract of a published build artifact.

- OCI artifacts: Accepted, 2026-09-28T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md), [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Artifact distribution

The repository service that indexes and distributes published artifacts.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Artifact blob provider

The storage provider used by an artifact repository for manifests and blobs.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Artifact identity rule

The rule that determines whether an artifact keeps its identity when storage changes.

- Artifact coordinates and digests are independent of the blob provider: Accepted, 2026-09-28T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Container build definition

The project-owned definition that assembles a container image.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Container base image

The shared or project-local base used by container builds.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Host configuration

The declarative source of operating-system and machine state.

- [nixos](https://robbiepalmer.me/technologies/nixos.md): Accepted, 2026-09-28T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Workload orchestrator

The control plane that reconciles deployed workload state.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Workload packaging

The reusable package applied to a workload orchestrator.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Rendered workload validation

The pre-apply validator for rendered workload manifests.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Deployment target

The runtime boundary that receives a release.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Public ingress policy

The declared boundary between private-only services and endpoints intentionally exposed through public ingress.

- Declare services private-only or govern their public ingress separately: Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/022-tailscale-private-networking.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Private network overlay

Encrypted connectivity to operated hosts and private services across network boundaries.

- [tailscale](https://robbiepalmer.me/technologies/tailscale.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/022-tailscale-private-networking.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Software catalog integration

A derived catalog view over repository-owned project and component declarations.

- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Catalog metadata authority

The source of truth from which software catalog records are generated.

- Repository declarations are authoritative; catalog records are derived: Accepted, 2026-09-28T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md); driven by [personal-engineering-platform](https://robbiepalmer.me/projects/personal-engineering-platform.md)
- Adopters: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md), [homelab](https://robbiepalmer.me/projects/homelab.md)

### Telemetry protocol

The application instrumentation and export contract for logs, metrics, and traces.

- [opentelemetry](https://robbiepalmer.me/technologies/opentelemetry.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/023-application-observability-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Application telemetry store

The searchable store for application logs and correlated operational signals.

- [posthog](https://robbiepalmer.me/technologies/posthog.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/023-application-observability-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- [posthog](https://robbiepalmer.me/technologies/posthog.md): Superseded, 2026-09-12T00:00:00Z to 2026-09-29T00:00:00Z; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Alert evaluation

The service that evaluates application telemetry against alert conditions.

- [posthog](https://robbiepalmer.me/technologies/posthog.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/023-application-observability-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Alert delivery

The destination that delivers operational alerts to the responsible person.

- [slack](https://robbiepalmer.me/technologies/slack.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/023-application-observability-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agent-friendly-remote-development](https://robbiepalmer.me/projects/agent-friendly-remote-development.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Node monitoring

Host and node health metrics for operated machines.

- [netdata](https://robbiepalmer.me/technologies/netdata.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Relational database engine

Transactional relational storage when a project needs it.

- [postgresql](https://robbiepalmer.me/technologies/postgresql.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Managed relational host

A managed host for the selected relational engine.

- [neon](https://robbiepalmer.me/technologies/neon.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Relational schema and access library

The code-owned schema, migrations, and typed query interface for a relational database.

- [drizzle](https://robbiepalmer.me/technologies/drizzle.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/017-relational-data-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Relational migration discipline

The repository and deployment rules for changing a shared relational database.

- Committed ordered migrations with drift checks and one serialized deployment runner: Accepted, 2026-10-19T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/035-web-api-data-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Relational backup and restore control

Provider-independent database archives, retention, key custody, and tested restoration.

- Encrypted PostgreSQL archives with tested restores: Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/017-relational-data-stack.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Preview database isolation

A disposable pull-request database rebuilt from committed migrations and synthetic fixtures.

- Fresh pull-request database from committed migrations and synthetic fixtures: Accepted, 2026-10-20T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/036-operated-capability-contracts.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Adopters: [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### OLAP engine

Analytical SQL processing when a project needs it.

- [duckdb](https://robbiepalmer.me/technologies/duckdb.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Object store

Durable storage for files, uploads, backups, datasets, and immutable artifact bytes.

- [cloudflare-r2](https://robbiepalmer.me/technologies/cloudflare-r2.md): Accepted, 2026-09-29T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/016-cloudflare-r2-object-storage.md); driven by [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md)
- Adopters: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)
- Layer consumers: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-finance-app](https://robbiepalmer.me/projects/personal-finance-app.md), [personal-knowledge-graph](https://robbiepalmer.me/projects/personal-knowledge-graph.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [work-graph](https://robbiepalmer.me/projects/work-graph.md)

### Dataset and evaluation artifact versioning

Versioned identities and transfer for datasets and evaluation artifacts kept outside Git.

- [dvc](https://robbiepalmer.me/technologies/dvc.md): Accepted, 2026-09-30T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/024-dvc-artifact-versioning.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md), [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [homelab](https://robbiepalmer.me/projects/homelab.md)
- Adopters: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [homelab](https://robbiepalmer.me/projects/homelab.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Layer consumers: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [homelab](https://robbiepalmer.me/projects/homelab.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)


## Initiatives

- [Semi-autonomous Software Development](https://robbiepalmer.me/initiatives/semi-autonomous-software-development.md): A connected system that keeps useful work moving, asks for human judgment when it matters, and learns how to need less intervention next time

## Architecture Decision Records

- [ADR 000: Temporal platform layers](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/000-temporal-platform-layers.md) — Accepted, 2026-09-12
- [ADR 001: TypeScript and Python language defaults](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md) — Accepted, 2026-09-12
- [ADR 002: Cloudflare Workers for backend APIs](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/002-cloudflare-workers.md) — Accepted, 2026-09-12
- [ADR 003: Terraform for infrastructure provisioning](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/003-terraform.md) — Accepted, 2026-09-12
- [ADR 004: Separate application telemetry from node monitoring](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md) — Accepted, 2026-09-12
- [ADR 005: Capability-specific database defaults](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md) — Accepted, 2026-09-12
- [ADR 006: Repository and delivery baseline](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/006-repository-delivery-baseline.md) — Accepted, 2026-09-15
- [ADR 007: TypeScript and Python toolchains](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/007-language-toolchains.md) — Accepted, 2026-09-15
- [ADR 008: React and Next.js for web applications](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/008-web-application-defaults.md) — Accepted, 2026-09-15
- [ADR 009: Terraform state and static checks](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/009-infrastructure-operations.md) — Accepted, 2026-09-15
- [ADR 010: Governance as non-technology defaults](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/010-governance-policy-values.md) — Accepted, 2026-09-15
- [ADR 011: Coding agents and AI review in the base layer](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/011-agentic-development-baseline.md) — Accepted, 2026-09-15
- [ADR 012: Trace platform defaults to evidence and adoption decisions](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/012-platform-decision-provenance.md) — Accepted, 2026-09-23
- [ADR 013: Separate build, artifact, host, workload, catalog, and deployment choices](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/013-build-runtime-standards.md) — Accepted, 2026-09-28
- [ADR 014: Hono and OpenAPI for backend APIs](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/014-hono-openapi.md) — Accepted, 2026-09-29
- [ADR 015: Spectral and oasdiff for API governance](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/015-api-governance.md) — Accepted, 2026-09-29
- [ADR 016: Cloudflare R2 for object storage](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/016-cloudflare-r2-object-storage.md) — Accepted, 2026-09-29
- [ADR 017: PostgreSQL access, connections, and recovery](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/017-relational-data-stack.md) — Accepted, 2026-09-29
- [ADR 018: Isolated pull-request preview environments](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/018-pull-request-preview-environments.md) — Accepted, 2026-09-29
- [ADR 019: Cloudflare Access for preview and service authentication](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/019-cloudflare-access-boundaries.md) — Accepted, 2026-09-29
- [ADR 020: Better Auth and Google OIDC for user authentication](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/020-better-auth-and-google-oidc.md) — Accepted, 2026-09-29
- [ADR 021: TanStack Query for client-side server state](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/021-tanstack-query-for-client-server-state.md) — Accepted, 2026-09-29
- [ADR 022: Tailscale for private networking](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/022-tailscale-private-networking.md) — Accepted, 2026-09-29
- [ADR 023: OpenTelemetry, PostHog, and Slack for application observability](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/023-application-observability-stack.md) — Accepted, 2026-09-29
- [ADR 024: DVC for dataset and evaluation artifact versioning](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/024-dvc-artifact-versioning.md) — Accepted, 2026-09-30
- [ADR 025: React component maintainability analysis](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/025-react-component-maintainability-analysis.md) — Accepted, 2026-10-04
- [ADR 026: Blocking React component budgets](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/026-blocking-react-component-budgets.md) — Accepted, 2026-10-04
- [ADR 027: Manage provider account foundations as code](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/027-account-foundations-as-code.md) — Proposed, 2026-10-08
- [ADR 028: Copier for monorepo project scaffolding](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/028-copier-monorepo-scaffolding.md) — Accepted, 2026-10-08
- [ADR 029: Backstage as the project catalog and scaffolding interface](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/029-backstage-project-control-plane.md) — Rejected, 2026-10-08
- [ADR 030: Repository-owned component identities and standard external coordinates](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/030-repository-owned-component-identities.md) — Accepted, 2026-10-09
- [ADR 031: Derive the technology and component catalog from repository declarations](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/031-derived-technology-component-catalog.md) — Accepted, 2026-10-14
- [ADR 032: Monorepo project and package layout](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/032-monorepo-project-package-layout.md) — Accepted, 2026-10-14
- [ADR 033: API and event contract standard](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/033-api-and-event-contract-standard.md) — Accepted, 2026-10-15
- [ADR 034: Identity and access capability contracts](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/034-identity-and-access-capability-contracts.md) — Accepted, 2026-10-15
- [ADR 035: Web, API, and data capability contracts](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/035-web-api-data-capability-contracts.md) — Accepted, 2026-10-19
- [ADR 036: Operated capability contracts](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/036-operated-capability-contracts.md) — Accepted, 2026-10-20
- [ADR 037: Capability promotion audit](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/037-capability-promotion-audit.md) — Accepted, 2026-10-20
- [ADR 038: Versioned Nix flake contract](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/038-versioned-nix-flake-contract.md) — Accepted, 2026-10-20
- [ADR 039: Versioned OpenTelemetry signal contract](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/039-versioned-opentelemetry-contract.md) — Accepted, 2026-10-20
- [ADR 040: Executable project profiles and resolved blueprints](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/040-executable-project-profile.md) — Accepted, 2026-10-21
- [ADR 041: Project-owned web features in shared frontend hosts](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/041-project-owned-web-features-in-shared-frontend-hosts.md) — Accepted, 2026-10-21
- [ADR 042: Project-owned UI in the shared application](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/042-project-owned-ui-in-the-shared-app.md) — Accepted, 2026-10-21
- [ADR 043: Explicit fulfillment status in resolved blueprints](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/043-explicit-blueprint-fulfillment-status.md) — Accepted, 2026-10-25
- [ADR 043: Portable workload intent with target-specific packaging](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/043-portable-workload-contract.md) — Accepted, 2026-10-24

## Product decisions

- [PDR 001: Publish project operational evidence with its limits](https://robbiepalmer.me/projects/personal-engineering-platform/pdrs/001-project-operational-evidence.md) · Accepted

---

Markdown index of this site: https://robbiepalmer.me/llms.txt
