<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Curiosity</title><description>Everything worth knowing, modelled.</description><link>https://curiosity.local/</link><item><title>12 load-bearing claims behind harness engineering</title><link>https://curiosity.local/notes/0045/</link><guid isPermaLink="true">https://curiosity.local/notes/0045/</guid><description>Lectures from walkinglabs distilling the load-bearing claims about agent harnesses — why infrastructure outside the weights, not the model itself, governs how much capability gets realized.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>harness-engineering</category><category>new</category><category>agents</category><category>harness</category><category>course</category><category>reference</category></item><item><title>KV cache: the engine behind fast LLM inference</title><link>https://curiosity.local/notes/0043/</link><guid isPermaLink="true">https://curiosity.local/notes/0043/</guid><description>Generating token N means attending to tokens 1..N-1. Recomputing their key/value tensors every step turns O(n) work into O(n²). Caching K and V is what makes real-time LLM streaming possible.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>llm</category><category>new</category><category>llm</category><category>inference</category><category>transformers</category><category>performance</category></item><item><title>Enable LSP in Claude Code for semantic code navigation</title><link>https://curiosity.local/notes/0035/</link><guid isPermaLink="true">https://curiosity.local/notes/0035/</guid><description>Claude Code navigates code with grep by default — slow and fuzzy. Enabling the official LSP plugins gives the agent semantic goToDefinition and findReferences instead. Install, enable, restart.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>claude-code</category><category>new</category><category>claude-code</category><category>lsp</category><category>plugins</category><category>productivity</category></item><item><title>10 architectural patterns behind Claude Code</title><link>https://curiosity.local/notes/0034/</link><guid isPermaLink="true">https://curiosity.local/notes/0034/</guid><description>Reverse-engineered from npm source maps, these 10 design decisions explain why Claude Code is fast, safe, and recoverable under production conditions.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>claude-code</category><category>new</category><category>claude-code</category><category>architecture</category><category>internals</category><category>agents</category><category>reference</category></item><item><title>Git submodules without surprise detached HEADs</title><link>https://curiosity.local/notes/0031/</link><guid isPermaLink="true">https://curiosity.local/notes/0031/</guid><description>Submodules embed one repo inside another by pinning a commit, not a branch. Knowing that single fact prevents most of the pain — detached HEADs, missed pushes, and silent divergence after a pull.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>dependencies</category></item><item><title>Branching strategies: Git Flow, GitHub Flow, trunk-based</title><link>https://curiosity.local/notes/0030/</link><guid isPermaLink="true">https://curiosity.local/notes/0030/</guid><description>How the three dominant branching models differ in branch count, integration cadence, and release rhythm — and how to pick one based on your release model, not the model&apos;s brand.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>workflow</category></item><item><title>Stacked diffs: commits as review units</title><link>https://curiosity.local/notes/0029/</link><guid isPermaLink="true">https://curiosity.local/notes/0029/</guid><description>Treat each commit (or tiny branch) as the unit of review, not a large feature branch. Smaller reviews, less waiting, better commit hygiene — and a non-trivial rebase tax to pay.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>review</category><category>workflow</category></item><item><title>Ignoring files beyond .gitignore</title><link>https://curiosity.local/notes/0028/</link><guid isPermaLink="true">https://curiosity.local/notes/0028/</guid><description>Local-only ignores, untracking already-tracked files, hiding local edits to tracked files, and a global ignore for OS junk — the four problems .gitignore alone doesn&apos;t solve.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>workflow</category></item><item><title>Finding the commit that broke it with git bisect</title><link>https://curiosity.local/notes/0027/</link><guid isPermaLink="true">https://curiosity.local/notes/0027/</guid><description>Binary search across commit history to find the first bad commit. Works manually or fully automated with a script — turning a needle-in-a-haystack search into log2(n) steps.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>debugging</category></item><item><title>Three ways to squash, and when each is right</title><link>https://curiosity.local/notes/0026/</link><guid isPermaLink="true">https://curiosity.local/notes/0026/</guid><description>Interactive rebase, soft reset, and merge --squash all collapse commits into fewer commits. They differ in granularity, on which branch they leave the result, and how much history they preserve.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>history</category></item><item><title>Git rebase without losing work</title><link>https://curiosity.local/notes/0025/</link><guid isPermaLink="true">https://curiosity.local/notes/0025/</guid><description>What rebase actually does to your commits, how to drive the interactive form, and the recovery moves that keep a bad rebase from becoming a lost-work incident.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>history</category></item><item><title>Git worktrees for parallel branch work</title><link>https://curiosity.local/notes/0024/</link><guid isPermaLink="true">https://curiosity.local/notes/0024/</guid><description>How and when to use git worktree to keep multiple branches checked out at once, sharing one object store, without the disk cost or coordination headaches of multiple clones.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><category>git</category><category>git</category><category>workflow</category></item><item><title>AWS Secrets Manager pricing model</title><link>https://curiosity.local/notes/0023/</link><guid isPermaLink="true">https://curiosity.local/notes/0023/</guid><description>Secrets Manager charges two ways at once: a flat per-secret-month fee plus a per-API-call fee. Understanding the split is what lets you predict the bill and decide whether to cache.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>secrets-manager</category><category>cost</category></item><item><title>Verifying AWS DNS records with nslookup</title><link>https://curiosity.local/notes/0022/</link><guid isPermaLink="true">https://curiosity.local/notes/0022/</guid><description>Four `nslookup` recipes for verifying that the CNAME, MX, and TXT records you published for CloudFront, ACM, SES DKIM, and SES MAIL FROM actually resolve before AWS does.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>dns</category><category>nslookup</category><category>ses</category><category>acm</category><category>cloudfront</category></item><item><title>ACM certificate DNS validation</title><link>https://curiosity.local/notes/0021/</link><guid isPermaLink="true">https://curiosity.local/notes/0021/</guid><description>How AWS Certificate Manager proves you control a domain before issuing a TLS cert: ACM publishes a `_&lt;hash&gt;.domain` CNAME challenge, you copy it to DNS, and renewal stays automatic forever after.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>acm</category><category>dns</category><category>tls</category></item><item><title>Custom MAIL FROM domain in AWS SES</title><link>https://curiosity.local/notes/0020/</link><guid isPermaLink="true">https://curiosity.local/notes/0020/</guid><description>Why DMARC alignment forces you to publish a custom MAIL FROM subdomain in SES, and how to set up the MX + SPF records that prove SES can send on its behalf.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>ses</category><category>dns</category><category>email</category><category>dmarc</category></item><item><title>DKIM verification with AWS SES Easy DKIM</title><link>https://curiosity.local/notes/0019/</link><guid isPermaLink="true">https://curiosity.local/notes/0019/</guid><description>How AWS SES proves you own a sending domain: three CNAME tokens published to your DNS host let SES sign outbound mail with DKIM on your behalf.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>devops</category><category>aws</category><category>ses</category><category>dns</category><category>email</category></item><item><title>OAuth 2.0 authorization code flow, step by step</title><link>https://curiosity.local/notes/0018/</link><guid isPermaLink="true">https://curiosity.local/notes/0018/</guid><description>The seven-step dance behind &apos;Log in with Google&apos;. Why the redirects exist, why the code is swapped for the token server-to-server, and where PKCE plugs the public-client hole.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>security</category><category>authentication</category><category>oauth</category><category>identity</category></item><item><title>Passwordless authentication: OTP, SSO, and OAuth/OIDC</title><link>https://curiosity.local/notes/0017/</link><guid isPermaLink="true">https://curiosity.local/notes/0017/</guid><description>When you stop asking users for a password, what do you verify instead? Three answers — OTP proves channel ownership, SSO and OAuth/OIDC delegate identity to a trusted issuer.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>security</category><category>authentication</category><category>identity</category></item><item><title>Password auth: HTTP Basic vs session cookies vs tokens</title><link>https://curiosity.local/notes/0016/</link><guid isPermaLink="true">https://curiosity.local/notes/0016/</guid><description>How a server remembers an authenticated user across HTTP&apos;s stateless requests — Basic resends credentials, session cookies pin server-side state, tokens carry signed claims. The tradeoffs that pick one.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>security</category><category>authentication</category><category>http</category></item><item><title>PGP encryption: keys, signatures, and what they actually protect</title><link>https://curiosity.local/notes/0015/</link><guid isPermaLink="true">https://curiosity.local/notes/0015/</guid><description>PGP gives you two independent guarantees — secrecy via encryption with the recipient&apos;s public key, and authenticity via signing with your own private key. Most production uses want both, in that order.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>security</category><category>cryptography</category><category>encryption</category></item><item><title>Hashing passwords (not encrypting them)</title><link>https://curiosity.local/notes/0014/</link><guid isPermaLink="true">https://curiosity.local/notes/0014/</guid><description>Why passwords are hashed, never encrypted; why fast hashes like SHA-256 are wrong for this job; and how Argon2id / bcrypt / scrypt buy you decades against an attacker with the database.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>security</category><category>authentication</category><category>cryptography</category></item><item><title>Multi-factor weighted sorting for relevance</title><link>https://curiosity.local/notes/0013/</link><guid isPermaLink="true">https://curiosity.local/notes/0013/</guid><description>Combine several signals into one comparable score by normalising each to [0,1] and taking a weighted sum. The maths is trivial; the trap is mixing raw, unbounded quantities and letting one signal dominate the rest.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>ranking</category><category>search</category><category>recommendation</category></item><item><title>Consistent hashing</title><link>https://curiosity.local/notes/0012/</link><guid isPermaLink="true">https://curiosity.local/notes/0012/</guid><description>How consistent hashing distributes keys across a changing set of nodes while keeping the number of re-mapped keys proportional to the change — and why naive modulo sharding falls apart the moment a node joins or leaves.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>distributed-systems</category><category>caching</category><category>sharding</category></item><item><title>Scaling MySQL before sharding</title><link>https://curiosity.local/notes/0011/</link><guid isPermaLink="true">https://curiosity.local/notes/0011/</guid><description>Sharding adds an order of magnitude of complexity. Exhaust the cheaper options first — split the DB onto its own host, add a cache, add read replicas, scale the box up — and only shard when those run out.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>scaling</category><category>replication</category><category>caching</category><category>architecture</category></item><item><title>Create a read-only MySQL user</title><link>https://curiosity.local/notes/0010/</link><guid isPermaLink="true">https://curiosity.local/notes/0010/</guid><description>How to create a least-privilege MySQL account for analytics or support — and the specific grants, host restrictions, and cleanup steps that keep it least-privilege over time.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>security</category><category>permissions</category><category>operations</category></item><item><title>ALTER TABLE without locking large tables</title><link>https://curiosity.local/notes/0009/</link><guid isPermaLink="true">https://curiosity.local/notes/0009/</guid><description>ALGORITHM=INPLACE, LOCK=NONE lets DDL run while reads and writes continue. Works for many but not all alterations — knowing which is the difference between zero downtime and a stuck production.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>ddl</category><category>online-ddl</category><category>operations</category></item><item><title>OR vs IN vs BETWEEN for multi-value WHERE</title><link>https://curiosity.local/notes/0008/</link><guid isPermaLink="true">https://curiosity.local/notes/0008/</guid><description>For matching a column against several values, IN beats OR by orders of magnitude (binary search vs linear), and BETWEEN beats IN when the values form a contiguous range.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>sql</category><category>indexing</category><category>where-clause</category></item><item><title>Reading MySQL EXPLAIN output</title><link>https://curiosity.local/notes/0007/</link><guid isPermaLink="true">https://curiosity.local/notes/0007/</guid><description>How to read the EXPLAIN plan column by column — type, key, rows, filtered, Extra — what the values mean, what to fix, and how the driving table cascades through JOINs.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>sql</category><category>explain</category><category>query-planning</category><category>indexing</category></item><item><title>EXISTS vs JOIN for filtering</title><link>https://curiosity.local/notes/0006/</link><guid isPermaLink="true">https://curiosity.local/notes/0006/</guid><description>JOIN multiplies rows then dedupes; EXISTS short-circuits at the first match. For pure filtering, EXISTS is the semantically correct choice — no DISTINCT, no optimizer roulette.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>sql</category><category>joins</category><category>exists</category><category>query-planning</category></item><item><title>SQL execution order for query optimization</title><link>https://curiosity.local/notes/0005/</link><guid isPermaLink="true">https://curiosity.local/notes/0005/</guid><description>The logical order MySQL runs your SELECT — FROM/JOIN, WHERE, GROUP BY, HAVING, SELECT, ORDER BY/LIMIT — and the optimization hook each stage gives you.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>mysql</category><category>sql</category><category>optimization</category><category>indexing</category><category>sargable</category></item><item><title>Use Claude Code /compact command effectively</title><link>https://curiosity.local/notes/0004/</link><guid isPermaLink="true">https://curiosity.local/notes/0004/</guid><description>When and how to use Claude Code&apos;s /compact — what it actually does, the signals that say it&apos;s time, and the prompt patterns that produce a clean handoff.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>claude-code</category><category>new</category><category>claude-code</category><category>context</category><category>productivity</category><category>slash-commands</category></item><item><title>Authoring guide &amp; block reference</title><link>https://curiosity.local/notes/0000/</link><guid isPermaLink="true">https://curiosity.local/notes/0000/</guid><description>Every block in the Curiosity library, demonstrated. Doubles as a live styleguide and as the prompt context for an agent creating new notes.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate><category>meta</category><category>authoring</category><category>blocks</category><category>reference</category></item><item><title>JPA N+1 query problem</title><link>https://curiosity.local/notes/0001/</link><guid isPermaLink="true">https://curiosity.local/notes/0001/</guid><description>Why lazy associations trigger N+1 queries, how to detect them, and the four standard fixes.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>java</category><category>jpa</category><category>hibernate</category><category>performance</category><category>sql</category></item><item><title>Idempotency keys on write endpoints</title><link>https://curiosity.local/notes/0003/</link><guid isPermaLink="true">https://curiosity.local/notes/0003/</guid><description>Why every non-GET endpoint that touches money or external state needs an idempotency key, and how to implement one without footguns.</description><pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate><category>system-design</category><category>api</category><category>reliability</category><category>distributed-systems</category></item><item><title>Use subagents to protect the main context</title><link>https://curiosity.local/notes/0002/</link><guid isPermaLink="true">https://curiosity.local/notes/0002/</guid><description>Subagents are not just for parallelism — their real value is keeping irrelevant tool output out of the parent conversation.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate><category>claude-code</category><category>agents</category><category>context</category><category>productivity</category></item></channel></rss>