Professional notes by Craig Johnston
long-form, short-form, working drafts · since 2008
long-form, short-form, working drafts · since 2008
VOL. XIX · MMXXVI
82 NOTES IN PRINT
82 NOTES IN PRINT
Latest note · folio diagram
flowchart TB
A([Agent edits code]) --> B{{git commit}}
B --> H[/PreToolUse hook/]
H --> C{Trivial diff?<br/>Doc-only?<br/>Plan mode?}
C -->|yes| OK([allow commit])
C -->|no| D{Artifact valid?<br/>hash matches?<br/>verdict CLEAN?}
D -->|yes| OK
D -->|no| DENY[/deny + return<br/>review prompt/]
DENY --> SUB([general-purpose<br/>sub-agent review])
SUB --> F{Findings?}
F -->|N findings| FIX([fix in working tree])
FIX --> SUB
F -->|CLEAN| ART[(write artifact:<br/>diff hash + verdict)]
ART --> B
A pull request shouldn’t need four review rounds. But that’s what I kept getting from Claude Code: write code, run tests, claim done, ask for review, find real problems, fix, push, ask again, find more, fix, …
Recent Notes
LXXXI
The Two Failure Modes That Break Your AI Data Agent
A Case Study in Agent Psychology
26 FEB 2026
LXXXPostgreSQL to OpenSearch with PySpark on Kubernetes
Date-windowed ETL, idempotent upserts, and CronJob scheduling
25 FEB 2026
LXXIXGoReleaser with Cosign Signing and Syft SBOM
Signed Builds and Supply Chain Security for Go Projects
11 FEB 2026
LXXVIIIAI on a Leash: Complete Go Project Configuration
AI on a Leash for Go
09 FEB 2026
LXXVIIRalph's Uncle
AI on a Leash
06 FEB 2026
LXXVIGo's Constraints and Idioms Make AI Coding Better
From Vibe Coding to Vibe Engineering
04 FEB 2026
LXXVMCP Is Flawed. Build With It Anyway.
Context has always been the hard problem. MCP forces you to solve it.
20 JAN 2026
LXXIVAI Data Lake Access with MCP and S3
Building composable MCP servers for object storage
19 JAN 2026
LXXIIIAI Data Warehouse Access with MCP and Trino
Building composable MCP servers for enterprise data
17 JAN 2026
LXXIIkubefwd: Forward Kubernetes Services to Localhost by Name
One command, no configuration, automatic reconnection
04 JAN 2026
LXXIkubefwd in 2026: Interactive TUI and Auto-Reconnect
The complete guide to kubefwd's new features
04 JAN 2026
LXXAI-Assisted Kubernetes Development with kubefwd
Let your AI assistant manage cluster connections
04 JAN 2026
LXIXApache NiFi: Dynamic HTTP Listeners with portpxy
Apache NiFi Part 5
20 APR 2023
LXVIIIApache NiFi: JOLT Transformations Part 2
Apache NiFi Part 4
15 FEB 2023
LXVIIApache NiFi: JOLT Transformations Part 1
Apache NiFi Part 3
10 DEC 2022
LXVIApache NiFi: Securing Your Data Flows
Apache NiFi Part 2
05 OCT 2022
LXVApache NiFi: Production Kubernetes Deployment
Apache NiFi Part 1
30 JUL 2022
LXIVLinear Algebra in Go: High-Performance Computing
Linear Algebra in Go Part 10
25 MAY 2022
LXIIILinear Algebra in Go: Neural Network Foundations
Linear Algebra in Go Part 9
20 MAR 2022
LXIILinear Algebra in Go: PCA Implementation
Linear Algebra in Go Part 8
15 JAN 2022
LXILinear Algebra in Go: Building a Regression Library
Linear Algebra in Go Part 7
10 NOV 2021
LXLinear Algebra in Go: Statistics and Data Analysis
Linear Algebra in Go Part 6
05 SEP 2021
LIXLinear Algebra in Go: SVD and Decompositions
Linear Algebra in Go Part 5
30 JUN 2021
LVIIILinear Algebra in Go: Eigenvalue Problems
Linear Algebra in Go Part 4
25 APR 2021
LVIILinear Algebra in Go: Solving Linear Systems
Linear Algebra in Go Part 3
20 FEB 2021
LVILinear Algebra in Go: Matrix Fundamentals
Linear Algebra in Go Part 2
15 DEC 2020
LVLinear Algebra in Go: Vectors and Basic Operations
Linear Algebra in Go Part 1
10 OCT 2020
LIIIAdvanced Platform Development with Kubernetes
Enabling Data Management, the Internet of Things, Blockchain, and Machine Learning
30 AUG 2020
LIVLinear Algebra: Practical Applications in ML
Linear Algebra Crash Course for Programmers Part 12
30 AUG 2020
LIILinear Algebra: Principal Component Analysis
Linear Algebra Crash Course for Programmers Part 11
25 JUN 2020