Blame · Line-by-line history
decisions-log.md
Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.
| d0bc8c2 | 1 | # GlueCron — Decisions Log |
| 2 | ||
| 3 | > Append-only. Never delete entries. Each decision records what, why, and any constraints. | |
| 4 | ||
| 5 | ## 2026-04-16 | |
| 6 | ||
| 7 | ### D001: Fly.io for hosting | |
| 8 | - **Decision:** Deploy on Fly.io instead of Hetzner/Render/Railway | |
| 9 | - **Why:** Persistent volumes for git repos, auto-migration on release, London region, simple Dockerfile deploy. Hetzner CLI was unusable. Render doesn't support persistent volumes well. Railway lacks volume persistence. | |
| 10 | - **Constraint:** Single server for now (shared-cpu-1x, 512MB). Scale vertically first. | |
| 11 | ||
| 12 | ### D002: Bun runtime (not Node.js) | |
| 13 | - **Decision:** Bun for all runtime, testing, and package management | |
| 14 | - **Why:** 2-4x faster than Node.js, native TypeScript, built-in test runner, faster installs | |
| 15 | - **Constraint:** Some TypeScript strictness issues with Uint8Array (Bun uses ArrayBufferLike) | |
| 16 | ||
| 17 | ### D003: Server-side rendering only (no client JS framework) | |
| 18 | - **Decision:** Hono JSX for all rendering, no React/Vue/Svelte client-side | |
| 19 | - **Why:** Fastest possible page loads, zero JS bundle, simpler architecture | |
| 20 | - **Constraint:** Limits interactivity. SSE provides real-time updates without full SPA. | |
| 21 | - **Revisit when:** User demand for rich interactions exceeds what SSR+SSE can deliver | |
| 22 | ||
| 23 | ### D004: Neon PostgreSQL (serverless) | |
| 24 | - **Decision:** Neon for database, Drizzle ORM for schema/queries | |
| 25 | - **Why:** Serverless scaling, branching for dev, no connection pool management | |
| 26 | - **Constraint:** Cold starts on first query per session. Mitigated by connection caching. | |
| 27 | ||
| 28 | ### D005: Flywheel over static rules | |
| 29 | - **Decision:** AI reviews learn from historical outcomes instead of static rule files | |
| 30 | - **Why:** Rules rot. The flywheel improves automatically as developers accept/reject suggestions. | |
| 31 | - **Constraint:** Needs minimum ~20 review outcomes before patterns emerge. Cold start is stateless. | |
| 32 | ||
| 33 | ### D006: Free SBOM export | |
| 34 | - **Decision:** Ship SPDX + CycloneDX for free, no paywall | |
| 35 | - **Why:** GitHub gates this behind enterprise pricing. Free SBOM is a differentiator. | |
| 36 | - **Constraint:** Currently only parses declared dependencies, not transitive. | |
| 37 | ||
| 38 | ### D007: GateTest as self-healing loop (planned) | |
| 39 | - **Decision:** GateTest will continuously test, auto-fix, and resubmit | |
| 40 | - **Why:** Zero human intervention for routine failures. The platform heals itself. | |
| 41 | - **Constraint:** Need to define repair boundaries — what can be auto-fixed vs what needs human review. | |
| 42 | ||
| 43 | ### D008: Memory system for agent continuity | |
| 44 | - **Decision:** Markdown state files + enhanced CLAUDE.md session protocols | |
| 45 | - **Why:** Context loss across sessions causes repeated work. Memory files bridge the gap. | |
| 46 | - **Constraint:** Files must be kept under 500 lines each to fit in agent context windows. |