ADR-0001: Technology stack ​
Status: accepted (2026-10-12)
Decision ​
- Runtime: Node.js 22 LTS (>= 22.18), TypeScript strict, ESM. Sources run through Node type stripping, so only erasable syntax is allowed and relative imports carry
.tsextensions. No build step for services;tscis used for type checking only. - Monorepo: pnpm workspaces + Turborepo. Workspace packages export
src/index.tsdirectly. - HTTP: Fastify (no NestJS). GitHub:
@octokit/webhooks+@octokit/app, no Probot. - Database: PostgreSQL 17 with pgvector and pg_textsearch (PostgreSQL License) for BM25;
ts_rank_cdfallback for managed Postgres without the extension. Driverpg, schema and migrations with Drizzle. - Queue and cache: BullMQ (OSS) on Valkey 9 (BSD-3-Clause) via ioredis. Redis 8 is excluded (AGPL/SSPL/RSAL). BullMQ's PostgreSQL backend is an optional small-install profile after load testing.
- Validation: zod. Logging: pino. Telemetry: OpenTelemetry (OTLP, off without endpoint).
- Tests: vitest, Testcontainers for Postgres/Valkey,
fastify.inject()for HTTP. - Observability bundle (optional): OTel Collector, Prometheus, Jaeger, Perses. Default is bring-your-own OTLP backend.
License policy ​
The open core, everything outside hosted/, is Apache-2.0. The hosted edition in hosted/ is proprietary under hosted/LICENSE (a placeholder until counsel provides the final text); its packages are private and declare UNLICENSED, and no open-core package may depend on them (ADR-0015). pnpm verify:licenses checks both. Dependency licenses are enforced by licenses/policy.yaml and licenses/exceptions.yaml through pnpm verify:licenses: bundled code is MIT/Apache-2.0 (plus listed permissive licenses transitively); copyleft and source-available licenses are denied in product code; dev-only exceptions are recorded explicitly.
Consequences ​
- TypeScript features that require emit (enums, namespaces, parameter properties) are unavailable.
- typescript-eslint pins TypeScript to the 6.0 line until it supports 7.x.