<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Charles Sieg's Latest Posts</title>
  <link href="https://charlessieg.com" />
  <link href="https://charlessieg.com/atom.xml" rel="self" type="application/atom+xml" />
  <id>https://charlessieg.com</id>
  <updated>2026-07-06T23:59:00Z</updated>
  <author>
    <name>Charles Sieg</name>
    <email>charles.sieg@renkara.com</email>
  </author>
  <subtitle><![CDATA[Atom feed for Charles Sieg's blog]]></subtitle>
  <entry>
    <title><![CDATA[Leverage Record: July 6, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-07-06-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-07-06-leverage-record.html</id>
    <updated>2026-07-06T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Six tasks. July 6, 2026 weighted to 8.3x leverage across 72.0 human-equivalent hours in 520 Claude-minutes. Supervisory leverage closed at 86.4x. Model benchmarking and content-generation routing ran the day: a 30-subject three-model synthesis-quality benchmark, an entailment-floor re-validation that rescued 27 of 33 partial packages, a beta-tier expansion from 44 to 106 packages, and per-domain model routing for the retrieval-answering service.</p>
<p class="mb-4 font-light font-serif">1.8 weeks of human-equivalent throughput in 8.7 hours of Claude wall-clock. The 10.1x ceiling came from Ran a per-subject synthesis-quality benchmark: three candidate models x 30 subjects (13 academic subjects, 17 world-language courses), using a per-phase...; the 3.4x floor sat at Math-content model bake-off for the retrieval-answering service: built a four-model x math-course direct A/B harness (80 MCQs); one candidate model came out....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Ran a per-subject synthesis-quality benchmark: three candidate models x 30 subjects (13 academic subjects, 17 world-language courses), using a per-phase benchmark harness plus an NLI model-server; produced a detailed report with per-subject winners and good/bad example content nodes</td>
      <td>16.0h</td>
      <td>95m</td>
      <td>10m</td>
      <td>10.1x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Ran an entailment-floor re-validation/salvage pass that rescued 27 of 33 partial content packages, backfilled activities across 4 files, ran a lessons generator, wired up auto-promotion, and did documentation cleanup</td>
      <td>20.0h</td>
      <td>130m</td>
      <td>12m</td>
      <td>9.2x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Beta-tier package expansion (44 to 106): migrated the content-generation pipeline to a new candidate model (question sets, exam tips, plus a new post-extraction lessons generator), root-caused a provider-contention issue, provider dedup (merged duplicate provider identifiers, consolidated overlapping test-prep categories), then ran a 29-package synthesis batch through the auto-promotion pipeline</td>
      <td>28.0h</td>
      <td>185m</td>
      <td>18m</td>
      <td>9.1x</td>
      <td>93.3x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Per-domain model routing for the retrieval-answering service via a config registry: math-domain content (detected via a content-type signal) now routes to a reasoning-tier candidate model; added an answering-service role, a content-type override, a model-resolution helper, and extra max-tokens headroom for reasoning responses; wired the routing through the relevant services and smoke-tested math-domain answering; tests green</td>
      <td>3.5h</td>
      <td>35m</td>
      <td>3m</td>
      <td>6.0x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Per-category response-budget right-sizing for the retrieval-answering service: cut the reasoning max-tokens budget from 16384 to 2048 and made the token budget configurable per category in the model-routing registry (a config resolver returns model plus budget, with a per-response override, extensible to other test-prep categories via a content-signal map); ran an accuracy/latency A/B between two candidate models on math content (75-76% vs 77% accuracy, about 15x latency difference); 2 services, tests green</td>
      <td>2.5h</td>
      <td>40m</td>
      <td>3m</td>
      <td>3.8x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Math-content model bake-off for the retrieval-answering service: built a four-model x math-course direct A/B harness (80 MCQs); one candidate model came out best on accuracy and latency (92.5% accuracy, fastest at about 0.5s). Switched math routing to a two-model fallback list, added a new inference provider plus fallback-list resolution and extra reasoning headroom to the model-routing registry; 2 services, 54+84 tests green</td>
      <td>2.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>3.4x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>6</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>72.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>520</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>50</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,690,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>8.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>86.4x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 10.1x ceiling came from Ran a per-subject synthesis-quality benchmark: three candidate models x 30 subjects (13 academic subjects, 17 world-language courses), using a per-phase...; the 3.4x floor was Math-content model bake-off for the retrieval-answering service: built a four-model x math-course direct A/B harness (80 MCQs); one candidate model came out.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The broad benchmark that produced a single comprehensive report sat at the top; the fine-grained model bake-offs at the bottom were measurement-heavy and iterative, with repeated A/B accuracy and latency runs that resist compression.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (86.4x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 6 tasks, the day produced roughly 1.8 weeks of senior-engineer-equivalent throughput in 8.7 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: July 5, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-07-05-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-07-05-leverage-record.html</id>
    <updated>2026-07-05T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. July 5, 2026 weighted to 7.3x leverage across 20.0 human-equivalent hours in 165 Claude-minutes. Supervisory leverage closed at 85.7x. A focused two-task engineering day: content-remediation tooling (a confirmation-sweep harness across models, question re-anchoring, node regeneration) and a pluggable provider-registry refactor for the retrieval-answering service.</p>
<p class="mb-4 font-light font-serif">0.5 weeks of human-equivalent throughput in 2.8 hours of Claude wall-clock. The 8.0x ceiling came from Content-remediation tooling: confirmation-sweep harness across candidate generation models, live-package question re-anchoring, critical-goal promotion...; the 6.0x floor sat at Pluggable provider registry for the RAG answerer (mirrors the content-generation pipeline&#39;s provider-loading logic), adding a new candidate generation model....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Content-remediation tooling: confirmation-sweep harness across candidate generation models, live-package question re-anchoring, critical-goal promotion, confirmed-error node regeneration (4 new tools plus fixes)</td>
      <td>14.0h</td>
      <td>105m</td>
      <td>10m</td>
      <td>8.0x</td>
      <td>84.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Pluggable provider registry for the RAG answerer (mirrors the content-generation pipeline&#39;s provider-loading logic), adding a new candidate generation model provider; refactored hardcoded per-model branching into style-dispatched dispatch; caching-path generalization to support an additional provider&#39;s compatible endpoint; provider key-resolution fix (dedicated key wins over generic key); 44 tests; ran a 5-package non-omniscient sample (4526 answers, 0 auth errors)</td>
      <td>6.0h</td>
      <td>60m</td>
      <td>4m</td>
      <td>6.0x</td>
      <td>90.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>20.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>165</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>14</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>870,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>7.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>85.7x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 8.0x ceiling came from Content-remediation tooling: confirmation-sweep harness across candidate generation models, live-package question re-anchoring, critical-goal promotion...; the 6.0x floor was Pluggable provider registry for the RAG answerer (mirrors the content-generation pipeline&#39;s provider-loading logic), adding a new candidate generation model.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">Both tasks were build-and-verify work backed by test suites, which lands them in the moderate-leverage band; it was the smallest day by human-equivalent output in this stretch, about half a week.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (85.7x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 0.5 weeks of senior-engineer-equivalent throughput in 2.8 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: July 4, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-07-04-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-07-04-leverage-record.html</id>
    <updated>2026-07-04T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. July 4, 2026 weighted to 6.4x leverage across 74.0 human-equivalent hours in 690 Claude-minutes. Supervisory leverage closed at 185.0x. Two long overnight operations dominated: a multi-model benchmark harness paired with full beta content remediation, and a validation sweep of the retrieval-answering service that root-caused a stale-path defect and swept 292 packages.</p>
<p class="mb-4 font-light font-serif">1.9 weeks of human-equivalent throughput in 11.5 hours of Claude wall-clock. The 6.7x ceiling came from Overnight run on the platform: a multi-model benchmark harness, a phase-routing config, a general misconceptions generator, and full beta content remediation...; the 5.6x floor sat at Overnight validation sweep of the retrieval-answering service: brought up its 8-service stack; root-caused and fixed a critical stale package-path defect (it....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Overnight run on the platform: a multi-model benchmark harness, a phase-routing config, a general misconceptions generator, and full beta content remediation (44/44 beta candidate-ready, including 3 math course bundles)</td>
      <td>60.0h</td>
      <td>540m</td>
      <td>15m</td>
      <td>6.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Overnight validation sweep of the retrieval-answering service: brought up its 8-service stack; root-caused and fixed a critical stale package-path defect (it was reading from a retired path inside the inference engine instead of the canonical output of the content-generation pipeline, so its answer index loaded empty and readiness plateaued); built a catalog-driven profile generator with a self-correcting readiness gate; swept 292 live+beta packages at concurrency 2 (292/292 pass); reloaded and tested 13 beta packages after question-bank generation</td>
      <td>14.0h</td>
      <td>150m</td>
      <td>9m</td>
      <td>5.6x</td>
      <td>93.3x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>74.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>690</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>24</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,300,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>6.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>185.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 6.7x ceiling came from Overnight run on the platform: a multi-model benchmark harness, a phase-routing config, a general misconceptions generator, and full beta content remediation...; the 5.6x floor was Overnight validation sweep of the retrieval-answering service: brought up its 8-service stack; root-caused and fixed a critical stale package-path defect (it.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">With only two tasks, both wall-clock-heavy overnight sweeps (540 and 150 model-minutes), the leverage is low by construction; these are long-running validation runs rather than tightly-scoped authoring. The supervisory figure tells the complementary story: two short prompts set 74 human-equivalent hours in motion.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (185.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 1.9 weeks of senior-engineer-equivalent throughput in 11.5 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: July 2, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-07-02-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-07-02-leverage-record.html</id>
    <updated>2026-07-02T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Three tasks. July 2, 2026 weighted to 10.3x leverage across 32.0 human-equivalent hours in 187 Claude-minutes. Supervisory leverage closed at 61.9x. A smaller, infrastructure-heavy day: a structured-output benchmark across several candidate models that surfaced three live bugs, overnight kernel-panic incident recovery, and synthesis-pipeline parallelization and decoupling.</p>
<p class="mb-4 font-light font-serif">0.8 weeks of human-equivalent throughput in 3.1 hours of Claude wall-clock. The 20.0x ceiling came from Built and ran a structured-output benchmark across several candidate models (via an internal inference service); found live bugs in inference-auth, forced...; the 7.6x floor sat at Synthesis-pipeline work: dual-run six-way parallelization, decoupled the job-orchestration service from the inference engine (directory-path config fix across....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Built and ran a structured-output benchmark across several candidate models (via an internal inference service); found live bugs in inference-auth, forced tool-choice temperature handling, and a cost-accounting cache path</td>
      <td>10.0h</td>
      <td>30m</td>
      <td>8m</td>
      <td>20.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Diagnosed an overnight kernel panic (watchdog timeout from out-of-memory conditions during parallel synthesis) and safely restarted an interrupted 14-package academic-curriculum synthesis batch: offloaded models to shared NLI/embedding servers, fixed runtime-mode and directory-path configuration, cleaned up orphaned jobs, and added a serial orchestrator with memory watchdog, checkpoint/resume, and archive backup</td>
      <td>8.0h</td>
      <td>47m</td>
      <td>3m</td>
      <td>10.2x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Synthesis-pipeline work: dual-run six-way parallelization, decoupled the job-orchestration service from the inference engine (directory-path config fix across 11 scripts, plus test and completeness-gate fixes), and drafted an isolation-architecture plan for the platform</td>
      <td>14.0h</td>
      <td>110m</td>
      <td>20m</td>
      <td>7.6x</td>
      <td>42.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>32.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>187</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>31</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>980,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>10.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>61.9x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 20.0x ceiling came from Built and ran a structured-output benchmark across several candidate models (via an internal inference service); found live bugs in inference-auth, forced...; the 7.6x floor was Synthesis-pipeline work: dual-run six-way parallelization, decoupled the job-orchestration service from the inference engine (directory-path config fix across.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The lower task count and the weight of debugging and incident recovery pulled the day&#39;s leverage down; recovery and pipeline decoupling are iterative and verification-heavy, the classic lower-leverage shape.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (61.9x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 3 tasks, the day produced roughly 0.8 weeks of senior-engineer-equivalent throughput in 3.1 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: July 1, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-07-01-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-07-01-leverage-record.html</id>
    <updated>2026-07-01T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-two tasks. July 1, 2026 weighted to 29.4x leverage across 518.5 human-equivalent hours in 1059 Claude-minutes. Supervisory leverage closed at 198.2x. This was a structured-content authoring marathon: 42 tasks, most of them knowledge-taxonomy specifications for certifications, language courses, and academic subjects generated through web-grounded agent fan-outs, plus two full manuscript editorial reviews. It was the highest single-day human-equivalent output in this stretch, roughly thirteen weeks.</p>
<p class="mb-4 font-light font-serif">13.0 weeks of human-equivalent throughput in 17.6 hours of Claude wall-clock. The 80.0x ceiling came from Author a civics and government knowledge taxonomy; the 5.0x floor sat at Author an HR-service-delivery platform certification knowledge taxonomy.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Author a civics and government knowledge taxonomy</td>
      <td>8.0h</td>
      <td>6m</td>
      <td>3m</td>
      <td>80.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Author 94 knowledge-taxonomy specs (29 languages, 10 college-level exam gaps, 22 international-diploma exam gaps, 30 K-12 grade courses, 3 pilots) via web-grounded 91-agent fan-out plus a generalized, hardened assembler script; all pass structural validation; committed and pushed</td>
      <td>120.0h</td>
      <td>95m</td>
      <td>5m</td>
      <td>75.8x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Author 115 vertical certification domain specs via 2-wave web-grounded fan-out plus a vendor-canonical dedup gate; survived a mid-run quota interrupt with zero content loss (external backup plus git); all pass structural validation; committed and pushed</td>
      <td>150.0h</td>
      <td>120m</td>
      <td>5m</td>
      <td>75.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Long-form fiction manuscript: 3-round multi-agent editorial review (30 full-manuscript reads) plus surgical revision (fair-play clue plant, thread closures, subplot seeding, opening rework, authenticity patches, 2 prose-tic passes) plus query-package fixes plus audit/synopsis reconcile</td>
      <td>70.0h</td>
      <td>90m</td>
      <td>4m</td>
      <td>46.7x</td>
      <td>1050.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Author a language-course knowledge taxonomy (CEFR A1, 68 leaf goals, 8 domains)</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>4m</td>
      <td>30.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Author an alternative-investment certification knowledge taxonomy (Level II)</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Author a container-platform certification knowledge taxonomy with web research</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Long-form fiction manuscript: full 15-reader editorial review plus publication-prep structural revision (chapter split, boardroom scene rework, narrative interstitial, character cost-arc revision, prose-tic pass, sequel seeds, audit plus docs)</td>
      <td>40.0h</td>
      <td>105m</td>
      <td>3m</td>
      <td>22.9x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Author a medical-licensing exam knowledge taxonomy</td>
      <td>3.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Author a language-course knowledge taxonomy (68 leaf goals, CEFR A1, full prerequisite graph)</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>4m</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Author a language-course knowledge taxonomy (CEFR A1, 64 leaf goals, 89 prerequisite edges, 6 domains)</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Author a financial-planning certification knowledge taxonomy (70 leaf goals, 8 domains)</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Author a business-intelligence platform certification knowledge taxonomy (72 leaf goals across 4 official exam domains)</td>
      <td>4.0h</td>
      <td>14m</td>
      <td>5m</td>
      <td>17.1x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Author a secrets-management platform certification knowledge taxonomy (63 leaf goals, 8 domains)</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>16.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Author a language-course knowledge taxonomy (CEFR A1, 8 domains, 72 leaf goals)</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Author a K-12 mathematics course knowledge taxonomy (Grade 6, CCSS-aligned)</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Author an advanced penetration-testing certification knowledge taxonomy (80 nodes, 69 leaf goals, 14 prerequisite edges)</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Author an academic-subject knowledge taxonomy with web research</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Author a language-course knowledge taxonomy (68 leaf goals, CEFR A1, ACTFL Novice)</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Author an academic-subject knowledge taxonomy (70 leaf nodes, 9 domains)</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>13.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Author an advanced systems-architecture certification knowledge taxonomy</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Author an internal-audit certification knowledge taxonomy (3-part exam blueprint research plus a 70-node flat node list)</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>13.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Thin the inference engine repo down to code plus docs: hard-gated removal of 49GB of package content and caches (containment analysis against canonical data and object storage, 683MB external backup, per-item divergence diff) plus root-cause fix of a relative-path backfill bug across 4 scripts</td>
      <td>4.0h</td>
      <td>20m</td>
      <td>3m</td>
      <td>12.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Author an academic-subject knowledge taxonomy (73 nodes, 8 domains, 12+ prerequisite edges) with web research</td>
      <td>3.5h</td>
      <td>18m</td>
      <td>3m</td>
      <td>11.7x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Author a privacy-law certification knowledge taxonomy (60-80 leaf goals across 5 exam domains)</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>3m</td>
      <td>10.9x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Author a 101-level language-course knowledge taxonomy</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Author a language-course knowledge taxonomy: CEFR A1, 8 domains, 72 leaf goals</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Author a beginner-level language-course knowledge taxonomy</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Author an academic-subject knowledge taxonomy</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Author a data-engineering platform certification knowledge taxonomy with web research and official exam-guide extraction</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Author a security-focused Python-programming certification knowledge taxonomy with a web-researched exam blueprint</td>
      <td>2.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Author a quality-management certification knowledge taxonomy</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Author a senior human-resources certification knowledge taxonomy with web research</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Author a teacher-certification entrance-exam knowledge taxonomy</td>
      <td>2.5h</td>
      <td>18m</td>
      <td>5m</td>
      <td>8.3x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Author an academic-subject knowledge taxonomy (68 leaf goals, official inquiry-based framework)</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>3m</td>
      <td>8.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Author a supply-chain and production-planning certification knowledge taxonomy</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>8.2x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Author a data-analytics platform certification knowledge taxonomy (69 leaf goals across 4 exam domains)</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>6.7x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Author a privacy-management certification knowledge taxonomy</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>6.7x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Author a cloud-security certification knowledge taxonomy (12-domain knowledge map, 70 leaf goals, current exam version)</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>6.7x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Author a financial-analysis certification knowledge taxonomy (Level III)</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>6.7x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Debug plus stand up a local content-synthesis service (4 configuration fixes: a runtime-mode flag, canonical output-directory path, model-provider auth via an API-key environment variable, embeddings verify) plus launch 17 concurrent academic-taxonomy synthesis jobs on a generation pipeline</td>
      <td>4.0h</td>
      <td>45m</td>
      <td>3m</td>
      <td>5.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Author an HR-service-delivery platform certification knowledge taxonomy</td>
      <td>1.5h</td>
      <td>18m</td>
      <td>3m</td>
      <td>5.0x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>42</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>518.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1059</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>157</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>27,965,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>29.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>198.2x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>13.0</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 80.0x ceiling came from Author a civics and government knowledge taxonomy; the 5.0x floor was Author an HR-service-delivery platform certification knowledge taxonomy. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">Most rows share the same authoring shape, so the leverage spread came from how each subject&#39;s human-hour estimate compared against a fairly constant authoring time. The bulk of the day&#39;s output sat in three large batches (a 94-specification run, a 115-specification run, and a full manuscript review) that together accounted for the majority of the human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (198.2x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 42 tasks, the day produced roughly 13.0 weeks of senior-engineer-equivalent throughput in 17.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 30, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-30-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-30-leverage-record.html</id>
    <updated>2026-06-30T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirteen tasks. June 30, 2026 weighted to 15.0x leverage across 204.0 human-equivalent hours in 816 Claude-minutes. Supervisory leverage closed at 170.0x. The day centered on a full 71-repository deployment-readiness audit and its remediation (security hardening, staging consolidation, branch hygiene), with two long-form fiction manuscript continuity passes and a synthesis-pipeline deadlock fix threaded through.</p>
<p class="mb-4 font-light font-serif">5.1 weeks of human-equivalent throughput in 13.6 hours of Claude wall-clock. The 39.8x ceiling came from Full monorepo deployment-readiness audit (71 repos, content excluded) via 16 parallel agents plus a central security pass; consolidated findings report...; the 4.1x floor sat at Deployment-readiness audit for the core engine service (2026-06-30).</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full monorepo deployment-readiness audit (71 repos, content excluded) via 16 parallel agents plus a central security pass; consolidated findings report; remediated 19 repos including backend error-detail sanitization and assert-statement removal (security hardening) across 71 sites plus 7 regression tests; pushed to staging</td>
      <td>96.0h</td>
      <td>145m</td>
      <td>3m</td>
      <td>39.8x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Deployment-readiness audit across a batch of 5 service repos</td>
      <td>3.0h</td>
      <td>6m</td>
      <td>3m</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Long-form fiction manuscript: fixed nine prose continuity issues (timeline/seasonal consistency, setting geometry, deadline logic, character-event continuity, surveillance-plot logic, chapter-location consistency, attribution continuity, device-connectivity continuity, document hygiene); reconciled tracking documents (ledger, synopsis, canon reference); full continuity audit (889/889 passing)</td>
      <td>11.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>22.0x</td>
      <td>165.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Security hygiene edits to the API service: sanitized error details plus replaced assert statements</td>
      <td>5.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>21.4x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Leverage post backfill: reconciled the week&#39;s productivity-metrics records (removed 1 within-CSV duplicate; 06-23 through 06-30 all in sync), generated 6 sanitized daily leverage blog posts (40 tasks via 2-agent sanitization fan-out plus a deterministic template), bumped the about-page count, built and deployed to staging and production, verified posts live and feed well-formed</td>
      <td>5.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>13.6x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Resolved a days-long macOS SSL/TLS synthesis deadlock involving a hosted AI model provider via Linux containerization (diagnosed stale service, stub-mode, credential-mapping, OOM, and job-store issues); stood up 2 parallel synthesis containers; resumed a paused content-synthesis run and generated question banks for 16 of 19 academic-subject taxonomies; drafted a candidate-status migration plan</td>
      <td>24.0h</td>
      <td>120m</td>
      <td>12m</td>
      <td>12.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Long-form fiction manuscript continuity pass 2 plus adversarial sweep: reconciled a multi-entity plot-thread chain across 8 files, fixed date/weekday consistency, epilogue timeline, a numeric plot-payoff figure, a financial subplot detail, and a character-age inconsistency; multi-agent sweep; regenerated artifacts; full continuity audit (889/889 passing)</td>
      <td>8.0h</td>
      <td>40m</td>
      <td>6m</td>
      <td>12.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Fixed 4 HIGH spec-audit findings (goal_id deduplication x2, a CRM-platform certification spec UUID fixed across 15 files/9 repos, a virtualization-platform certification spec description fix) plus a non-certification exam-code exemption; consolidated 11 repos to staging (merged accessibility branches, resolved an adjacency conflict, deleted stray branches, pushed)</td>
      <td>7.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>10.5x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Added a Phase 0.5 branch-hygiene rule to the readiness audit (a branch-hygiene check script plus documentation) and ran a fleet-wide staging consolidation: 16 of 25 stray accessibility-branch repos merged, pushed, and pruned (conflict resolution, build-artifact stashing, don&#39;t-lose-work discipline); legacy product-line branches exempted; a main branch created for 2 staging-only libraries</td>
      <td>10.0h</td>
      <td>60m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Security hygiene fixes for the API service: static error details plus assert-statement replacements plus regression tests</td>
      <td>3.0h</td>
      <td>20m</td>
      <td>5m</td>
      <td>9.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Triaged and fixed a monorepo deployment-readiness audit: 5 repos with test/build failures (npm dependency issues, TypeScript type errors, Python virtual-env pytest issues, a free-tier adjacency-cluster issue, an authentication-service real-HTTP test hang); isolated and pushed fixes to staging across 6 repos; cleared 8 accessibility HIGH findings including an accessibility-scanner shared-shell false-positive fix</td>
      <td>12.0h</td>
      <td>110m</td>
      <td>8m</td>
      <td>6.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Root-caused and fixed a deep synthesis-pipeline validation deadlock (kernel SO_RCVTIMEO socket options plus bounded deadline threads on a hosted AI model client path; thread/file-descriptor leak under wedged TLS reads); fixed a technology-vendor certification spec registration audit (adjacency 3-copy sync, 22 stale entries cleaned, canonical count 59 to 61); authored 2 additional certification-taxonomy spec sets; updated a 1073-entry badge catalog</td>
      <td>18.0h</td>
      <td>180m</td>
      <td>15m</td>
      <td>6.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Deployment-readiness audit for the core engine service (2026-06-30)</td>
      <td>2.0h</td>
      <td>29m</td>
      <td>3m</td>
      <td>4.1x</td>
      <td>40.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>204.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>816</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>72</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,841,396</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>170.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>5.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 39.8x ceiling came from Full monorepo deployment-readiness audit (71 repos, content excluded) via 16 parallel agents plus a central security pass; consolidated findings report...; the 4.1x floor was Deployment-readiness audit for the core engine service (2026-06-30). Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The audit-and-remediate work clustered high because the target was an explicit 71-repository checklist the agents could fan out across; the lower end was narrow single-repository audits and a deep concurrency deadlock that needed iterative diagnosis.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (170.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 13 tasks, the day produced roughly 5.1 weeks of senior-engineer-equivalent throughput in 13.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 29, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-29-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-29-leverage-record.html</id>
    <updated>2026-06-29T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. June 29, 2026 weighted to 14.9x leverage across 37.0 human-equivalent hours in 149 Claude-minutes. Supervisory leverage closed at 79.3x.</p>
<p class="mb-4 font-light font-serif">0.9 weeks of human-equivalent throughput in 2.5 hours of Claude wall-clock. The 28.6x ceiling came from Full readiness audit (structural) across 71 changed monorepo repos: Phase 0 canonical validation plus git hygiene plus structural checks plus architecture and intellectual property...; the 7.2x floor sat at Architecture doc fixes: appendix back-port plus subsystem count note plus application interface sections plus README broken links plus client README stale intellectual property doc....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full readiness audit (structural) across 71 changed monorepo repos: Phase 0 canonical validation plus git hygiene plus structural checks plus architecture and intellectual property documentation cross-reference plus report</td>
      <td>10.0h</td>
      <td>21m</td>
      <td>3m</td>
      <td>28.6x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Authored an enterprise storage certification domain specification taxonomy (68 leaves across 8 domains)</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Web research on agentic enterprise development for a large enterprise vendor: curriculum domains and enablement structure</td>
      <td>4.0h</td>
      <td>15m</td>
      <td>5m</td>
      <td>16.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Triage and fix overnight math content backfill: root-caused spec-shadowing resolver bug plus math-filter substring bug, repaired 8 specs, cleaned bogus content, relaunched 10 math domains, rebuilt Slack monitor</td>
      <td>5.0h</td>
      <td>20m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Monorepo readiness-audit remediation: canonical sync plus architecture and intellectual property documentation fixes (back-port plus 7 API sections plus subsystem reconcile) plus README content (7 repos) plus audit definitions and repo-map onboarding plus 15 precise commits</td>
      <td>6.0h</td>
      <td>32m</td>
      <td>2m</td>
      <td>11.2x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Agentic enterprise development certification domain specification taxonomy (67-leaf goal tree across 8 domains)</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Architecture doc fixes: appendix back-port plus subsystem count note plus application interface sections plus README broken links plus client README stale intellectual property documentation coverage</td>
      <td>3.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>7.2x</td>
      <td>36.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>37.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>149</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>28</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,555,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>14.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>79.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 28.6x ceiling came from Full readiness audit (structural) across 71 changed monorepo repos: Phase 0 canonical validation plus git hygiene plus structural checks plus architecture and i...; the 7.2x floor was Architecture doc fixes: appendix back-port plus subsystem count note plus application interface sections plus README broken links plus client README stale intel.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (79.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 0.9 weeks of senior-engineer-equivalent throughput in 2.5 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 28, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-28-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-28-leverage-record.html</id>
    <updated>2026-06-28T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Three tasks. June 28, 2026 weighted to 28.1x leverage across 38.0 human-equivalent hours in 81 Claude-minutes. Supervisory leverage closed at 142.5x.</p>
<p class="mb-4 font-light font-serif">0.9 weeks of human-equivalent throughput in 1.4 hours of Claude wall-clock. The 50.0x ceiling came from Audit platform learning activities (51 in catalog) plus generated content completeness across certification vs academic domains, with chemistry/physics/math focus; the 15.0x floor sat at Platform activity catalog audit: cross-category breakdown plus IB check plus coverage gaps plus deferred content inventory.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Audit platform learning activities (51 in catalog) plus generated content completeness across certification vs academic domains, with chemistry/physics/math focus</td>
      <td>20.0h</td>
      <td>24m</td>
      <td>4m</td>
      <td>50.0x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Design and build an HTTP Lambda to Slack relay automation (HTTP Lambda to Slack chat.postMessage): 4 docs, handler plus 17 tests, Terraform stack, slash-command skill; located existing Slack webhook credentials</td>
      <td>15.0h</td>
      <td>45m</td>
      <td>7m</td>
      <td>20.0x</td>
      <td>128.6x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Platform activity catalog audit: cross-category breakdown plus IB check plus coverage gaps plus deferred content inventory</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>5m</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>38.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>81</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>16</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>985,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>28.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>142.5x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 50.0x ceiling came from Audit platform learning activities (51 in catalog) plus generated content completeness across certification vs academic domains, with chemistry/physics/math foc...; the 15.0x floor was Platform activity catalog audit: cross-category breakdown plus IB check plus coverage gaps plus deferred content inventory. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (142.5x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 3 tasks, the day produced roughly 0.9 weeks of senior-engineer-equivalent throughput in 1.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 27, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-27-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-27-leverage-record.html</id>
    <updated>2026-06-27T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. June 27, 2026 weighted to 8.3x leverage across 5.0 human-equivalent hours in 36 Claude-minutes. Supervisory leverage closed at 30.0x.</p>
<p class="mb-4 font-light font-serif">0.1 weeks of human-equivalent throughput in 0.6 hours of Claude wall-clock. The 10.0x ceiling came from Audit a synthesis service synthesis code for silent-failure failure modes; the 6.7x floor sat at Consolidate a synthesis service synthesis failure-mode report and fix plan.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Audit a synthesis service synthesis code for silent-failure failure modes</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Consolidate a synthesis service synthesis failure-mode report and fix plan</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>6.7x</td>
      <td>24.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>5.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>36</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>10</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>180,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>8.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 10.0x ceiling came from Audit a synthesis service synthesis code for silent-failure failure modes; the 6.7x floor was Consolidate a synthesis service synthesis failure-mode report and fix plan. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (30.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 0.1 weeks of senior-engineer-equivalent throughput in 0.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 26, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-26-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-26-leverage-record.html</id>
    <updated>2026-06-26T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Four tasks. June 26, 2026 weighted to 19.7x leverage across 36.5 human-equivalent hours in 111 Claude-minutes. Supervisory leverage closed at 243.3x.</p>
<p class="mb-4 font-light font-serif">0.9 weeks of human-equivalent throughput in 1.9 hours of Claude wall-clock. The 26.2x ceiling came from Audit a task tracker (backend/frontend/MCP/tests/4 docs) via 17-agent workflow and remediation: 17 code fixes, 2 new test suites, CI coverage gate, audit report, 19 defect-tracker...; the 12.0x floor sat at Task tracker: no-tests-in-CI policy plus pre-commit gate; 3 cards (depth/item limits, SMS throttle, API key backdoor removal) with tests, 303 green.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Audit a task tracker (backend/frontend/MCP/tests/4 docs) via 17-agent workflow and remediation: 17 code fixes, 2 new test suites, CI coverage gate, audit report, 19 defect-tracker cards, endpoints-doc rewrite</td>
      <td>24.0h</td>
      <td>55m</td>
      <td>3m</td>
      <td>26.2x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Bring up and verify full local stack (inference engine/API gateway/web client/notification service); confirm all 248 live domains loaded in inference engine; end-to-end auth and session smoke test through gateway</td>
      <td>3.0h</td>
      <td>11m</td>
      <td>3m</td>
      <td>16.4x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Task-tracker cards: commit groups plus backend test-gap suite (9 tests, moto S3) plus CSV/JSON export plus print</td>
      <td>4.5h</td>
      <td>20m</td>
      <td>1m</td>
      <td>13.5x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Task tracker: no-tests-in-CI policy plus pre-commit gate; 3 cards (depth/item limits, SMS throttle, API key backdoor removal) with tests, 303 green</td>
      <td>5.0h</td>
      <td>25m</td>
      <td>2m</td>
      <td>12.0x</td>
      <td>150.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>4</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>36.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>111</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,310,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>19.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>243.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 26.2x ceiling came from Audit a task tracker (backend/frontend/MCP/tests/4 docs) via 17-agent workflow and remediation: 17 code fixes, 2 new test suites, CI coverage gate, audit report...; the 12.0x floor was Task tracker: no-tests-in-CI policy plus pre-commit gate; 3 cards (depth/item limits, SMS throttle, API key backdoor removal) with tests, 303 green. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (243.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 4 tasks, the day produced roughly 0.9 weeks of senior-engineer-equivalent throughput in 1.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 25, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-25-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-25-leverage-record.html</id>
    <updated>2026-06-25T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Five tasks. June 25, 2026 weighted to 26.5x leverage across 142.0 human-equivalent hours in 322 Claude-minutes. Supervisory leverage closed at 473.3x.</p>
<p class="mb-4 font-light font-serif">3.5 weeks of human-equivalent throughput in 5.4 hours of Claude wall-clock. The 29.1x ceiling came from Refactored a travel-planning app onto a UI generation tool design template (12 screens, light/dark/mobile) plus a third-party Core Data SQLite importer (backend+frontend+tests) plu...; the 10.0x floor sat at Tools-page IA and caption CSS: restructured a corporate tools page into 5 categories (merged 3 into one, new Observability group, moved 5 tools), alphabetized each category, remove....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Refactored a travel-planning app onto a UI generation tool design template (12 screens, light/dark/mobile) plus a third-party Core Data SQLite importer (backend+frontend+tests) plus a UI generation tool marketing prompt</td>
      <td>120.0h</td>
      <td>247m</td>
      <td>5m</td>
      <td>29.1x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Assembled a UI generation tool export into a fleet-standard CMS site: idempotent importer, 18 routes, shared nav/footer/head-meta partials, site config and build script, verified build</td>
      <td>12.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>25.7x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Audited all 73 monorepo repos for stale docs and executed approved Tier 1+2 cleanup (logs/caches/backups/duplicates/checkpoints)</td>
      <td>5.0h</td>
      <td>20m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Tier 3 stale-doc cleanup (clients/services/docs/websites) plus per-repo staging commits and pushes across 8 repos avoiding WIP contamination</td>
      <td>2.5h</td>
      <td>12m</td>
      <td>2m</td>
      <td>12.5x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Tools-page IA and caption CSS: restructured a corporate tools page into 5 categories (merged 3 into one, new Observability group, moved 5 tools), alphabetized each category, removed duplicate card; revised article stylesheet so image/diagram captions hug the media with trailing margin below the caption; built and verified both sites staging</td>
      <td>2.5h</td>
      <td>15m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>50.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>142.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>322</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>18</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,690,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>473.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>3.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 29.1x ceiling came from Refactored a travel-planning app onto a UI generation tool design template (12 screens, light/dark/mobile) plus a third-party Core Data SQLite importer (backend...; the 10.0x floor was Tools-page IA and caption CSS: restructured a corporate tools page into 5 categories (merged 3 into one, new Observability group, moved 5 tools), alphabetized e.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (473.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 5 tasks, the day produced roughly 3.5 weeks of senior-engineer-equivalent throughput in 5.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 24, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-24-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-24-leverage-record.html</id>
    <updated>2026-06-24T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nineteen tasks. June 24, 2026 weighted to 15.0x leverage across 117.0 human-equivalent hours in 468 Claude-minutes. Supervisory leverage closed at 149.4x.</p>
<p class="mb-4 font-light font-serif">2.9 weeks of human-equivalent throughput in 7.8 hours of Claude wall-clock. The 28.1x ceiling came from Accessibility contrast-standard rollout: codified WCAG 2.1 AA contrast standard in a design system and applied uniformly across 18 repos (marketing sites, React apps, libs, service...; the 5.4x floor sat at Committed + pushed 17 libs/clients to staging (per-repo test-gated, ~3,500 tests re-verified green post-reinstall); fixed Mermaid renderer bun per-file coverageThreshold breaking t....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Accessibility contrast-standard rollout: codified WCAG 2.1 AA contrast standard in a design system and applied uniformly across 18 repos (marketing sites, React apps, libs, services); deterministic+axe+contextual-agent verification, ledger triage</td>
      <td>30.0h</td>
      <td>64m</td>
      <td>4m</td>
      <td>28.1x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Updated an infrastructure-provisioning tool page on a corporate website with 10 shipped inventions and deployed to staging/prod; scaffolded its marketing site repo with a comprehensive UI generation tool prompt, feature inventory, and brand docs</td>
      <td>14.0h</td>
      <td>35m</td>
      <td>6m</td>
      <td>24.0x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Parallel synthesis safety audit for a synthesis service</td>
      <td>3.0h</td>
      <td>8m</td>
      <td>5m</td>
      <td>22.5x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Added 6 new tools to a corporate website: 6 rich marketing pages (23-28 cards each) via a 6-agent fan-out, generated Lucide-glyph icon sets for 5 tools, added listing cards + footer links, fixed an icon/page color mismatch; built+verified staging (61 pages, 0 template errors)</td>
      <td>11.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>22.0x</td>
      <td>660.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fixed resume-parser weak-verb logic bug + regression test; fixed auth library OidcCallback open-redirect (same-origin guard) + 3 tests; diagnosed and fixed blocked workspace npm install (stale design system package ^0.1.4 vs installed 0.2.1 across 3 manifests) -- clean install verified, suites green</td>
      <td>4.5h</td>
      <td>16m</td>
      <td>1m</td>
      <td>16.9x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Pool=6 checkpoint migration (a certification domain resumed) + stood up Opus Agent-SDK tribunal on 2 certification domains concurrently</td>
      <td>3.5h</td>
      <td>14m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Leverage reconciliation + post backfill: resynced a divergent week of records (CSV 34 behind cloud; backfilled cloud-&gt;CSV via numeric fingerprint surviving task rewording + malformed rows, 66=66 in sync), generated 4 sanitized daily leverage posts (58 tasks, 3-agent fan-out + deterministic template), bumped about-page, deployed staging+production, verified posts live + feed well-formed</td>
      <td>5.5h</td>
      <td>25m</td>
      <td>1m</td>
      <td>13.2x</td>
      <td>330.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Parallelized synthesis to 3 claim-aware workers (atomic claims, pool=3, staggered, resume) + amplifier live progress/ETA logging; 500 tests pass, zero-loss live transition</td>
      <td>6.0h</td>
      <td>28m</td>
      <td>2m</td>
      <td>12.9x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Leverage CSV maintenance: structural cleanup (reconstructed unquoted-comma + field-short rows, normalized 2399 rows to proper quoting) + full-history cloud-&gt;CSV reconcile (backfilled 115 missing records via numeric fingerprint, fixed chronic drift); flagged 14 local-only rows</td>
      <td>2.5h</td>
      <td>12m</td>
      <td>1m</td>
      <td>12.5x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>De-risked Opus tribunal: root-caused all-reject verdicts to transient Agent-SDK error + no judge retry; added retry-with-backoff + 2 tests (177 passing); re-ran tribunal</td>
      <td>4.5h</td>
      <td>22m</td>
      <td>1m</td>
      <td>12.3x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Fixed 42 un-synthesizable alpha content domain specs (41 data-repair + resolver bug skipping meta files); 609/609 valid, 25 tests pass, workers redeployed, a certification domain synthesizing</td>
      <td>3.5h</td>
      <td>18m</td>
      <td>1m</td>
      <td>11.7x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Write a codebase RAG tool marketing page for a corporate website</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>3m</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Full portfolio accessibility audit (3 deterministic engines, 54 repos) + remediated 23 WCAG findings across 7 repos, diagnosed+fixed flaky timezone test in an infrastructure-provisioning tool, updated triage ledger (21 fixed, 2 accepted)</td>
      <td>16.0h</td>
      <td>88m</td>
      <td>3m</td>
      <td>10.9x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Diagnosed synthesis stray-output-path bug (CWD-relative writer default); preserved 2 gate-passing packages for 2 certification domains to canonical tree; built idempotent auto-reconciler + patched/cycled supervisor without disrupting the 10h worker</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>2m</td>
      <td>8.2x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Write an internal tool-fleet dashboard marketing page for a corporate website</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>3m</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Write a security-scanning service marketing page for a corporate website</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>3m</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Write a packing-list app marketing page for a corporate website</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>3m</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Write a native command-center app marketing page for a corporate website</td>
      <td>1.5h</td>
      <td>14m</td>
      <td>4m</td>
      <td>6.4x</td>
      <td>22.5x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Committed + pushed 17 libs/clients to staging (per-repo test-gated, ~3,500 tests re-verified green post-reinstall); fixed Mermaid renderer bun per-file coverageThreshold breaking the run; local-committed 4 remote-less repos; console-sim deferred to background test</td>
      <td>2.5h</td>
      <td>28m</td>
      <td>1m</td>
      <td>5.4x</td>
      <td>150.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>117.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>468</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>47</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,796,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>149.4x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 28.1x ceiling came from Accessibility contrast-standard rollout: codified WCAG 2.1 AA contrast standard in a design system and applied uniformly across 18 repos (marketing sites, React...; the 5.4x floor was Committed + pushed 17 libs/clients to staging (per-repo test-gated, ~3,500 tests re-verified green post-reinstall); fixed Mermaid renderer bun per-file coverage.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (149.4x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 19 tasks, the day produced roughly 2.9 weeks of senior-engineer-equivalent throughput in 7.8 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 23, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-23-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-23-leverage-record.html</id>
    <updated>2026-06-23T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-six tasks. June 23, 2026 weighted to 19.2x leverage across 325.0 human-equivalent hours in 1015 Claude-minutes. Supervisory leverage closed at 187.5x.</p>
<p class="mb-4 font-light font-serif">8.1 weeks of human-equivalent throughput in 16.9 hours of Claude wall-clock. The 200.0x ceiling came from Bootstrap vitest test coverage from zero for a metrics tracker UI React library; the 1.7x floor sat at Wire coverage measurement for a Mermaid-diagram TypeScript library.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Bootstrap vitest test coverage from zero for a metrics tracker UI React library</td>
      <td>40.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>200.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Fleet-wide test coverage for all 19 libs/ libraries (~1,750 tests via 14 parallel agents, coverage gates wired, console-sim coverage pipeline repaired); authored libs-audit.md plus dated report plus ledger registration in an internal audits repository</td>
      <td>135.0h</td>
      <td>120m</td>
      <td>3m</td>
      <td>67.5x</td>
      <td>2700.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Extended a continuity ledger: added 15 prose-anchored canonical facts across 11 chapter parts; raised prose-canonical coverage 72-&gt;87 of 118; all validated green by Phase 6 + Phase 2</td>
      <td>3.0h</td>
      <td>9m</td>
      <td>1m</td>
      <td>20.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Implemented Phase 5 background reconciliation in the continuity-audit checker plus README link/prose repair (243/243 green) then committed and pushed</td>
      <td>3.5h</td>
      <td>12m</td>
      <td>1m</td>
      <td>17.5x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>fix-coverage-pipeline-add-view-tests-console-sim-react</td>
      <td>26.0h</td>
      <td>90m</td>
      <td>10m</td>
      <td>17.3x</td>
      <td>156.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>UI React library test coverage: 7 component test files + 2 renderer files + coverage-v8 setup (312 tests green, LINES 80%)</td>
      <td>7.0h</td>
      <td>25m</td>
      <td>7m</td>
      <td>16.8x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Built deterministic continuity-audit harness (canonical + ledger + checker + reports) modeled on an internal audits framework</td>
      <td>5.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>16.7x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Manuscript consistency audit and Tier 3-5 fixes across 13 files</td>
      <td>10.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>15.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Continuity audit: deep prose-vs-ledger verification sweep; found and fixed 2 ledger defects (fabricated Prologue L44 quote, misattributed Epilogue L75 fact) and added Phase 6 quote-fidelity check (613 quotes) to the audit harness</td>
      <td>5.0h</td>
      <td>20m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Scaled continuity-audit ledger to all 34 chapters via 8 parallel extraction agents (615 facts) plus checker hardening to a clean 225/225 audit</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>13.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Metrics tracker v2: run live Postgres integration suite (45 green); fixed 2 Postgres-only bugs (boolean cast, RecordResponse v2 fields) + FK cleanup; repaired corrupted node_modules + invalid package.json</td>
      <td>8.0h</td>
      <td>36m</td>
      <td>1m</td>
      <td>13.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Diagnosed and fixed broken Atom/RSS feeds: root-caused malformed XML (analytics script injected after feed root element by the build pipeline), guarded injector to skip non-HTML/XML outputs with regression tests (97 tests green); updated feed templates to include articles with full text + embedded media + raised cap; deployed and verified well-formed feeds with 23 articles</td>
      <td>6.0h</td>
      <td>30m</td>
      <td>5m</td>
      <td>12.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Write 9 activity component test files for an interactive-activities React library</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Extended the Atom/RSS feed fix to a second articles-only site: diagnosed stale/empty feed (missing templates + stubs, posts-only filter), authored new Atom+RSS templates + content stubs syndicating all articles with full text + embedded media, enabled syndication; built and verified staging (50 articles, valid XML) and production (49, held draft excluded)</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>10.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Implement full test suite (vitest coverage) for an auth React library</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>9.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Add pytest-cov coverage for a diagnostics library</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>9.6x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Implement vitest coverage for a subscribe-flow React library: SubscribeBack and EmbeddedSubscribeFlow tests + coverage config</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>9.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Close coverage gaps in three platform Python libs (embeddings client + LLM client + preflight runtime)</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>8.2x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Implement full test coverage for a design-system library (181 tests across 7 suites; 70.66% line coverage)</td>
      <td>12.0h</td>
      <td>90m</td>
      <td>5m</td>
      <td>8.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Omniscient sweep of all 206 remaining live non-cloud packages: built generalized grouped profile generator + sequential group runner, debugged bash GROUPS builtin collision, ran 14 logical groups at concurrency 3 with 15-min monitoring</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>2m</td>
      <td>8.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Auth client security test coverage (dpop/cookies/encoding/client-extended)</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Add vitest test coverage for a sound-effects library and shared libs</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Write comprehensive test coverage for an interactive-activities React library (9 activities + 13 primitives + hooks + providers + container)</td>
      <td>10.0h</td>
      <td>95m</td>
      <td>10m</td>
      <td>6.3x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Resume-parser coverage wiring + 6 test files (pdf/docx/html/doc parsers + LLM client/normalizer/rewriter/auditor/prompts + pdf_renderer)</td>
      <td>4.0h</td>
      <td>38m</td>
      <td>3m</td>
      <td>6.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Implement test coverage for three platform React libraries (about page, app shell, and bug-reporter)</td>
      <td>8.0h</td>
      <td>90m</td>
      <td>5m</td>
      <td>5.3x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Wire coverage measurement for a Mermaid-diagram TypeScript library</td>
      <td>0.5h</td>
      <td>18m</td>
      <td>3m</td>
      <td>1.7x</td>
      <td>10.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>26</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>325.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1015</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>104</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>7,492,300</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>19.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>187.5x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>8.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 200.0x ceiling came from Bootstrap vitest test coverage from zero for a metrics tracker UI React library; the 1.7x floor was Wire coverage measurement for a Mermaid-diagram TypeScript library. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (187.5x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 26 tasks, the day produced roughly 8.1 weeks of senior-engineer-equivalent throughput in 16.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 22, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-22-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-22-leverage-record.html</id>
    <updated>2026-06-22T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twelve tasks. June 22, 2026 weighted to 20.2x leverage across 124.8 human-equivalent hours in 371 Claude-minutes. Supervisory leverage closed at 213.9x.</p>
<p class="mb-4 font-light font-serif">3.1 weeks of human-equivalent throughput in 6.2 hours of Claude wall-clock. The 129.2x ceiling came from Reviewed test coverage across all 19 library repos: stack, runner, test/source counts, coverage gates, and gaps; fanned out 10 parallel audit agents and synthesized; the 3.0x floor sat at Update a marketing platform README/CLAUDE/CHANGELOG for Anthropic prompt-caching change in the Anthropic call handler.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Reviewed test coverage across all 19 library repos: stack, runner, test/source counts, coverage gates, and gaps; fanned out 10 parallel audit agents and synthesized</td>
      <td>14.0h</td>
      <td>6m</td>
      <td>2m</td>
      <td>129.2x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Reviewed an email platform vs docs (re-verified 116-finding audit) + remediated P0 security (OAuth CSRF, AUTH_DISABLED guard, 2 IDOR), AI settings persistence, /snoozed e2e, In-Reply-To + inline base64, frontend compose (upload/toolbar/XSS), rate limiter, beat tasks, digest delivery, sentiment window; +25 tests, 2 migrations, test-isolation fix</td>
      <td>56.0h</td>
      <td>77m</td>
      <td>3m</td>
      <td>43.7x</td>
      <td>1120.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Email platform remediation round 2 — remaining open items: Gmail OIDC webhook auth, Graph webhook account targeting + subscription renewal task, scheduled-send NameError, push-subscription unique constraint, AI budget on 3 LLM paths, cache bound + trash-purge eviction, CSP header, IMAP UID mutations, a relationship CRM X-User-Id forwarding; +16 tests, 1 migration; pushed to staging</td>
      <td>28.0h</td>
      <td>75m</td>
      <td>2m</td>
      <td>22.4x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>LLM caching+batching audit: root-caused 77% Anthropic cache drop, added cached system blocks to tier-question generation + salvage confirm sweep, enabled+verified a third-party model cache_control</td>
      <td>5.0h</td>
      <td>20m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Adversarial content quality audit of a third-party model-generated content for a certification domain (285 nodes, 843 pairs)</td>
      <td>4.0h</td>
      <td>20m</td>
      <td>5m</td>
      <td>12.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Adversarial-workflow-driven LLM fixes: salvage batch resume order-mismatch (HIGH) + succeeded-count guard + credit/parse hardening; tier recall regeneration to per-domain Anthropic Batches API; cache_control on a marketing platform Anthropic path; all verified live</td>
      <td>4.5h</td>
      <td>30m</td>
      <td>2m</td>
      <td>9.0x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Convert salvage confirm sweep (~2900-node 2-stage Haiku+Sonnet quality gate) to resumable Anthropic Batches API (50% off both stages); verified submit/poll/fetch/parse/resume live end-to-end</td>
      <td>3.5h</td>
      <td>28m</td>
      <td>2m</td>
      <td>7.5x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>An internal engine omniscient sweep prep: full local stack bring-up (infrastructure+inference engine+API gateway+web client+internal engine), GCP UUID resolution bug fix in omniscient profile generation, end-to-end spot-check validation</td>
      <td>5.0h</td>
      <td>45m</td>
      <td>2m</td>
      <td>6.7x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Update an origin service docs for LLM caching+batching (CHANGELOG/CLAUDE/DESIGN/README)</td>
      <td>1.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>5.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Background canonical-values reconciliation — 11 canonical values across 8 files (The Deferral)</td>
      <td>3.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>4.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Update an inference engine docs for LLM caching+batching changes</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>3m</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Update a marketing platform README/CLAUDE/CHANGELOG for Anthropic prompt-caching change in the Anthropic call handler</td>
      <td>0.2h</td>
      <td>5m</td>
      <td>3m</td>
      <td>3.0x</td>
      <td>5.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>12</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>124.8</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>371</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>35</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>9,595,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>20.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>213.9x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>3.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 129.2x ceiling came from Reviewed test coverage across all 19 library repos: stack, runner, test/source counts, coverage gates, and gaps; fanned out 10 parallel audit agents and synthes...; the 3.0x floor was Update a marketing platform README/CLAUDE/CHANGELOG for Anthropic prompt-caching change in the Anthropic call handler. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (213.9x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 12 tasks, the day produced roughly 3.1 weeks of senior-engineer-equivalent throughput in 6.2 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 21, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-21-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-21-leverage-record.html</id>
    <updated>2026-06-21T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. June 21, 2026 weighted to 162.2x leverage across 1014.0 human-equivalent hours in 375 Claude-minutes. Supervisory leverage closed at 3042.0x.</p>
<p class="mb-4 font-light font-serif">25.4 weeks of human-equivalent throughput in 6.2 hours of Claude wall-clock. The 200.0x ceiling came from An infrastructure-provisioning tool: 10 patent-grade inventions implemented end-to-end (all phases); engines, 11 Alembic migrations, WebSocket+MCP parity, 9 EventBridge+Lambda auto...; the 11.2x floor sat at Make 30 beta content-domain packages production-ready: pair-id coverage, orphan-question realignment, duplicate-option fix, tier-coverage generation, validation re-run, manifest/qu....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>An infrastructure-provisioning tool: 10 patent-grade inventions implemented end-to-end (all phases); engines, 11 Alembic migrations, WebSocket+MCP parity, 9 EventBridge+Lambda automations, 10 React pages, ~250 new tests, docs; committed+pushed per invention</td>
      <td>1000.0h</td>
      <td>300m</td>
      <td>12m</td>
      <td>200.0x</td>
      <td>5000.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Make 30 beta content-domain packages production-ready: pair-id coverage, orphan-question realignment, duplicate-option fix, tier-coverage generation, validation re-run, manifest/quality re-stamp, S3 promotion (a third-party model)</td>
      <td>14.0h</td>
      <td>75m</td>
      <td>8m</td>
      <td>11.2x</td>
      <td>105.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1014.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>375</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>20</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,280,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>162.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>3042.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>25.4</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 200.0x ceiling came from An infrastructure-provisioning tool: 10 patent-grade inventions implemented end-to-end (all phases); engines, 11 Alembic migrations, WebSocket+MCP parity, 9 Eve...; the 11.2x floor was Make 30 beta content-domain packages production-ready: pair-id coverage, orphan-question realignment, duplicate-option fix, tier-coverage generation, validation.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (3042.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 25.4 weeks of senior-engineer-equivalent throughput in 6.2 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 20, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-20-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-20-leverage-record.html</id>
    <updated>2026-06-20T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eighteen tasks. June 20, 2026 weighted to 36.9x leverage across 481.0 human-equivalent hours in 782 Claude-minutes. Supervisory leverage closed at 390.0x.</p>
<p class="mb-4 font-light font-serif">12.0 weeks of human-equivalent throughput in 13.0 hours of Claude wall-clock. The 90.0x ceiling came from Build an infrastructure-provisioning tool missing content: +117 conformance packs (12-&gt;129), +68 discoverers (56-&gt;124), +42 advisor checks (59-&gt;101) incl service_limits, +DomainPer...; the 5.7x floor sat at Full content audit + a third-party model pluggable LLM provider migration + content remediation (amplify/scenarios/distractors/recall) on updated provider.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Build an infrastructure-provisioning tool missing content: +117 conformance packs (12-&gt;129), +68 discoverers (56-&gt;124), +42 advisor checks (59-&gt;101) incl service_limits, +DomainPermissionsPolicy resource; 15-agent workflow, all tested</td>
      <td>60.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>90.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Backfill an infrastructure-provisioning tool backend coverage 53%-&gt;95% (28-agent workflow + straggler round, ~1950 new tests, every module &gt;=80%)</td>
      <td>100.0h</td>
      <td>75m</td>
      <td>3m</td>
      <td>80.0x</td>
      <td>2000.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Metrics-tracker v2 build: scaffold a desktop client + a launchd sync daemon + v2 cost/capture backend spine (pricing/ingest/classify/quality/schema/migration/ingest API/CLI); 254 backend + 32 frontend tests; committed 3 repos</td>
      <td>100.0h</td>
      <td>78m</td>
      <td>4m</td>
      <td>76.9x</td>
      <td>1500.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Metrics-tracker v2 completion: MCP v2 tools + a knowledge base parser + subscription amortization + yield git-correlation + Recharts viz + desktop client daemon-control-panel/tray + live-DB integration tests</td>
      <td>35.0h</td>
      <td>32m</td>
      <td>2m</td>
      <td>65.6x</td>
      <td>1050.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Metrics-tracker v2 phase 2: cost/model/activity/yield analytics + optimizer + widget endpoints + v2 client wiring + Drafts/Cost frontend screens in both shells</td>
      <td>40.0h</td>
      <td>42m</td>
      <td>3m</td>
      <td>57.1x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Infrastructure-provisioning tool structural items: drift detection, Step Functions org-scan fan-out, live deployment.progress push, deployment cancel/list/get + stack.update + resource.refresh + fleet import recipes, DomainPermissionsPolicy resource, frontend button wiring + WebSocket-client tests</td>
      <td>35.0h</td>
      <td>40m</td>
      <td>3m</td>
      <td>52.5x</td>
      <td>700.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Metrics-tracker v2 cost+capture: review prior implementation, update 4 docs (requirements/design/README/CLAUDE) + write phased implementation plan</td>
      <td>10.0h</td>
      <td>14m</td>
      <td>4m</td>
      <td>42.9x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Metrics-tracker desktop plan: design a desktop client (shared UI package parity) + a launchd sync daemon; study desktop client and prior precedents; write plan + requirements FRs</td>
      <td>9.0h</td>
      <td>13m</td>
      <td>5m</td>
      <td>41.5x</td>
      <td>108.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Metrics-tracker v2 final phases: runnable SQLite functional flow tests + sanctioned OIDC callback plumbing + macOS signing/notarization config + CodeBuild CI buildspec</td>
      <td>12.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>40.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Run full platform content audit: 27-phase audit scripts + spec validation + canonical validation across 973 specs/289 packages/2196 labs; wrote timestamped report</td>
      <td>4.0h</td>
      <td>6m</td>
      <td>2m</td>
      <td>40.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Leverage reconciliation + backfill for a personal website: synced one month of metrics-tracker records bidirectionally (CSV&lt;-&gt;cloud, 13 deltas resolved, 0 dups), then generated 17 sanitized daily leverage blog posts via a deterministic template + 6-agent sanitization fan-out (173 tasks), bumped about-page count, built+deployed staging and production</td>
      <td>16.0h</td>
      <td>40m</td>
      <td>3m</td>
      <td>24.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Researched the CloudFront WebSockets-over-VPC-origins launch + AWS docs and wrote a ~3700-word architecture deep-dive article: 3 rendered Mermaid diagrams, generated on-brand hero image, matched house style, dual-published source, bumped about-page counts, built+verified on staging</td>
      <td>10.0h</td>
      <td>28m</td>
      <td>2m</td>
      <td>21.4x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fix 9 correctness bugs + 15 regression tests in an infrastructure-provisioning tool (IAM Policy stub, Cognito client update, Events Rule stale targets, CUR pagination, advisor ClientError, governance enforcement+cost-allocation, ip-space SG fields)</td>
      <td>7.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>16.8x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Built pluggable multi-provider LLM layer (a third-party model + Anthropic, sync+batch) for platform synthesis; wired amplify scripts; validated third-party model; submitted 1412-request fleet pair-amplification batch across 59 packages</td>
      <td>8.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>12.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Metrics-tracker WS1: extract shared UI package with injectable client transport seam; rewire web shell; fix React-dedup + tests; tsc+32 tests+build green</td>
      <td>7.0h</td>
      <td>38m</td>
      <td>6m</td>
      <td>11.1x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>NLI validation of third-party-model-amplified pairs (DeBERTa-v3 NLI): verified working, built validate+prune+regenerate pipeline, ran loop to convergence (weak rate 10.5%-&gt;1.9% across 14,384 pairs/59 pkgs)</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>6m</td>
      <td>10.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Novel background analysis and continuity review; 11 files read; full plot/dependency/risk/dates report</td>
      <td>4.0h</td>
      <td>38m</td>
      <td>8m</td>
      <td>6.3x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Full content audit + a third-party model pluggable LLM provider migration + content remediation (amplify/scenarios/distractors/recall) on updated provider</td>
      <td>16.0h</td>
      <td>170m</td>
      <td>15m</td>
      <td>5.7x</td>
      <td>64.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>18</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>481.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>782</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>74</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>9,395,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>36.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>390.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>12.0</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 90.0x ceiling came from Build an infrastructure-provisioning tool missing content: +117 conformance packs (12-&gt;129), +68 discoverers (56-&gt;124), +42 advisor checks (59-&gt;101) incl servic...; the 5.7x floor was Full content audit + a third-party model pluggable LLM provider migration + content remediation (amplify/scenarios/distractors/recall) on updated provider. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (390.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 18 tasks, the day produced roughly 12.0 weeks of senior-engineer-equivalent throughput in 13.0 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 19, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-19-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-19-leverage-record.html</id>
    <updated>2026-06-19T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">One task. June 19, 2026 weighted to 35.5x leverage across 20.0 human-equivalent hours in 34 Claude-minutes. Supervisory leverage closed at 600.0x.</p>
<p class="mb-4 font-light font-serif">0.5 weeks of human-equivalent throughput in 0.6 hours of Claude wall-clock. The 35.5x ceiling came from Audit a provisioning tool implementation + tests vs its docs (23-area multi-agent review, stub/coverage/gap analysis); the 35.5x floor sat at Audit a provisioning tool implementation + tests vs its docs (23-area multi-agent review, stub/coverage/gap analysis).</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Audit a provisioning tool implementation + tests vs its docs (23-area multi-agent review, stub/coverage/gap analysis)</td>
      <td>20.0h</td>
      <td>34m</td>
      <td>2m</td>
      <td>35.5x</td>
      <td>600.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>20.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>34</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,600,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>35.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 35.5x ceiling came from Audit a provisioning tool implementation + tests vs its docs (23-area multi-agent review, stub/coverage/gap analysis); the 35.5x floor was Audit a provisioning tool implementation + tests vs its docs (23-area multi-agent review, stub/coverage/gap analysis). Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (600.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 1 task, the day produced roughly 0.5 weeks of senior-engineer-equivalent throughput in 0.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 18, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-18-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-18-leverage-record.html</id>
    <updated>2026-06-18T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. June 18, 2026 weighted to 36.8x leverage across 52.0 human-equivalent hours in 85 Claude-minutes. Supervisory leverage closed at 624.0x.</p>
<p class="mb-4 font-light font-serif">1.3 weeks of human-equivalent throughput in 1.4 hours of Claude wall-clock. The 38.5x ceiling came from Full content audit (audit_specs.py + content-audit.py, 24 phases, 289 pkgs/592 specs) + mechanical fixes: canonical reconcile, 4 content-domain specs completed, domain docs refresh...; the 36.4x floor sat at Full deployment-readiness audit (36 changed repos via 13 fan-out agents) + applied safe fixes across 19 repos + doc/baseline updates.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full content audit (audit_specs.py + content-audit.py, 24 phases, 289 pkgs/592 specs) + mechanical fixes: canonical reconcile, 4 content-domain specs completed, domain docs refreshed</td>
      <td>12.0h</td>
      <td>19m</td>
      <td>2m</td>
      <td>38.5x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full deployment-readiness audit (36 changed repos via 13 fan-out agents) + applied safe fixes across 19 repos + doc/baseline updates</td>
      <td>40.0h</td>
      <td>66m</td>
      <td>3m</td>
      <td>36.4x</td>
      <td>800.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>52.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>85</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,250,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>36.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>624.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.3</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 38.5x ceiling came from Full content audit (audit_specs.py + content-audit.py, 24 phases, 289 pkgs/592 specs) + mechanical fixes: canonical reconcile, 4 content-domain specs completed,...; the 36.4x floor was Full deployment-readiness audit (36 changed repos via 13 fan-out agents) + applied safe fixes across 19 repos + doc/baseline updates. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (624.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 1.3 weeks of senior-engineer-equivalent throughput in 1.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 9, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-09-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-09-leverage-record.html</id>
    <updated>2026-06-09T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. June 9, 2026 weighted to 13.4x leverage across 50.5 human-equivalent hours in 226 Claude-minutes. Supervisory leverage closed at 216.4x.</p>
<p class="mb-4 font-light font-serif">1.3 weeks of human-equivalent throughput in 3.8 hours of Claude wall-clock. The 16.6x ceiling came from Finish email-platform remediation: J<em>providers + O</em>frontend + K.1 accept-creates-rule; 3 commits, backend 947 / frontend 321 green; the 8.4x floor sat at Email-platform outage recovery + fleet CI policy: strip tests from all buildspecs + install pre-push test gate across 27 tool repos.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Finish email-platform remediation: J<em>providers + O</em>frontend + K.1 accept-creates-rule; 3 commits, backend 947 / frontend 321 green</td>
      <td>16.0h</td>
      <td>58m</td>
      <td>1m</td>
      <td>16.6x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Phase B logging re-arch: S3+Athena log store in telemetry-beacon IaC + 19 deploy scripts off CloudWatch to local+Vector + Vector shipper deployed/verified</td>
      <td>10.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>15.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Email-platform remediation cont.: repair Celery beat fan-out (4 AI tasks) + reconcile README doc-lies (MCP count, pgvector, WS events, rules/search); suite 946 green</td>
      <td>7.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>14.0x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Service-health-monitor Fargate migration steps 1-4: shared tools ECS cluster + parallel Fargate service built applied and verified healthy</td>
      <td>8.0h</td>
      <td>38m</td>
      <td>3m</td>
      <td>12.6x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Service-health-monitor migration IaC reconciliation (Fix 1+2): import live ALB rule into tools-fargate + strip old stack + delete orphaned TG; move CI to ECS deploy + CodeBuild IAM</td>
      <td>3.5h</td>
      <td>20m</td>
      <td>1m</td>
      <td>10.5x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Service-health-monitor Fargate cutover (steps 5-6): webhook roll, repoint ALB rule to Fargate TG, verify /health 200, decommission EC2 instance</td>
      <td>2.5h</td>
      <td>15m</td>
      <td>2m</td>
      <td>10.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Email-platform outage recovery + fleet CI policy: strip tests from all buildspecs + install pre-push test gate across 27 tool repos</td>
      <td>3.5h</td>
      <td>25m</td>
      <td>2m</td>
      <td>8.4x</td>
      <td>105.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>50.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>226</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>14</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,540,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>13.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>216.4x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.3</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 16.6x ceiling came from Finish email-platform remediation: J<em>providers + O</em>frontend + K.1 accept-creates-rule; 3 commits, backend 947 / frontend 321 green; the 8.4x floor was Email-platform outage recovery + fleet CI policy: strip tests from all buildspecs + install pre-push test gate across 27 tool repos. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (216.4x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 1.3 weeks of senior-engineer-equivalent throughput in 3.8 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 8, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-08-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-08-leverage-record.html</id>
    <updated>2026-06-08T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eleven tasks. June 8, 2026 weighted to 37.1x leverage across 510.0 human-equivalent hours in 824 Claude-minutes. Supervisory leverage closed at 695.5x.</p>
<p class="mb-4 font-light font-serif">12.8 weeks of human-equivalent throughput in 13.7 hours of Claude wall-clock. The 120.0x ceiling came from Travel-planning-app phases 2-9 backend build (itinerary reservations realtime expenses journal templates search fleet-integration email-import MCP) 150 tests 96pct + 2 adversarial...; the 6.9x floor sat at Finish readiness audit: pushed 25 fix commits, verified 8 CI/CD pipelines, diagnosed+fixed a prod-pipeline ERESOLVE regression (console-sim eslint ^10-&gt;^9.20.0), root-caused 2 pre-....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Travel-planning-app phases 2-9 backend build (itinerary reservations realtime expenses journal templates search fleet-integration email-import MCP) 150 tests 96pct + 2 adversarial reviews + 14-finding hardening</td>
      <td>140.0h</td>
      <td>70m</td>
      <td>2m</td>
      <td>120.0x</td>
      <td>4200.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Travel-planning app; four planning docs (requirements design plan testing-strategy) for a trip planner with fleet integrations</td>
      <td>20.0h</td>
      <td>14m</td>
      <td>4m</td>
      <td>85.7x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full deployment-readiness audit (a monorepo, 40 changed repos): Phase-0 canonical reconciliation (patent specification), schema-validated 973 specs (44 invalid found), ~16110 tests run 0 failures, 93-finding report, safe+ESLint fixes across 24 repos committed locally (no push), 40 audit timestamps recorded, diagnosed unhealthy local Postgres as API-gateway test-error cause</td>
      <td>90.0h</td>
      <td>65m</td>
      <td>4m</td>
      <td>83.1x</td>
      <td>1350.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Email-platform remediation plan: cluster 116 audit findings into 20 root-cause work packages, dependency-ordered phased roadmap w/ code-grounded steps (20-architect workflow)</td>
      <td>16.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Audit an email platform: 4 design docs vs code+tests gap analysis + full code review/bug hunt (16-domain multi-agent, adversarially verified)</td>
      <td>32.0h</td>
      <td>42m</td>
      <td>3m</td>
      <td>45.7x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Travel-planning-app Phase 1 build; ports + defect-tracker board + private repo + FastAPI/React scaffold (trips/members/settings auth 49 tests 97pct cov) + adversarial review + 17-finding hardening</td>
      <td>32.0h</td>
      <td>45m</td>
      <td>3m</td>
      <td>42.7x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Execute email-platform remediation: P0 foundation (CI honesty + Alembic) + P1 criticals (IDOR/CSRF, NullPool workers, AI budget enforcement, webhook auth, send-pipeline); 8 commits, +18 tests, suite green</td>
      <td>32.0h</td>
      <td>70m</td>
      <td>1m</td>
      <td>27.4x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Continue email-platform remediation: complete P1 (search, Valkey WS bridge) + P2 sweep (block-at-sync, quiet-hours TZ, batch-snooze, ReDoS, hot-cache bound, N+1); 7 commits, suite 946 green</td>
      <td>18.0h</td>
      <td>50m</td>
      <td>1m</td>
      <td>21.6x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Resumed multi-day content remediation: built+debugged a wall-clock watchdog for third-party-model socket-stall wedges (fixed zombie-thread cascade); fixed private-scope leak + reverted contamination; diagnosed+fixed casefold and strip over-normalization data-corruption bugs in dup-detection (fixer + audit) with backup-restore; LIVE dup-options 1727-&gt;0; backfilled all 206 LIVE packages to full content incl. one pathological package; built distractor-explanation generator + backfilled 10293 explanations across 4 packages</td>
      <td>120.0h</td>
      <td>380m</td>
      <td>14m</td>
      <td>18.9x</td>
      <td>514.3x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>AWS cost-spike forensics + prod tools-box disk-full incident recovery (EBS volume rescue)</td>
      <td>6.0h</td>
      <td>35m</td>
      <td>9m</td>
      <td>10.3x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Finish readiness audit: pushed 25 fix commits, verified 8 CI/CD pipelines, diagnosed+fixed a prod-pipeline ERESOLVE regression (console-sim eslint ^10-&gt;^9.20.0), root-caused 2 pre-existing red pipelines (a CMS EC2 deploy, an API gateway ruff on concurrent commit) as not-from-this-audit</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>6.9x</td>
      <td>240.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>510.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>824</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>44</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>23,705,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>37.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>695.5x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>12.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 120.0x ceiling came from Travel-planning-app phases 2-9 backend build (itinerary reservations realtime expenses journal templates search fleet-integration email-import MCP) 150 tests 96...; the 6.9x floor was Finish readiness audit: pushed 25 fix commits, verified 8 CI/CD pipelines, diagnosed+fixed a prod-pipeline ERESOLVE regression (console-sim eslint ^10-&gt;^9.20.0).... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (695.5x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 11 tasks, the day produced roughly 12.8 weeks of senior-engineer-equivalent throughput in 13.7 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 7, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-07-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-07-leverage-record.html</id>
    <updated>2026-06-07T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks. June 7, 2026 weighted to 24.0x leverage across 36.0 human-equivalent hours in 90 Claude-minutes. Supervisory leverage closed at 240.0x.</p>
<p class="mb-4 font-light font-serif">0.9 weeks of human-equivalent throughput in 1.5 hours of Claude wall-clock. The 28.4x ceiling came from Content remediation: strict content-audit completeness FAIL gates + remediation_inventory.py (prioritized, 0/289 pass strict bar) + duplicate MCQ option-text code-defect fix via me...; the 17.1x floor sat at Executed + verified cloud question backfill: 9095 schema-faithful MCQs across 42 content packages, node coverage 77.8%-&gt;99.98% (10 degenerate skipped), 0 dup options, peak RSS 282M....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Content remediation: strict content-audit completeness FAIL gates + remediation_inventory.py (prioritized, 0/289 pass strict bar) + duplicate MCQ option-text code-defect fix via memory-bounded third-party-model regen (189 options/36 cloud pkgs, 82% distractor==correct, 0 residual, peak 178MB) + memory-bounded question backfill generator for 9108 uncovered nodes (smoke-verified)</td>
      <td>26.0h</td>
      <td>55m</td>
      <td>6m</td>
      <td>28.4x</td>
      <td>260.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Executed + verified cloud question backfill: 9095 schema-faithful MCQs across 42 content packages, node coverage 77.8%-&gt;99.98% (10 degenerate skipped), 0 dup options, peak RSS 282MB, run records committed+pushed to staging</td>
      <td>10.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>17.1x</td>
      <td>200.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>36.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>90</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>950,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 28.4x ceiling came from Content remediation: strict content-audit completeness FAIL gates + remediation_inventory.py (prioritized, 0/289 pass strict bar) + duplicate MCQ option-text co...; the 17.1x floor was Executed + verified cloud question backfill: 9095 schema-faithful MCQs across 42 content packages, node coverage 77.8%-&gt;99.98% (10 degenerate skipped), 0 dup op.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (240.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 2 tasks, the day produced roughly 0.9 weeks of senior-engineer-equivalent throughput in 1.5 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 6, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-06-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-06-leverage-record.html</id>
    <updated>2026-06-06T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. June 6, 2026 weighted to 26.8x leverage across 161.5 human-equivalent hours in 362 Claude-minutes. Supervisory leverage closed at 312.6x.</p>
<p class="mb-4 font-light font-serif">4.0 weeks of human-equivalent throughput in 6.0 hours of Claude wall-clock. The 218.2x ceiling came from A service health monitor coverage backfill: 16% to 95% lines, 31 test files, 263 tests; the 6.6x floor sat at Commit+push verified audit fixes to staging (6 repos, no prod); create private remote for a security-scanning service; create staging branches fleet-wide (89/90 repos); debug zsh :....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>A service health monitor coverage backfill: 16% to 95% lines, 31 test files, 263 tests</td>
      <td>40.0h</td>
      <td>11m</td>
      <td>3m</td>
      <td>218.2x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Post-audit remediation + features: quick wins, backup sync of content+weights to 2 buckets, AudioRecorder web parity port + parity-matrix deferred reclassification, engine weights to Git LFS, coverage backfill across 4 repos (~700 tests), fleet-wide staging-to-prod merge-safety reconciliation incl engine conflict resolution, and local engine+api+web stack stood up and verified end-to-end</td>
      <td>48.0h</td>
      <td>112m</td>
      <td>10m</td>
      <td>25.7x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full readiness audit across 52 repos (Phase 0 + 11-agent fan-out, 222 findings) then applied &amp; independently verified 11 code/test/doc fixes + canonical sync + audit-doc 35-repo expansion</td>
      <td>24.0h</td>
      <td>60m</td>
      <td>4m</td>
      <td>23.9x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Full readiness audit rerun2: Phase 0 + 11-agent workflow fan-out over 38 change-detected repos (131 findings); adversarially verified all 21 CRITICAL+HIGH (1 refuted, 1 downgraded); applied safe fixes + committed/pushed 27 repos; provisioned private tool-fleet-dashboard remote; report + remediation; gated patent items untouched</td>
      <td>40.0h</td>
      <td>107m</td>
      <td>3m</td>
      <td>22.4x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>An origin service: raise test coverage from 73.17% to &gt;=75% by adding 85 unit tests across 4 router/CLI modules</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>4m</td>
      <td>10.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>clear 85% per-module coverage gate for core and persistence modules</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>8.2x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Commit+push verified audit fixes to staging (6 repos, no prod); create private remote for a security-scanning service; create staging branches fleet-wide (89/90 repos); debug zsh :r modifier</td>
      <td>3.5h</td>
      <td>32m</td>
      <td>2m</td>
      <td>6.6x</td>
      <td>105.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>161.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>362</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>31</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,689,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>312.6x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>4.0</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 218.2x ceiling came from A service health monitor coverage backfill: 16% to 95% lines, 31 test files, 263 tests; the 6.6x floor was Commit+push verified audit fixes to staging (6 repos, no prod); create private remote for a security-scanning service; create staging branches fleet-wide (89/90.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (312.6x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 4.0 weeks of senior-engineer-equivalent throughput in 6.0 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 5, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-05-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-05-leverage-record.html</id>
    <updated>2026-06-05T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-two tasks. June 5, 2026 weighted to 29.1x leverage across 347.2 human-equivalent hours in 717 Claude-minutes. Supervisory leverage closed at 281.6x.</p>
<p class="mb-4 font-light font-serif">8.7 weeks of human-equivalent throughput in 11.9 hours of Claude wall-clock. The 81.8x ceiling came from Inference-engine lint+type overhaul: ruff 3106-&gt;0 + mypy --strict 2097-&gt;1 (22-agent typing pass + config overrides) + per-error-code lint ratchet &amp; CI wiring + test-profile boot-sk...; the 1.9x floor sat at Mechanical freshness edit pass on use-case docs; update 12 stale footers + fix cluster count in a use-case doc.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Inference-engine lint+type overhaul: ruff 3106-&gt;0 + mypy --strict 2097-&gt;1 (22-agent typing pass + config overrides) + per-error-code lint ratchet &amp; CI wiring + test-profile boot-skip + hnswlib; adversarial review caught a real float-truncation bug + 3 runtime bugs</td>
      <td>150.0h</td>
      <td>110m</td>
      <td>6m</td>
      <td>81.8x</td>
      <td>1500.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Brand consolidation across patent portfolio: strip product brands from 8 patent specifications (brand-free, matching filed specs) and refresh ~40 supporting docs (add a patent specification, fix counts/paths/footers, consolidate retired per-app brands to 12 clusters, recompute business-document financials)</td>
      <td>20.0h</td>
      <td>30m</td>
      <td>2m</td>
      <td>40.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Tier-3 cross-repo patent remediation Wave 5; wire dormant validate<em>bundle onto production </em>run<em>atoms path with default-off rejection-enforcement flag; cycle detector; configurable coverage fraction; validated</em>variants; adversarial-verify 8 + re-verify one claim; flip 5 in matrix 646 to 651 (91%)</td>
      <td>18.0h</td>
      <td>32m</td>
      <td>2m</td>
      <td>33.8x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Audit inference-engine unit tests (234 files, ~114k LOC): heuristic AST scan + 12 parallel review agents; removed ~146 zero-value tests and rewrote 13 tautological/weak assertions across ~40 files; full unit suite green (6654 passed, 10 skipped)</td>
      <td>20.0h</td>
      <td>40m</td>
      <td>3m</td>
      <td>30.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Resolve deferred patent claim-scope items across patent specifications: shared-routing claim coverage, single-MCQ section + which<em>correct/scenario format</em>metadata + claim-14 alignment, goal<em>id schema + federated retrieval + exam</em>tip rename, mastery-predicate iff, verifier mapping + domain-neutral defs</td>
      <td>7.0h</td>
      <td>15m</td>
      <td>2m</td>
      <td>28.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Tier-3 cross-repo patent remediation phase-1 orchestration; recon across 3 repos; schema + staleness (composition + dormant-method wiring) waves; disentangle and bank entangled WIP; adversarial-verify 12 claims; flip 8 in matrix 634 to 642 (other impls logged separately)</td>
      <td>38.0h</td>
      <td>100m</td>
      <td>6m</td>
      <td>22.8x</td>
      <td>380.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Portfolio-wide terminology-neutrality pass: remove domain-specific content term (~75 occurrences) across 6 patent drafts incl. source-type enum + enum renames and deprecated-artifact filename</td>
      <td>4.5h</td>
      <td>12m</td>
      <td>1m</td>
      <td>22.5x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Inference-engine branch-review P1 bug fixes; adaptive-intake zero-items (selector contract + min<em>intake</em>items), grpc.aio context.abort never awaited (2 servicers), ring <em>persist</em>ring_topology NameError, composite-autopilot missing import; triage 6 findings; verify full unit 6806 + integration 455</td>
      <td>9.0h</td>
      <td>28m</td>
      <td>3m</td>
      <td>19.3x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Resume crashed certification-domain synthesis: fix structural ~0.80 validation plateau with tier-aware adversarial challenge calibration (recall-&gt;definition/terminology challenges; boundary<em>case+prerequisite</em>chain reserved for analysis tier); prompts tier-directive map+helper, expanded challenge_type schema enum, validator wiring tier=node.tier, tier-faithful diag, 13 new unit tests; origin-service unit suite 685 green + ruff clean; third-party-model diagnostic confirms recall failures 4/7-&gt;1/7, overall 24%-&gt;10%, projected pass ~0.91 clearing the 0.90 gate</td>
      <td>6.0h</td>
      <td>20m</td>
      <td>2m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Tier-3 cross-repo patent remediation Wave 4; re-baseline atoms pipeline vs WIP; implement atom writers + engine validate_collection wiring; diagnose+fix shared-lib HTTPS-validator regression (14 engine fixtures); adversarial-verify 5 claims; flip 4 in matrix 642 to 646 (90%)</td>
      <td>22.0h</td>
      <td>75m</td>
      <td>3m</td>
      <td>17.6x</td>
      <td>440.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Patent specification freshness+brand-consolidation edit pass: 9 docs, 34 filing counts, 12-cluster brand tokens, patent-specification inventions added</td>
      <td>4.0h</td>
      <td>14m</td>
      <td>5m</td>
      <td>17.1x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Patent claim closures in an origin service (config flags + cosine isolation + three-term composite + stem embeddings + validation provenance)</td>
      <td>8.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>17.1x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Inference-engine review Low-Med fix; tracked background-task registry: core.background (strong-ref no-GC + exception-logging done-callback + shutdown cancellation) wired through all 11 fire-and-forget create<em>task sites in an API gateway + ring/manager; retire </em>shield_task; lifespan drain; 6 tests; verify full unit 6665 + integration 456</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>16.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Tier-3 cross-repo patent remediation Waves 6+7; cross-repo information-gain ranking (origin-service Fisher-info + engine ranking) and adversarial-evaluation configurable opt-in alignment fault; diagnose adversarial-evaluation broken-transformers dep blocking related claims; adversarial-verify both; flip 2 in matrix 651 to 653 (91%)</td>
      <td>12.0h</td>
      <td>50m</td>
      <td>2m</td>
      <td>14.4x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Inference-engine security-review Medium fix; upload size-cap: <em>read</em>upload<em>capped streams uploads in 1MB chunks rejecting 413 before buffering the full payload (declared-size early-reject + running cap) wired into upload</em>resume + submit_audio; 4 tests; verify full unit 6659 + integration 455</td>
      <td>3.5h</td>
      <td>16m</td>
      <td>1m</td>
      <td>13.1x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Inference-engine security-review HIGH fixes; fail-closed API auth when API key missing (cloud/prod 503 + test/local escape hatch) + admin-key enforcement on 3 unprotected admin/debug routes (relocate <em>verify</em>admin_key + Depends guard + test auth + negative test); reconcile concurrent test-prune commit; verify full unit 6655 + integration 455</td>
      <td>7.0h</td>
      <td>32m</td>
      <td>3m</td>
      <td>13.1x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Freshness edit pass on patent specifications and business documents: add a patent specification to all 11 target files, fix scope/counts, update CIP-&gt;Filing paths, fix a cluster name, recompute business-document financials for 33 apps/753 claims, fix nonexistent brand names</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>8m</td>
      <td>10.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Terminology-neutrality pass on three patent specifications</td>
      <td>1.0h</td>
      <td>6m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Terminology-neutrality pass on a patent specification; replace lesson/lessons with content document/units</td>
      <td>1.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>7.5x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Patent specification freshness + brand consolidation edit pass (6 files)</td>
      <td>1.5h</td>
      <td>18m</td>
      <td>3m</td>
      <td>5.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Terminology-neutrality pass on a patent specification (lesson-&gt;content document)</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>3m</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Mechanical freshness edit pass on use-case docs; update 12 stale footers + fix cluster count in a use-case doc</td>
      <td>0.2h</td>
      <td>8m</td>
      <td>3m</td>
      <td>1.9x</td>
      <td>5.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>347.2</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>717</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>74</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>17,919,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>29.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>281.6x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>8.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 81.8x ceiling came from Inference-engine lint+type overhaul: ruff 3106-&gt;0 + mypy --strict 2097-&gt;1 (22-agent typing pass + config overrides) + per-error-code lint ratchet &amp; CI wiring +...; the 1.9x floor was Mechanical freshness edit pass on use-case docs; update 12 stale footers + fix cluster count in a use-case doc. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (281.6x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 22 tasks, the day produced roughly 8.7 weeks of senior-engineer-equivalent throughput in 11.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 4, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-04-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-04-leverage-record.html</id>
    <updated>2026-06-04T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-three tasks. June 4, 2026 weighted to 48.1x leverage across 1301.0 human-equivalent hours in 1622 Claude-minutes. Supervisory leverage closed at 500.4x.</p>
<p class="mb-4 font-light font-serif">32.5 weeks of human-equivalent throughput in 27.0 hours of Claude wall-clock. The 173.3x ceiling came from Two-pass 66-agent code-grounded re-audit of all 718 patent claims against the live codebase; corrected traceability matrix (325-&gt;221 wired, 112 downgrades), regenerated 33 section...; the 5.0x floor sat at Close patent-claim gaps on one application (8 claims) wave-2 lifecycle wiring in an inference engine.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Two-pass 66-agent code-grounded re-audit of all 718 patent claims against the live codebase; corrected traceability matrix (325-&gt;221 wired, 112 downgrades), regenerated 33 section sources plus gap analysis plus roadmap, applied dependent-claim semantics</td>
      <td>180.0h</td>
      <td>62m</td>
      <td>3m</td>
      <td>173.3x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Implemented ~220 patent claims from audit baseline to 441/718 wired via ~28 parallel agents plus shared-file integration wiring; full unit suite 5842 passing</td>
      <td>700.0h</td>
      <td>316m</td>
      <td>12m</td>
      <td>132.9x</td>
      <td>3500.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Audit plus wire patent claims to production across multiple applications (19 plus 65 claims) — wiring modules plus REST endpoints plus tests, adversarial per-claim verification, matrix reconciliation 445-&gt;528/718, committed and pushed to staging</td>
      <td>100.0h</td>
      <td>55m</td>
      <td>4m</td>
      <td>109.1x</td>
      <td>1500.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Patent claim implementation waves: wired and implemented 102 claims (six applications plus 13 subsystems plus 38 mechanism-completion algorithms) to production, adversarially verified, matrix 528-&gt;631/718; engine plus docs committed and pushed to staging</td>
      <td>130.0h</td>
      <td>105m</td>
      <td>2m</td>
      <td>74.3x</td>
      <td>3900.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Harden patent plus diagram audit specs (4 gap-closing checks) and run proactive 8-agent semantic/legal sweep across all patent drafts; apply ~28 calibrated overclaim/self-contradiction/grammar/cross-ref fixes</td>
      <td>12.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>28.8x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Patent remediation close-out: hard system-claim attempts (2 confirmed), production spread-propagation fix plus test, comprehensive traceability roadmap/epilogue rewrite; final state 634/718 (88%), 0 not-implemented</td>
      <td>14.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>28.0x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Patent gap closure on one application — four-feature credential extraction plus reliability weights plus KL-divergence info-gain chain plus session loop</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Close patent claim gaps on one application in a scenario engine (13 claims)</td>
      <td>16.0h</td>
      <td>38m</td>
      <td>5m</td>
      <td>25.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Patent claim gap closure on one application — trajectory optimizer (8 claims)</td>
      <td>12.0h</td>
      <td>42m</td>
      <td>5m</td>
      <td>17.1x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Patent claim gap closure on one application (assessment session orchestrator plus 2 fixes)</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>13.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Close patent-claim gaps on one application in an inference engine composer (10 claims)</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>13.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Patent claim gap closure on one application — 2PL MLE plus 5 mechanisms plus 22 new tests</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Close patent-claim gaps on one application (typed candidate record plus composite table plus audit-logger injection plus cosine similarity plus cycle logging)</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Close patent claim gaps on one application: scenario stemtype plus source pair ids; dynamic max-correct cap; injectable LM judge in association extractor; 3..7 step chains; anchor-grounded narrative; rubric converter plus rubric entailment validator wired in goal generation; knowledge scope on persona; injectable LM judges; single-MCQ validator per sub-question; max-correct in format metadata; scheduler instantiated and used; coordinator callable from engine; 45 tests green</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Close patent-claim gaps on one application (an inference engine interview module)</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Close patent-claim gaps on one application in an inference engine</td>
      <td>8.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Close patent claim gaps on one application (4 claims) in an inference engine chat module</td>
      <td>3.5h</td>
      <td>22m</td>
      <td>5m</td>
      <td>9.6x</td>
      <td>42.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Patent claim gap closure on one application — readiness prediction engine (13 claims wired plus 20 new tests)</td>
      <td>6.0h</td>
      <td>40m</td>
      <td>5m</td>
      <td>9.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Close patent-claim gaps on one application (6 claims) in an inference engine probing modules</td>
      <td>8.0h</td>
      <td>55m</td>
      <td>5m</td>
      <td>8.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Pre-filing semantic/legal review of two CIP patent drafts (interactive activities and an internal engine)</td>
      <td>4.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>8.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Wire dormant adversarial detection mechanisms on one application into a detection pass to flip 12 patent claims from partial to reduced-to-practice</td>
      <td>4.0h</td>
      <td>28m</td>
      <td>3m</td>
      <td>8.6x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Patent-claim gap closure on one application (5 claims) in an inference engine replication plus persistence modules</td>
      <td>4.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>8.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Close patent claim gaps on one application: per-concept pass-threshold; embed-model selection; override-audit entry; NLI-threshold mutation; retroactive rescore; NLI checkpoint wiring</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>5m</td>
      <td>8.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Close patent-claim gaps on one application (embedding manifold versioning) — fix 7 mechanisms plus 31 new tests</td>
      <td>8.0h</td>
      <td>65m</td>
      <td>5m</td>
      <td>7.4x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Close patent claim gaps on one application (cohort intelligence — ~18 claims)</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Close patent-claim gaps on one application (behavioral analytics) in an inference engine</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Pre-filing semantic/legal review of two CIP patent drafts — five-class analysis: absolute-outcome overclaims, claim vs mechanism, cross-reference accuracy, enumeration consistency, domain-neutrality</td>
      <td>3.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>6.4x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Close patent-claim gaps on one application (cognitive state detection) in an inference engine</td>
      <td>8.0h</td>
      <td>75m</td>
      <td>5m</td>
      <td>6.4x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Close patent-claim gaps on one application (replay plus sim-real, 2 claims)</td>
      <td>2.0h</td>
      <td>20m</td>
      <td>5m</td>
      <td>6.0x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Patent claim gap closure on one application — wire CDV/registry/suppression/session-mode into an activity synthesizer selection step</td>
      <td>4.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>5.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Close patent-claim gaps on one application (federation/tenancy): adaptive clip bound plus diagnostic log plus ring version entry plus influence approximation engine</td>
      <td>3.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>5.1x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Close patent-claim gaps on one application — explainability engine production-ready plus 85 new tests</td>
      <td>2.5h</td>
      <td>30m</td>
      <td>5m</td>
      <td>5.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Close patent-claim gaps on one application (8 claims) wave-2 lifecycle wiring in an inference engine</td>
      <td>5.0h</td>
      <td>60m</td>
      <td>5m</td>
      <td>5.0x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>33</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1301.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1622</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>156</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>30,435,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>48.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>500.4x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>32.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 173.3x ceiling came from Two-pass 66-agent code-grounded re-audit of all 718 patent claims against the live codebase; corrected traceability matrix (325-&gt;221 wired, 112 downgrades), reg...; the 5.0x floor was Close patent-claim gaps on one application (8 claims) wave-2 lifecycle wiring in an inference engine. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (500.4x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 33 tasks, the day produced roughly 32.5 weeks of senior-engineer-equivalent throughput in 27.0 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 3, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-03-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-03-leverage-record.html</id>
    <updated>2026-06-03T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nine tasks. June 3, 2026 weighted to 41.0x leverage across 617.5 human-equivalent hours in 904 Claude-minutes. Supervisory leverage closed at 661.6x.</p>
<p class="mb-4 font-light font-serif">15.4 weeks of human-equivalent throughput in 15.1 hours of Claude wall-clock. The 160.0x ceiling came from Drove all NOT_IMPLEMENTED patent claims to IMPLEMENTED (92-&gt;0): 3 net-new 20-claim engines + org-analytics, transformation-drift, multi-tenant, third-party validation, experimentat...; the 5.0x floor sat at Add parent-module subgraph numerals to a patent spec&#39;s diagram figures.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Drove all NOT<em>IMPLEMENTED patent claims to IMPLEMENTED (92-&gt;0): 3 net-new 20-claim engines + org-analytics, transformation-drift, multi-tenant, third-party validation, experimentation, ring/distinction/lineage, atom federation/scope/image-integrity, instructor-mode UI; 0 NOT</em>IMPLEMENTED; all on staging</td>
      <td>240.0h</td>
      <td>90m</td>
      <td>10m</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Wire final dormant engines (replication subscriber/verifier, staleness job) with unit tests; re-trace 11 patent specs to code under reachability standard; split patent traceability matrix into per-patent sources + generated build_matrix.py</td>
      <td>80.0h</td>
      <td>75m</td>
      <td>4m</td>
      <td>64.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Harden 8 patent specification drafts per review: soften bitwise/RAG/NLI/guarantee overclaims to calibrated tolerances + answer-support verifier; fix stem-type count; worked-example heading; internal-engine cross-refs; anti-overclaim paragraphs; brand lines</td>
      <td>12.0h</td>
      <td>12m</td>
      <td>4m</td>
      <td>60.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Design + scaffold an internal tool-fleet dashboard (auth-gated tool dashboard, soft per-user/per-tool permission gate default-none, admin grant matrix, JIT user mirror, 22-tool registry, health-proxy, FastMCP); FastAPI backend + React/design-system frontend + 5 docs + fleet integration, 117 tests green (backend 108 @93% cov); plus auth-service Lambda-vs-Fargate recon and ADR 0006</td>
      <td>40.0h</td>
      <td>42m</td>
      <td>4m</td>
      <td>57.8x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Figure-vs-spec alignment across patent specification drafts: add a detailed-description method section + add missing parent-module subgraph numerals (13 diagram figures) with render validation</td>
      <td>7.0h</td>
      <td>10m</td>
      <td>5m</td>
      <td>42.0x</td>
      <td>84.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Full a11y audit + fix of a family of 10 marketing sites (main + 9 sisters): built axe harness, diagnosed FOUC/scroll-reveal/dark-mode/redirect/gate-timing false positives, fixed contrast tokens (light+dark), link underlines, definition-list, heading-order, landmarks, scope, redirect stubs, velvet-rope gate; all clean both modes</td>
      <td>100.0h</td>
      <td>200m</td>
      <td>3m</td>
      <td>30.0x</td>
      <td>2000.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Autonomous patent reduction-to-practice audit (63-agent trace of 718 claims, matrix rebuild 544-&gt;153 wired), third-party model integration + cost capture + Valkey/label fixes, per-domain readiness calibration pipeline + intellectual property documentation activation</td>
      <td>120.0h</td>
      <td>300m</td>
      <td>20m</td>
      <td>24.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Implement 12 unimplemented patent claims to reduction-to-practice with tests+endpoints+config; prove 0% exam-bug fix with 7-test regression; one patent spec cleared to 0 unimplemented</td>
      <td>18.0h</td>
      <td>170m</td>
      <td>3m</td>
      <td>6.3x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Add parent-module subgraph numerals to a patent spec&#39;s diagram figures</td>
      <td>0.5h</td>
      <td>6m</td>
      <td>3m</td>
      <td>5.0x</td>
      <td>10.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>617.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>904</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>56</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>12,118,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>41.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>661.6x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>15.4</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 160.0x ceiling came from Drove all NOT_IMPLEMENTED patent claims to IMPLEMENTED (92-&gt;0): 3 net-new 20-claim engines + org-analytics, transformation-drift, multi-tenant, third-party vali...; the 5.0x floor was Add parent-module subgraph numerals to a patent spec&#39;s diagram figures. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (661.6x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 9 tasks, the day produced roughly 15.4 weeks of senior-engineer-equivalent throughput in 15.1 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 2, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-02-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-02-leverage-record.html</id>
    <updated>2026-06-02T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. June 2, 2026 weighted to 27.1x leverage across 124.0 human-equivalent hours in 275 Claude-minutes. Supervisory leverage closed at 354.3x.</p>
<p class="mb-4 font-light font-serif">3.1 weeks of human-equivalent throughput in 4.6 hours of Claude wall-clock. The 80.0x ceiling came from Full accessibility audit + fix across all four client apps (web/desktop/Android/iOS): jsx-a11y errors, label associations, autofocus, tablist roles, jsx-a11y plugin + axe coverage...; the 7.9x floor sat at Integrate a third-party model as synthesis generator: extra-body/timeout config + keep-alive fix in an LLM client library + CLI flags + diagnose-and-fix concurrency hang + caching/....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full accessibility audit + fix across all four client apps (web/desktop/Android/iOS): jsx-a11y errors, label associations, autofocus, tablist roles, jsx-a11y plugin + axe coverage 8-&gt;40, 100+ Compose Slider/Switch/clickable semantics, ~40 SwiftUI VoiceOver labels/hidden</td>
      <td>80.0h</td>
      <td>60m</td>
      <td>3m</td>
      <td>80.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full WCAG 2.1 AA accessibility audit across all 4 client apps (web/desktop source + 39-route axe sweep; 11 mechanical fixes, 3 false positives triaged, ledger reconciled, native heuristics)</td>
      <td>7.0h</td>
      <td>8m</td>
      <td>2m</td>
      <td>52.5x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Run full accessibility audit across all four client apps (web/desktop/iOS/Android); hand-created Android AVD, booted sim+emulator, ran axe-sweep/vitest/XCUITest/Espresso a11y suites</td>
      <td>4.0h</td>
      <td>9m</td>
      <td>1m</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Fix iOS + Android accessibility audit failures: 44pt hit-target on a course-list button + opaque-white hero subtitles (contrast) + accessibilityHidden on decorative SF Symbols; repair Android Compose a11y test fixture (MainActivity-&gt;createComposeRule); drove both audits to green</td>
      <td>3.0h</td>
      <td>13m</td>
      <td>1m</td>
      <td>13.8x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Resume an adversarial evaluation harness OMNISCIENT-ONLY cloud sweeps: diagnose OOM root cause, generate 42 omni profiles, write concurrency-capped batching runner, bring up inference engine + eval backend at hard cap 3, validate via smoke, launch full 42-profile sweep with monitoring</td>
      <td>5.0h</td>
      <td>27m</td>
      <td>2m</td>
      <td>11.1x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Finish a certification domain&#39;s math content: fix 3 synthesis bugs (rep_pack schema-drop, judge-pool deadlock, id-collision), Sonnet regen of 38 goals, standalone re-judge of 381 items, prune to 0 rejected/critical, finalize+place package</td>
      <td>20.0h</td>
      <td>120m</td>
      <td>6m</td>
      <td>10.0x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Integrate a third-party model as synthesis generator: extra-body/timeout config + keep-alive fix in an LLM client library + CLI flags + diagnose-and-fix concurrency hang + caching/batching audit</td>
      <td>5.0h</td>
      <td>38m</td>
      <td>6m</td>
      <td>7.9x</td>
      <td>50.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>124.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>275</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>21</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,789,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>27.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>354.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>3.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 80.0x ceiling came from Full accessibility audit + fix across all four client apps (web/desktop/Android/iOS): jsx-a11y errors, label associations, autofocus, tablist roles, jsx-a11y pl...; the 7.9x floor was Integrate a third-party model as synthesis generator: extra-body/timeout config + keep-alive fix in an LLM client library + CLI flags + diagnose-and-fix concurr.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (354.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 3.1 weeks of senior-engineer-equivalent throughput in 4.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: June 1, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-06-01-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-06-01-leverage-record.html</id>
    <updated>2026-06-01T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Five tasks. June 1, 2026 weighted to 27.4x leverage across 52.0 human-equivalent hours in 114 Claude-minutes. Supervisory leverage closed at 390.0x.</p>
<p class="mb-4 font-light font-serif">1.3 weeks of human-equivalent throughput in 1.9 hours of Claude wall-clock. The 90.0x ceiling came from ADR 0005: novel adult-learner activity set for one content domain; triaged 16 activities into 6 tiers with intellectual-property considerations, implementation plan, validation met...; the 6.7x floor sat at Two content domains to pristine+beta (cohort 30): ~6,157 questions from 0, reweighted, pairs amplified (median-&gt;15), a competence stamp, all 30 beta zero-findings, committed+pushed.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>ADR 0005: novel adult-learner activity set for one content domain; triaged 16 activities into 6 tiers with intellectual-property considerations, implementation plan, validation metrics, and risk evaluation; updated ADR index</td>
      <td>15.0h</td>
      <td>10m</td>
      <td>2m</td>
      <td>90.0x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>A security-scanning service Phase 1 close-out; scan endpoint + dedup-aware persistence: 5 ORM models (repos/scans/scan<em>results/findings/finding</em>events) + Pydantic schemas + orchestrator (sequential scan execution with dedup/reopen/fixed lifecycle) + 8 REST endpoints (repos/scans/findings with status PATCH + audit events) + hand-authored Alembic migration + 13 endpoint tests; full suite 186 passed / 99% coverage; committed locally</td>
      <td>22.0h</td>
      <td>26m</td>
      <td>1m</td>
      <td>50.8x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Phase 0 of ADR-0005: extended activities catalog with 16 novel-activity entries for one content domain + 4 addons + academic category + deferred runtime_source + per-activity feature-flag plumbing + library mirror sync + 8 new tests + fixed 2 pre-existing test failures</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>26.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Forensic diagnosis of crashed cross-session synthesis run + safe checkpoint resume (one certification domain)</td>
      <td>2.0h</td>
      <td>15m</td>
      <td>3m</td>
      <td>8.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Two content domains to pristine+beta (cohort 30): ~6,157 questions from 0, reweighted, pairs amplified (median-&gt;15), a competence stamp, all 30 beta zero-findings, committed+pushed</td>
      <td>5.0h</td>
      <td>45m</td>
      <td>1m</td>
      <td>6.7x</td>
      <td>300.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>52.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>114</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>8</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>510,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>27.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>390.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.3</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 90.0x ceiling came from ADR 0005: novel adult-learner activity set for one content domain; triaged 16 activities into 6 tiers with intellectual-property considerations, implementation...; the 6.7x floor was Two content domains to pristine+beta (cohort 30): ~6,157 questions from 0, reweighted, pairs amplified (median-&gt;15), a competence stamp, all 30 beta zero-findin.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (390.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 5 tasks, the day produced roughly 1.3 weeks of senior-engineer-equivalent throughput in 1.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 31, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-31-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-31-leverage-record.html</id>
    <updated>2026-05-31T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Four tasks. May 31, 2026 weighted to 14.9x leverage across 90.0 human-equivalent hours in 362 Claude-minutes. Supervisory leverage closed at 450.0x.</p>
<p class="mb-4 font-light font-serif">2.2 weeks of human-equivalent throughput in 6.0 hours of Claude wall-clock. The 16.0x ceiling came from Accessibility audit remediation; all 71 findings (5 blocker/30 serious/24 moderate/12 minor) fixed across the client apps (web/iOS/Android/desktop) + design-system; 4 waves; per-cl...; the 8.0x floor sat at Amplified pair-density for 14 beta cohort: 60 validated contrastive pairs topping 17 starved goals to 10/goal, cleared P4.1 + manifest/stale side-effects; all 14 beta zero-findings.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Accessibility audit remediation; all 71 findings (5 blocker/30 serious/24 moderate/12 minor) fixed across the client apps (web/iOS/Android/desktop) + design-system; 4 waves; per-client build/test-gated commits</td>
      <td>80.0h</td>
      <td>300m</td>
      <td>8m</td>
      <td>16.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Promoted 13 alpha to beta (Tier A+B): reweighted 12, +621 recall questions for one certification domain + 17 pairs for another, all 27 beta pristine; estimates for two more content domains</td>
      <td>5.0h</td>
      <td>25m</td>
      <td>2m</td>
      <td>12.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>One content domain to pristine+beta: 3,359 questions from 0 (fixed write bug), reweighted, +1 pair, all 28 beta zero-findings, committed+pushed</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>8.2x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Amplified pair-density for 14 beta cohort: 60 validated contrastive pairs topping 17 starved goals to 10/goal, cleared P4.1 + manifest/stale side-effects; all 14 beta zero-findings</td>
      <td>2.0h</td>
      <td>15m</td>
      <td>1m</td>
      <td>8.0x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>4</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>90.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>362</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>12</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>810,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>14.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.2</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 16.0x ceiling came from Accessibility audit remediation; all 71 findings (5 blocker/30 serious/24 moderate/12 minor) fixed across the client apps (web/iOS/Android/desktop) + design-sys...; the 8.0x floor was Amplified pair-density for 14 beta cohort: 60 validated contrastive pairs topping 17 starved goals to 10/goal, cleared P4.1 + manifest/stale side-effects; all 1.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (450.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 4 tasks, the day produced roughly 2.2 weeks of senior-engineer-equivalent throughput in 6.0 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 30, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-30-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-30-leverage-record.html</id>
    <updated>2026-05-30T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-five tasks. May 30, 2026 weighted to 26.0x leverage across 701.8 human-equivalent hours in 1620 Claude-minutes. Supervisory leverage closed at 316.6x.</p>
<p class="mb-4 font-light font-serif">17.5 weeks of human-equivalent throughput in 27.0 hours of Claude wall-clock. The 80.0x ceiling came from Interactive-activity batch 2; 7 interactions x 3 client apps (math/chem/biology/language/history); the 3.3x floor sat at Build rum feature for the desktop client (telemetry/RUM beacon + web-analytics useTrack wiring).</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Interactive-activity batch 2; 7 interactions x 3 client apps (math/chem/biology/language/history)</td>
      <td>40.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>80.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Interactive-activity batch 3; 8 interactions x 3 client apps (econ/math/chem/biology/physics/history) + stall recovery</td>
      <td>48.0h</td>
      <td>55m</td>
      <td>4m</td>
      <td>52.4x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Interactive-activity V2 native host shells + 8 primitive interactions x 3 client apps</td>
      <td>120.0h</td>
      <td>140m</td>
      <td>4m</td>
      <td>51.4x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Interactive-activity batch 4; 7 interactions x 3 client apps (physics/econ/history/biology/CS) + stall recovery</td>
      <td>42.0h</td>
      <td>50m</td>
      <td>4m</td>
      <td>50.4x</td>
      <td>630.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Interactive-activity batch 5; 8 interactions x 3 client apps (econ curves + CS tools) + stall recovery</td>
      <td>46.0h</td>
      <td>58m</td>
      <td>4m</td>
      <td>47.6x</td>
      <td>690.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Interactive-activity batch 6; 8 interactions x 3 client apps (econ/math/language) + double-launch + stall recovery</td>
      <td>46.0h</td>
      <td>62m</td>
      <td>4m</td>
      <td>44.5x</td>
      <td>690.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Interactive-activity batch 8; 8 interactions x 3 client apps (earth-sci/history/art/language/math)</td>
      <td>46.0h</td>
      <td>62m</td>
      <td>4m</td>
      <td>44.5x</td>
      <td>690.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Interactive-activity batch 9 (FINAL pure-UI); 10 interactions x 3 client apps</td>
      <td>56.0h</td>
      <td>78m</td>
      <td>4m</td>
      <td>43.1x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Client parity Phase 1: iOS wrong-answer panel into MCQActivityView + Android 6 standalone activity types (case study, error detection, minimal pair, procedural, recall sprint, service match) via 8-agent recon + 6-agent build workflow: activity-credit endpoint+DTOs, AssetCatalogLoader over 12 JSON catalogs, 6 Phase cases+routes+tiles, 6 Compose screens+ViewModels, 62 scoring tests; full check -x koverVerify green; 3 repos pushed</td>
      <td>32.0h</td>
      <td>80m</td>
      <td>3m</td>
      <td>24.0x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Repaired all 125 content-package errors from a confirmation sweep (Sonnet-regen + local re-validation, 1 re-fix), verified, committed</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>20.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Regenerated 2 empty content nodes + LLM confirmation sweep over 2923 HIGH validation residuals (Haiku-&gt;Sonnet), confirming 282 real content errors across 101 packages; corrected post-mortem + committed</td>
      <td>5.0h</td>
      <td>15m</td>
      <td>1m</td>
      <td>20.0x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Android OfflineScaffold: NetworkMonitor+NetworkObserver+ConnectivityModule+OfflineScaffold+OfflineWriteQueue+Room v2+AppViewModel+AppHost+strings (13 files)</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Android client Phase-2 rum: telemetry client + telemetry beacon + TelemetryFlushWorker real POST</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Interactive-activity batch 7; 8 interactions x 3 client apps (chemistry/physics) + content-status fix + recovery</td>
      <td>48.0h</td>
      <td>145m</td>
      <td>4m</td>
      <td>19.9x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Interactive-activity rive_diagram native renderer; Android + desktop client (gradle + npm/WASM/CSP dep adds)</td>
      <td>12.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Root-caused + fixed NLI entailment-floor validation bug (66 pkgs stuck &lt;0.85 for weeks); built local in-place revalidation, rescored 288 packages to 0 below 0.85 (zero API spend), fixed NLI label swap, hardened audit (P26.13), post-mortem + 4-repo commit</td>
      <td>36.0h</td>
      <td>125m</td>
      <td>5m</td>
      <td>17.3x</td>
      <td>432.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Retired draft content-lifecycle status catalog-wide (631 specs + manifests + code/docs + UI via subagent); fixed residual live issues (checkpoints + atoms); ranked 12 beta candidates; committed+pushed 5 repos + created+pushed 3 private GitHub lib repos</td>
      <td>7.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>16.8x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Reswept 536 MCQs derived from 125 repaired content nodes: regenerated 535 from corrected content (Haiku), preserved IDs/tier, validated + spot-checked</td>
      <td>2.0h</td>
      <td>8m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Phase 1+2.1 content-catalog audit cleanup: re-stamped 9611 question tiers from source nodes + 277 quality_report node-counts (mtime-preserved) + 47 manifests (deterministic, backed up); reconstructed 224 empty knowledge-node contents from their surviving questions via Sonnet + reclassified 8 tiers; audit impact tier-mismatch 9611-&gt;0, corrupt tiers 72-&gt;0, empty nodes 224-&gt;2, qr-drift 203-&gt;0, manifest disagreements 92-&gt;0; findings 146-&gt;141 (magnitudes collapsed)</td>
      <td>6.0h</td>
      <td>25m</td>
      <td>2m</td>
      <td>14.4x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Interactive-activity host nav rewire (iOS+Android) with audio-parity audit + workflow-recovery</td>
      <td>16.0h</td>
      <td>70m</td>
      <td>3m</td>
      <td>13.7x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Autonomously promoted 14 content domains to beta with necessary synthesis (~6.6k tier-coverage questions, blueprint goal-weight reweight for 11 packages), verified all 14 HIGH-clean in content-readiness audit, committed+pushed</td>
      <td>9.0h</td>
      <td>40m</td>
      <td>3m</td>
      <td>13.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>electron-updater Phase-1: wire autoUpdater IPC end-to-end (main.ts, preload.ts, types.ts, ipc-client.ts, VersionChecker.tsx, test mock)</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>13.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>electron-updater spec: wire electron-updater IPC and VersionChecker UI</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>13.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Build a morning-briefing Phase-2 feature for the Android client (MorningBriefingOverlay + DashboardScreen wiring)</td>
      <td>6.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>12.9x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>iOS morning-briefing cinematic overlay; MorningBriefingView + ParticleLayer in DashboardView.swift</td>
      <td>3.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>12.9x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>bug-reporter cross-client spec investigation</td>
      <td>2.0h</td>
      <td>10m</td>
      <td>3m</td>
      <td>12.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Build ErrorDetectionScreen + ViewModel (Android Jetpack Compose)</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Build Android service_match activity: ServiceMatchScreen + ServiceMatchViewModel (Jetpack Compose)</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Desktop client orphan-screen wiring (Phase 1a+1b): refactored 6 orphan screens off react-router-dom via a 6-agent workflow + hand-wired the shared layer (SCREENS, Screen union, render blocks, SCREEN_LABELS, accept-invite deep-link token) in the 1900-line App.tsx state machine; typecheck/lint/build clean, 452 tests pass</td>
      <td>7.0h</td>
      <td>40m</td>
      <td>1m</td>
      <td>10.5x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Build Android ProceduralStepSequencingScreen + ViewModel (Jetpack Compose)</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>content data-repair (cheap/safe subset of Task 7 backfills): case-normalized 5 corrupt node tiers + 56 question tiers (40 case + 16 from valid node), backed up to data/.archive/tier-repair; investigated + itemized the unrecoverable residual (50 nodes/395 Qs across 21 pkgs with node-content-written-into-tier corruption needing re-synthesis) + 18 exam-tips-only orphan stubs; did NOT guess tiers or delete generated data per data-safety rules</td>
      <td>2.5h</td>
      <td>16m</td>
      <td>1m</td>
      <td>9.4x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>root-caused 224 empty-content nodes (10 content packages = 2026-05-17 recall-regen content-persistence gap; embeddings+questions survived, content never written; unrecoverable from .before-recall-regen backups) + hardened content-audit with 4 new content-integrity checks: P26.9 empty nodes (HIGH, now catches all 224), P26.10 near-empty, P26.11 degenerate questions (surfaced 121 single-option questions), P26.12 quality_report &gt;20% node drift (203 pkgs); audit clean 99s / 146 findings</td>
      <td>3.0h</td>
      <td>20m</td>
      <td>2m</td>
      <td>9.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Build CaseStudyAnalysisScreen + CaseStudyAnalysisViewModel for Android</td>
      <td>2.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>8.6x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>content-lifecycle status-model overhaul (#8); beta=staging-only-not-public across the inference engine (public<em>only list</em>domains filter + GET /api/v1/domains param), web+desktop public catalog filters (applyVerticalFilter + build-catalog.mjs artifact), audit two-axis (public=live / staging-audited=live+beta), canon docs table+enforcement; engine 4510 + apps tsc + audit 89s all green; committed on staging across 5 repos</td>
      <td>4.5h</td>
      <td>32m</td>
      <td>1m</td>
      <td>8.4x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Android client MinimalPairContrastScreen+ViewModel</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>3m</td>
      <td>8.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>tier reclassification (option a): Haiku-classified 42 corrupt knowledge-node tiers from content + propagated to 331 questions across 21 packages (~5 cents), backed up to data/.archive/tier-reclassify; fully resolved tier corruption across 4 certification domains (corrupt node tiers 50-&gt;8, questions 395-&gt;64); residual 8 empty-content degenerate nodes in 6 other packages</td>
      <td>1.5h</td>
      <td>11m</td>
      <td>1m</td>
      <td>8.2x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Build Android RecallSprintScreen + RecallSprintViewModel</td>
      <td>2.5h</td>
      <td>22m</td>
      <td>3m</td>
      <td>6.8x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>cognitive-state iOS feature: algorithm port + EngineClient.postCognitiveState + ActiveSessionView/AppState wiring</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>6.7x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Drove iOS CI green (verified Xcode build, fixed stale Phase test, portable+reliable run-tests.sh with sim pre-boot, authored ios-ci.yml on macos-15; remote GH Actions run passed build+unit+UI) + Electron all-gates green (fixed typecheck dead-code, aligned design-system to workspace 0.2.1 fixing AppShell, rebuilt better-sqlite3, Stripe+lucide test-isolation mocks; typecheck/lint/build clean, 452 tests pass)</td>
      <td>8.0h</td>
      <td>75m</td>
      <td>2m</td>
      <td>6.4x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Refactor CredentialMapping.tsx off react-router-dom onto the desktop client prop-router contract</td>
      <td>0.5h</td>
      <td>6m</td>
      <td>2m</td>
      <td>5.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>iOS Phase-1 parity: add loadError state + an inline alert warning banner to ResumeReviewSectionView</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>3m</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Refactor KnowledgeMapScreen to prop-router contract (onBack prop + back button both branches)</td>
      <td>0.2h</td>
      <td>4m</td>
      <td>2m</td>
      <td>3.8x</td>
      <td>7.5x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Refactor PageNotFound.tsx off react-router-dom onto prop-router contract</td>
      <td>0.2h</td>
      <td>4m</td>
      <td>2m</td>
      <td>3.8x</td>
      <td>7.5x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Refactor ReadinessForecast.tsx off react-router onto prop-router contract</td>
      <td>0.2h</td>
      <td>4m</td>
      <td>2m</td>
      <td>3.8x</td>
      <td>7.5x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Build rum feature for the desktop client (telemetry/RUM beacon + web-analytics useTrack wiring)</td>
      <td>1.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>3.3x</td>
      <td>20.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>45</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>701.8</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1620</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>133</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>8,985,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>316.6x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>17.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 80.0x ceiling came from Interactive-activity batch 2; 7 interactions x 3 client apps (math/chem/biology/language/history); the 3.3x floor was Build rum feature for the desktop client (telemetry/RUM beacon + web-analytics useTrack wiring). Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (316.6x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 45 tasks, the day produced roughly 17.5 weeks of senior-engineer-equivalent throughput in 27.0 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 29, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-29-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-29-leverage-record.html</id>
    <updated>2026-05-29T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. May 29, 2026 weighted to 32.2x leverage across 94.0 human-equivalent hours in 175 Claude-minutes. Supervisory leverage closed at 313.3x.</p>
<p class="mb-4 font-light font-serif">2.4 weeks of human-equivalent throughput in 2.9 hours of Claude wall-clock. The 80.0x ceiling came from A security-scanning service Phase 1; scanner foundation (Scanner ABC + Finding model + content-addressable dedup hash + lazy registry) plus all 7 scanner integrations (semgrep/band...; the 9.6x floor sat at Origin-service rebuild finish; retired subprocess paths (orchestrator in-process + JobStore-backed synthesis/tribunal APIs + deleted SynthesisManager/TribunalManager) + standalone....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>A security-scanning service Phase 1; scanner foundation (Scanner ABC + Finding model + content-addressable dedup hash + lazy registry) plus all 7 scanner integrations (semgrep/bandit/detect-secrets/pip-audit/safety/checkov/trivy) each with wrapper + normalizer + severity-CWE mapping + seeded-vuln fixture + golden + full test suite; built Semgrep inline as the template then fanned out the other 6 via a parallel workflow; fixed a scanner-normalizer import cycle via lazy discovery; full suite 174 passed / 2 skipped / 99% coverage; committed locally</td>
      <td>60.0h</td>
      <td>45m</td>
      <td>1m</td>
      <td>80.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Root-caused certification-content quality instability (42 cloud certification packages, 3 repair campaigns) + committed 301 engine re-stamps + regenerated 121 single-option questions for one certification domain</td>
      <td>6.0h</td>
      <td>10m</td>
      <td>3m</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Synthesis field-preservation remediation (task 1/7): raw exam_metadata passthrough + top-level fields across an origin service (runtime and service packages) so synthesis stops dropping spec fields (root cause of spec&lt;-&gt;manifest drift); 5 files/2 repos; 607 tests green</td>
      <td>4.5h</td>
      <td>13m</td>
      <td>2m</td>
      <td>20.8x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Remediation (contained): content_profile.lessons gating + IRT-based adaptive question selection (2PL Fisher info replacing random.choice; helper + 3 tests; 4508 engine tests green); committed on staging</td>
      <td>4.0h</td>
      <td>15m</td>
      <td>2m</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Rename an origin service across the monorepo: runtime and service packages + 2 repo dirs + CLI rename + path-deps/lockfiles across 8 repos; infra deferred; runtime 61 / service 546 / engine 4508 suites green; committed on staging</td>
      <td>9.0h</td>
      <td>35m</td>
      <td>6m</td>
      <td>15.4x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Origin-service rebuild; shared in-process pipeline<em>core (run</em>phase/run<em>pipeline) + made lessons/questions/tribunal stub runners real + write</em>question_bank + pipeline job kind + pipeline run CLI; 16 new tests; service suite 561 green; committed on staging</td>
      <td>7.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>12.0x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Origin-service rebuild finish; retired subprocess paths (orchestrator in-process + JobStore-backed synthesis/tribunal APIs + deleted SynthesisManager/TribunalManager) + standalone CLI mode (local flags); net -415 LOC; service suite 564 green; committed on staging</td>
      <td>3.5h</td>
      <td>22m</td>
      <td>1m</td>
      <td>9.6x</td>
      <td>210.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>94.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>175</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>18</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,398,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>32.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>313.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.4</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 80.0x ceiling came from A security-scanning service Phase 1; scanner foundation (Scanner ABC + Finding model + content-addressable dedup hash + lazy registry) plus all 7 scanner integr...; the 9.6x floor was Origin-service rebuild finish; retired subprocess paths (orchestrator in-process + JobStore-backed synthesis/tribunal APIs + deleted SynthesisManager/TribunalMa.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (313.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 2.4 weeks of senior-engineer-equivalent throughput in 2.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 28, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-28-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-28-leverage-record.html</id>
    <updated>2026-05-28T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Three tasks. May 28, 2026 weighted to 49.9x leverage across 104.0 human-equivalent hours in 125 Claude-minutes. Supervisory leverage closed at 416.0x.</p>
<p class="mb-4 font-light font-serif">2.6 weeks of human-equivalent throughput in 2.1 hours of Claude wall-clock. The 168.0x ceiling came from Built comprehensive content-domain curriculum: 4 domain specs (Math/RLA/Science/Social Studies) totaling 249 leaf goals plus README with 16 novel adult-learner activities.; the 16.0x floor sat at Resume Phase 0 of a security-scanning service; verify backend pytest plus frontend build plus git init/commit plus reserve ports; then a 48-agent adversarially-verified project rev....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Built comprehensive content-domain curriculum: 4 domain specs (Math/RLA/Science/Social Studies) totaling 249 leaf goals plus README with 16 novel adult-learner activities.</td>
      <td>70.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>168.0x</td>
      <td>1400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Resume session: re-stamped 584 spec/manifest exam_metadata fields across 142 packages plus restamp tool plus 3 recall backfills (+2555 questions) plus content-audit Phase 27 plus P25.7 plus audit rerun (144 findings) plus 2-agent synthesis/engine field-coverage investigation.</td>
      <td>22.0h</td>
      <td>55m</td>
      <td>8m</td>
      <td>24.0x</td>
      <td>165.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Resume Phase 0 of a security-scanning service; verify backend pytest plus frontend build plus git init/commit plus reserve ports; then a 48-agent adversarially-verified project review and fix of every confirmed broken-now/Phase-0 finding (TS2559 dead LoginPage; phantom defect-reporter dep; CSS @import order; vitest passWithNoTests; /me 401; AUTH_DISABLED default; pinned Trivy; ModalProvider; FOUC else-branch; branded favicons; container-registry docker token; backend tests to 98% coverage; docs); verified green and committed locally.</td>
      <td>12.0h</td>
      <td>45m</td>
      <td>4m</td>
      <td>16.0x</td>
      <td>180.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>104.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>125</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,180,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>49.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>416.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.6</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 168.0x ceiling came from Built comprehensive content-domain curriculum: 4 domain specs (Math/RLA/Science/Social Studies) totaling 249 leaf goals plus README with 16 novel adult-learner...; the 16.0x floor was Resume Phase 0 of a security-scanning service; verify backend pytest plus frontend build plus git init/commit plus reserve ports; then a 48-agent adversarially-.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (416.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 3 tasks, the day produced roughly 2.6 weeks of senior-engineer-equivalent throughput in 2.1 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 27, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-27-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-27-leverage-record.html</id>
    <updated>2026-05-27T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. May 27, 2026 weighted to 43.6x leverage across 146.0 human-equivalent hours in 201 Claude-minutes. Supervisory leverage closed at 213.7x.</p>
<p class="mb-4 font-light font-serif">3.6 weeks of human-equivalent throughput in 3.4 hours of Claude wall-clock. The 160.0x ceiling came from Phase 0 plus initial Phase 1 client parity catch-up; plan doc plus Android Profile/DomainSelect/Curriculum plus an interactive-activity interaction manifest across 4 repos.; the 7.2x floor sat at Freedom-to-operate patent search for a cognitive trace-inversion engine patent application..</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Phase 0 plus initial Phase 1 client parity catch-up; plan doc plus Android Profile/DomainSelect/Curriculum plus an interactive-activity interaction manifest across 4 repos.</td>
      <td>80.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>160.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Draft a patent application (trace-inversion engine): 20 claims plus 8 figures for a cognitive-operation trace-inversion engine plus cascading portfolio-doc updates.</td>
      <td>40.0h</td>
      <td>55m</td>
      <td>8m</td>
      <td>43.6x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Consolidate a patent cluster taxonomy from 36 to 12 commercially distinct clusters: rewrite README cluster table plus patent-family grouping intro/IP strategy plus canonical cluster list plus canonical numbers plus FAQ/architecture-tier/valuation header notes plus CHANGELOG entry plus regenerate 4 affected PDFs.</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>7m</td>
      <td>20.0x</td>
      <td>51.4x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cluster taxonomy cascade across the monorepo: rewrite cluster naming rationale for 12 clusters plus global search/replace for 24 dropped brand names across 6 repos (intellectual property documentation plus planning marketing plus architecture plus an adversarial evaluation harness plus 11 patent application pages plus a marketing-site press kit) plus config files plus manual fix of context-bleed mishaps in 5 files.</td>
      <td>8.0h</td>
      <td>28m</td>
      <td>8m</td>
      <td>17.1x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Update marketing-site templates for the 12-cluster taxonomy: rewrite the clusters template (8 tier groups / 12 clusters with current descriptions) plus the architecture template (13-tier descriptions with multi-tier-spanning cluster callouts) plus the index template (home-page chip block 35 to 12) plus the portfolio template (Tier 9 patent count update plus drop cluster-per-tier subtext) plus publishable-name example refresh.</td>
      <td>4.0h</td>
      <td>15m</td>
      <td>5m</td>
      <td>16.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Patent application follow-up: regenerate patent PDFs (application PDF plus figures PDF plus 9 public docs) plus update the patent traceability matrix plus commission and integrate an intellectual property freedom-to-operate search report (LOW risk verdict).</td>
      <td>5.0h</td>
      <td>30m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Freedom-to-operate patent search for a cognitive trace-inversion engine patent application.</td>
      <td>3.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>7.2x</td>
      <td>36.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>146.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>201</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>41</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,012,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>43.6x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>213.7x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>3.6</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 160.0x ceiling came from Phase 0 plus initial Phase 1 client parity catch-up; plan doc plus Android Profile/DomainSelect/Curriculum plus an interactive-activity interaction manifest acr...; the 7.2x floor was Freedom-to-operate patent search for a cognitive trace-inversion engine patent application.. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (213.7x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 3.6 weeks of senior-engineer-equivalent throughput in 3.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 26, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-26-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-26-leverage-record.html</id>
    <updated>2026-05-26T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">One task. May 26, 2026 weighted to 144.0x leverage across 60.0 human-equivalent hours in 25 Claude-minutes. Supervisory leverage closed at 720.0x.</p>
<p class="mb-4 font-light font-serif">1.5 weeks of human-equivalent throughput in 0.4 hours of Claude wall-clock. The 144.0x ceiling came from Author two world-class certification-domain specifications.; the 144.0x floor sat at Author two world-class certification-domain specifications..</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Author two world-class certification-domain specifications.</td>
      <td>60.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>144.0x</td>
      <td>720.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>60.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>175,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 144.0x ceiling came from Author two world-class certification-domain specifications.; the 144.0x floor was Author two world-class certification-domain specifications.. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (720.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 1 task, the day produced roughly 1.5 weeks of senior-engineer-equivalent throughput in 0.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 25, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-25-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-25-leverage-record.html</id>
    <updated>2026-05-25T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nine tasks. May 25, 2026 weighted to 25.3x leverage across 59.5 human-equivalent hours in 141 Claude-minutes. Supervisory leverage closed at 142.8x.</p>
<p class="mb-4 font-light font-serif">1.5 weeks of human-equivalent throughput in 2.4 hours of Claude wall-clock. The 33.6x ceiling came from Synthesis pipeline: prompt caching + Anthropic Batches API integration across synthesis scripts in core/an inference engine (1649 LOC, 5 files); the 12.0x floor sat at core/an inference engine: autopilot<em>service legacy coverage-damping ceiling lifted + bulk</em>amplify<em>fleet and bulk</em>backfill<em>recall custom</em>id format fix with error logging.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Synthesis pipeline: prompt caching + Anthropic Batches API integration across synthesis scripts in core/an inference engine (1649 LOC, 5 files)</td>
      <td>28.0h</td>
      <td>50m</td>
      <td>5m</td>
      <td>33.6x</td>
      <td>336.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Investigate and backfill missing a metrics tracker leverage records since May 22: surveyed git logs across 80+ an inference engine repos, identified 7 commit-clusters across May 23-25, diagnosed root cause (process discipline gap, not infra), reconstructed and POSTed 7 records to a metrics tracker-api</td>
      <td>4.0h</td>
      <td>8m</td>
      <td>4m</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Audit 29 ~/.claude/skills/ manifests for missing leverage-POST step on free-form task path; identify 16 tool-loader skills (a marketing platform, a calendar platform, a knowledge base, an email platform, a defect tracker, a portfolio browser, a metrics tracker, a newsletter platform, a time-tracking app, a CM...</td>
      <td>3.0h</td>
      <td>6m</td>
      <td>2m</td>
      <td>30.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Invert leverage tracking policy: CSV first then cloud second both mandatory; patched global CLAUDE.md Rules block, /fix skill Step 6k, 16 tool-loader Step 4 blocks, and /leverage-post Phase 2 reconciliation</td>
      <td>4.0h</td>
      <td>8m</td>
      <td>2m</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>/leverage-post reconciliation Phase 1+2: backfilled 139 CSV rows across 12 days (5/14-5/25), verified all in sync, 0 stragglers remaining</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>1m</td>
      <td>22.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>core/a simulation harness rebuild: brain answerer switched to direct Anthropic SDK with prompt caching (257 LOC), all zero/pmp sweep profiles flipped to omniscient:false (46 files), headless runner surfaces non-200 from /next-pair-mcq with context</td>
      <td>10.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>20.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cross-fleet prompt-caching micro-sweep: cache<em>control on a relationship CRM sonnet system block, an API gateway a recruiter product/llm</em>normalizer streaming call, automation-resume-refinement SYSTEM<em>PROMPT, an origin service atoms/generator system + tool</em>schema</td>
      <td>3.0h</td>
      <td>10m</td>
      <td>2m</td>
      <td>18.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>an audit toolchain: content-audit P4.1 pair-density check with PGWA-class detection (61 LOC), a configuration file headline counts bumped to 2026-05-25 audit snapshot, per-activity-format trackers added (scenarios, flashcards, etc.)</td>
      <td>4.0h</td>
      <td>15m</td>
      <td>3m</td>
      <td>16.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>core/an inference engine: autopilot<em>service legacy coverage-damping ceiling lifted + bulk</em>amplify<em>fleet and bulk</em>backfill<em>recall custom</em>id format fix with error logging</td>
      <td>2.0h</td>
      <td>10m</td>
      <td>2m</td>
      <td>12.0x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>59.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>141</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>928,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>25.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>142.8x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 33.6x ceiling came from Synthesis pipeline: prompt caching + Anthropic Batches API integration across synthesis scripts in core/an inference engine (1649 LOC, 5 files); the 12.0x floor was core/an inference engine: autopilot<em>service legacy coverage-damping ceiling lifted + bulk</em>amplify<em>fleet and bulk</em>backfill<em>recall custom</em>id format fix with error.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (142.8x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 9 tasks, the day produced roughly 1.5 weeks of senior-engineer-equivalent throughput in 2.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 24, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-24-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-24-leverage-record.html</id>
    <updated>2026-05-24T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">One task. May 24, 2026 weighted to 14.4x leverage across 6.0 human-equivalent hours in 25 Claude-minutes. Supervisory leverage closed at 120.0x.</p>
<p class="mb-4 font-light font-serif">0.1 weeks of human-equivalent throughput in 0.4 hours of Claude wall-clock. The 14.4x ceiling came from Anthropic cache-token surfacing in an LLM client library call<em>log (cache</em>create/cache<em>read tokens) + an origin service spend-tracking fix flushing call</em>log from math runners and tr...; the 14.4x floor sat at Anthropic cache-token surfacing in an LLM client library call<em>log (cache</em>create/cache<em>read tokens) + an origin service spend-tracking fix flushing call</em>log from math runners and tr....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Anthropic cache-token surfacing in an LLM client library call<em>log (cache</em>create/cache<em>read tokens) + an origin service spend-tracking fix flushing call</em>log from math runners and tribunal</td>
      <td>6.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>14.4x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>6.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>80,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>14.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 14.4x ceiling came from Anthropic cache-token surfacing in an LLM client library call<em>log (cache</em>create/cache<em>read tokens) + an origin service spend-tracking fix flushing call</em>log from...; the 14.4x floor was Anthropic cache-token surfacing in an LLM client library call<em>log (cache</em>create/cache<em>read tokens) + an origin service spend-tracking fix flushing call</em>log from.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (120.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 1 task, the day produced roughly 0.1 weeks of senior-engineer-equivalent throughput in 0.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 23, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-23-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-23-leverage-record.html</id>
    <updated>2026-05-23T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">One task. May 23, 2026 weighted to 33.6x leverage across 28.0 human-equivalent hours in 50 Claude-minutes. Supervisory leverage closed at 336.0x.</p>
<p class="mb-4 font-light font-serif">0.7 weeks of human-equivalent throughput in 0.8 hours of Claude wall-clock. The 33.6x ceiling came from Math content shapes for an origin service synthesis: three new content shapes (symbolic problems, modeling problems) + math tribunal verdict schema. libs/an origin runtime library...; the 33.6x floor sat at Math content shapes for an origin service synthesis: three new content shapes (symbolic problems, modeling problems) + math tribunal verdict schema. libs/an origin runtime library....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Math content shapes for an origin service synthesis: three new content shapes (symbolic problems, modeling problems) + math tribunal verdict schema. libs/an origin runtime library + services/an origin service, 1653 LOC across 16 files</td>
      <td>28.0h</td>
      <td>50m</td>
      <td>5m</td>
      <td>33.6x</td>
      <td>336.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>28.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>50</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>350,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>33.6x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>336.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>0.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 33.6x ceiling came from Math content shapes for an origin service synthesis: three new content shapes (symbolic problems, modeling problems) + math tribunal verdict schema. libs/an ori...; the 33.6x floor was Math content shapes for an origin service synthesis: three new content shapes (symbolic problems, modeling problems) + math tribunal verdict schema. libs/an ori.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (336.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 1 task, the day produced roughly 0.7 weeks of senior-engineer-equivalent throughput in 0.8 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 22, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-22-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-22-leverage-record.html</id>
    <updated>2026-05-22T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">22 tasks. May 22, 2026 weighted to 27.3x leverage across 425.2 human-equivalent hours in 935 Claude-minutes. Supervisory leverage closed at 447.6x.</p>
<p class="mb-4 font-light font-serif">10.6 weeks of human-equivalent throughput in 15.6 hours of Claude wall-clock. The 161.5x ceiling came from Full an inference engine accessibility audit (50 repos, deterministic Phase 0 + 4 parallel LLM agents, ~288 findings) followed by full compliance audit (12 sections, 4 parallel age...; the 2.5x floor sat at a marketing site PMP card+banner: set available_at, update category/course-page templates to render Available May 25th.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full an inference engine accessibility audit (50 repos, deterministic Phase 0 + 4 parallel LLM agents, ~288 findings) followed by full compliance audit (12 sections, 4 parallel agents, 1 CRITICAL + 5 HIGH gaps, consolidated SOC 2/GDPR/CCPA report)</td>
      <td>70.0h</td>
      <td>26m</td>
      <td>2m</td>
      <td>161.5x</td>
      <td>2100.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Accessibility zero-disruption HIGH sweep: 4 parallel agents fixed ~135 HIGH findings across 30+ repos — Phase 0 went from 60 to 0 verified by deterministic checker; 488 scope=col + 15 aria-modal added across 21 tools; canvas/SVG/input aria-label additions; outline:none replacements; aria-grabbed deprecated to...</td>
      <td>80.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>137.1x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full an inference engine readiness audit: Phase 0 canonical + 4 parallel agents across 60 repos (core+services, clients+libs, 21 tools, docs+sites+infra), consolidated report at audit-report-2026-05-22.md with 10 HIGH + 13 MEDIUM (4 self-fixed in-flight) + 10 LOW; 9,157+ tests verified green</td>
      <td>40.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>96.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Readiness audit rerun: 4 parallel agents verified today HIGH fixes landed clean (admin, electron, infra) + audited 42 previously-uncovered repos; consolidated to audit-report-2026-05-22-rerun.md with 2 new systemic findings (6/8 automation Lambdas + 9/10 study product sub-sites are local-only with no GitHub r...</td>
      <td>12.0h</td>
      <td>14m</td>
      <td>1m</td>
      <td>51.4x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Readiness rerun3 + security audit (5 parallel agents): verified today HIGH fixes clean, agents auto-fixed 9 test failures + 1 real h1-&gt;h3 heading-skip a11y bug, surfaced 1 CRITICAL (ElevenLabs key) + 3 HIGH (RDS 3306 open — user fixed; engine pipeline fail; IAM wildcards), 6 inline fixes shipped across an API...</td>
      <td>35.0h</td>
      <td>50m</td>
      <td>3m</td>
      <td>42.0x</td>
      <td>700.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>4 parallel readiness remediation agents: pushed 6 automation Lambdas + an origin service to GitHub, cleaned an infrastructure repo (6 commits — CLAUDE.md, lock files, plan.bin removal, 5 new marketing stacks, tfvars examples), registered an origin service port 8005 + real CodeBuild buildspec, fixed a web clie...</td>
      <td>14.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>38.2x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Playwright a payment processor-free subscription lifecycle e2e: incomplete→invoice.paid→active w/ entitlement granted, cancel-at-period-end + reactivate, immediate cancel revokes entitlement, service-token gate. Uses test-ops /subscriptions + /webhooks/a payment processor/simulate; full live suite now 10/10 g...</td>
      <td>10.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>33.3x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Security audit HIGH fix: revoked 0.0.0.0/0 + ::/0 tcp/3306 ingress on prod-ascloud-rds-sg (sg-07e500306cd69710e) — Aurora MySQL no longer reachable from public internet; verified internal app/admin paths still intact via VPC CIDR 10.10.0.0/16 + admin IP 66.182.197.254/32 + self-reference</td>
      <td>1.0h</td>
      <td>2m</td>
      <td>1m</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Playwright live-stack e2e suite for AuthModal + enrollment: register-verify-signin, signin happy path, forgot-reset-signin, dup-email error, enrollment + DB-verify, unverified-blocked. Captures emails via a notification service log API, verifies DB user records via an API gateway test-ops, uses Gmail+UUID ali...</td>
      <td>16.0h</td>
      <td>34m</td>
      <td>2m</td>
      <td>28.2x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Phase 5 origin-extraction wiring: discover stub-runner gap, build runtime-to-service DomainSpecification adapter, real synthesis runner + three math content runners (worked<em>examples, misconceptions, representation</em>packs), env-gated registration to keep tests green, start an origin service with an inference en...</td>
      <td>16.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>27.4x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Consolidate auth+purchase under an API gateway gateway and build in-modal auth UI (sign in, register, forgot/reset, MFA TOTP, verify email, Apple/Google social) replacing the hosted OIDC SPA; strip 12 legacy env vars and 14 per-service gateway argument call sites</td>
      <td>18.0h</td>
      <td>42m</td>
      <td>5m</td>
      <td>25.7x</td>
      <td>216.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>domain-difficulty-factor engine work: 4 decoy fixes (headless default, composite circuit-breaker, max<em>days terminal event, catalog status from spec) + foundation-phase + alpha-saturation tuning landed in autopilot</em>ranker/orchestrator/autopilot_service; PMP+CAPM spec/manifest patches; boot cache rebuild ×2; en...</td>
      <td>32.0h</td>
      <td>90m</td>
      <td>6m</td>
      <td>21.3x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>GAP-06 fix: per-email rate limit on /forgot-password (Redis ZSET sliding window) and per-IP rate limit on /reset-password in an authentication service, with regression tests; 459 tests pass</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>20.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>post-PMP-fleet morning session: AZ-500 root-cause (snapshot serializer dropped goal<em>weights/goal</em>similarity for entire v3 schema lifetime; engine fell into legacy 0.85 clamp); fixed serialize+deserialize+tensor-dispatch + bumped schema to v4; 6 new round-trip unit tests; audit guardrails for difficulty-on-spe...</td>
      <td>24.0h</td>
      <td>90m</td>
      <td>8m</td>
      <td>16.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>decoy daily proficiency snapshots — DailySnapshot model, alembic migration, dialect-agnostic upsert in worker<em>pool, EOD autopilot fetch + day</em>completed payload expansion in headless<em>runner, GET /students/{id}/proficiency</em>series endpoint, 9 new tests across worker<em>pool/student</em>manager/api</td>
      <td>8.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>16.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Release-test a web client stack: fixed purchase-route DB binding (9 files hitting wrong DB) + rewrote purchase JWT verifier to use local public key (self-JWKS deadlock under single-worker uvicorn); verified end-to-end register/login/entitlements/subscriptions/plans</td>
      <td>3.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>12.9x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Cloud-wide regression sweep: 44 students across AWS/Azure/GCP/PMP (3-batch parallel via decoy CLI). 43/44 passed; mean predicted 89.8%, mean actual 99.7%, mean gap +9.9pt. PGWA flagged with same empty-goal_weights bug as AZ-500.</td>
      <td>18.0h</td>
      <td>90m</td>
      <td>4m</td>
      <td>12.0x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Compliance L1 (admin-service role check), L2 (audit-log profile updates), M16 (Dependabot for an inference engine + a notification service); 888 tests pass across an authentication service + admin-service; readiness audit dispatched (4 parallel agents); accessibility remediation plan (7 waves, 14-17 eng-days)</td>
      <td>6.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>10.3x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Readiness blockers H5 (self-assign bug), H6 (eslint-plugin-react-hooks load + Sparkline conditional useEffect fix), H9 (commit infra VPC doc comments); ESLint 13 errors -&gt; 0 errors across an admin client + a desktop client, 3 commits pushed</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>10.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Autonomous blueprint-anchor diagnosis + content-aware re-anchor script (139 domains fixed); full 47-profile confirmation sweep (43/44 passed); PGWA deep-dive identified borderline 74.7% reserved-pool accuracy with weak-goal-biased practice exam as root cause beyond blueprint fix.</td>
      <td>12.0h</td>
      <td>180m</td>
      <td>3m</td>
      <td>4.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>a marketing site: PMP nav entry with Coming Monday badge, catalog search box with JSON index + JS filter, PMI June dates, refactor templates, build+deploy staging+prod</td>
      <td>2.5h</td>
      <td>55m</td>
      <td>4m</td>
      <td>2.7x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>a marketing site PMP card+banner: set available_at, update category/course-page templates to render Available May 25th</td>
      <td>0.8h</td>
      <td>18m</td>
      <td>3m</td>
      <td>2.5x</td>
      <td>15.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>425.2</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>935</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>57</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>8,145,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>27.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>447.6x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>10.6</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 161.5x ceiling came from Full an inference engine accessibility audit (50 repos, deterministic Phase 0 + 4 parallel LLM agents, ~288 findings) followed by full compliance audit (12 sect...; the 2.5x floor was a marketing site PMP card+banner: set available_at, update category/course-page templates to render Available May 25th. Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (447.6x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 22 tasks, the day produced roughly 10.6 weeks of senior-engineer-equivalent throughput in 15.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 21, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-21-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-21-leverage-record.html</id>
    <updated>2026-05-21T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Three tasks. May 21, 2026 weighted to 36.3x leverage across 69.0 human-equivalent hours in 114 Claude-minutes. Supervisory leverage closed at 318.5x.</p>
<p class="mb-4 font-light font-serif">1.7 weeks of human-equivalent throughput in 1.9 hours of Claude wall-clock. The 55.4x ceiling came from Math Content Rollout Phases 0-4: v2 pipeline verification, AP Precalc spec fixes (61-&gt;69 leaves, CED practices, broken topics<em>and</em>objectives), math content schemas (worked<em>example/...; the 8.6x floor sat at an API gateway native-mode wiring (bcrypt pin, settings hardening, certs-&gt;certifications fix, native entitlement path, commit-on-exit deps, event</em>type kwarg drift, secure-cookie to....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Math Content Rollout Phases 0-4: v2 pipeline verification, AP Precalc spec fixes (61-&gt;69 leaves, CED practices, broken topics<em>and</em>objectives), math content schemas (worked<em>example/misconception/representation</em>pack pydantic + 3 LLM generators), 2 hand-curated static files (52 formulas + 17 function families),...</td>
      <td>60.0h</td>
      <td>65m</td>
      <td>6m</td>
      <td>55.4x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>AP Precalc spec audit + math content rollout plan (spec issue identification, activity catalog inventory, 8-phase plan covering spec fixes, math-specific content shapes, 5 new Tier A activities, v2 atom synthesis, full math family rollout)</td>
      <td>4.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>17.1x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>an API gateway native-mode wiring (bcrypt pin, settings hardening, certs-&gt;certifications fix, native entitlement path, commit-on-exit deps, event<em>type kwarg drift, secure-cookie toggle) + seed</em>test<em>user.py + PlaywrightDriver.prime</em>auth<em>session + JourneyOrchestrator.</em>seed<em>authenticated</em>session</td>
      <td>5.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>8.6x</td>
      <td>75.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>69.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>114</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>360,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>36.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>318.5x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>1.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 55.4x ceiling came from Math Content Rollout Phases 0-4: v2 pipeline verification, AP Precalc spec fixes (61-&gt;69 leaves, CED practices, broken topics<em>and</em>objectives), math content sche...; the 8.6x floor was an API gateway native-mode wiring (bcrypt pin, settings hardening, certs-&gt;certifications fix, native entitlement path, commit-on-exit deps, event_type kwarg dri.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (318.5x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 3 tasks, the day produced roughly 1.7 weeks of senior-engineer-equivalent throughput in 1.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 20, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-20-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-20-leverage-record.html</id>
    <updated>2026-05-20T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">11 tasks. May 20, 2026 weighted to 54.5x leverage across 550.0 human-equivalent hours in 605 Claude-minutes. Supervisory leverage closed at 1269.2x.</p>
<p class="mb-4 font-light font-serif">13.8 weeks of human-equivalent throughput in 10.1 hours of Claude wall-clock. The 202.1x ceiling came from a knowledge graph Phases 4-31 complete — REST route table + 20 Act-II inventions (heartbeat, lens, focus, predictor, capture, topography, resonance, prefetch, flame, oscilloscope,...; the 14.4x floor sat at Full an inference engine content audit + generate v2 lesson atoms for AWS Solutions Architect Pro (893/894 atoms, diagnosed and fixed max_tokens truncation bug).</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>a knowledge graph Phases 4-31 complete — REST route table + 20 Act-II inventions (heartbeat, lens, focus, predictor, capture, topography, resonance, prefetch, flame, oscilloscope, commitment, sentinel, topology, SLO tattoo, genome, spatial briefing, a CMS publisher, audience mirror, war room, ticker) + Act-II...</td>
      <td>320.0h</td>
      <td>95m</td>
      <td>1m</td>
      <td>202.1x</td>
      <td>19200.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Fleet round 4: a newsletter platform multi-tenant newsletter ownership + migration, an accounting tool cash flow investing/financing wiring + invoice tax<em>code per-line calculation, a relationship CRM network</em>graph_task end-to-end persistence + health endpoint fix, an analytics platform scheduled report dispat...</td>
      <td>42.0h</td>
      <td>75m</td>
      <td>2m</td>
      <td>33.6x</td>
      <td>1260.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Fleet round 5: a knowledge base wiki-link resolution to real pages in same space, an infrastructure tool tag-keys-canonical custom in-process evaluator registry, a marketing platform lead scoring service writing to Contact.lead_score</td>
      <td>30.0h</td>
      <td>55m</td>
      <td>2m</td>
      <td>32.7x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Fleet round 7: a CMS FR-013 content export ZIP endpoint, full doc-vs-implementation alignment audit across 21 backend tools (an observability platform/a defect tracker/an AI tool/an email platform/a portfolio browser/a gateway/a metrics tracker/a CMS/a calendar platform/a relationship CRM/a monitoring tool/a...</td>
      <td>20.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>30.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fleet round 3: an observability platform SLO budget action dispatch, a calendar platform in-process scheduler, a defect tracker activity WS broadcast, a marketing platform campaign step PATCH + EmailEditor save wiring, an audio tool @mention email dispatch</td>
      <td>40.0h</td>
      <td>80m</td>
      <td>2m</td>
      <td>30.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Fleet round 6: a task tracker FR-SHARE-020 notification service worker, an audio tool FR §3.12 built-in slash commands (/me /shrug /status /away /dnd /topic /archive /leave /remind)</td>
      <td>16.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>27.4x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Fleet round 5c: an infrastructure tool governance.enforcement<em>policies + .enforcement</em>violations ops + frontend rewire, an infrastructure tool expires-on-not-passed + expires-on-required-in-dev custom evaluators, an infrastructure tool IpSpacePage and AdvisorPage stale TODOs cleared</td>
      <td>18.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>27.0x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Fleet feature implementation round 2: a marketing platform landing<em>page prompt builder, a calendar platform event attachments end-to-end, an observability platform alert.firing -&gt; a notification service dispatch with publish</em>after_commit, a defect tracker @mention notifications</td>
      <td>28.0h</td>
      <td>65m</td>
      <td>2m</td>
      <td>25.9x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Fleet round 5b: a CMS frontmatter TODO cleared, a marketing platform site list/settings frontend error display, an infrastructure tool StackDetailPage costs.by_stack wiring</td>
      <td>12.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>20.6x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Phase 1 recommender starvation fix (lesson-first + goal-scoped saturation + weak<em>goal</em>ids surfacing) + SAP-C02 baseline scenario family (vacation, recert, convoy) + lessons-learned doc + validation sweep runner. 5 new commits (2 engine, 3 decoy). 9 new regression tests; full 5999-test suite green.</td>
      <td>18.0h</td>
      <td>60m</td>
      <td>4m</td>
      <td>18.0x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Full an inference engine content audit + generate v2 lesson atoms for AWS Solutions Architect Pro (893/894 atoms, diagnosed and fixed max_tokens truncation bug)</td>
      <td>6.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>14.4x</td>
      <td>72.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>550.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>605</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>26</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,700,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>54.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>1269.2x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>13.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 202.1x ceiling came from a knowledge graph Phases 4-31 complete — REST route table + 20 Act-II inventions (heartbeat, lens, focus, predictor, capture, topography, resonance, prefetch, f...; the 14.4x floor was Full an inference engine content audit + generate v2 lesson atoms for AWS Solutions Architect Pro (893/894 atoms, diagnosed and fixed max_tokens truncation bug). Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (1269.2x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 11 tasks, the day produced roughly 13.8 weeks of senior-engineer-equivalent throughput in 10.1 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 19, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-19-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-19-leverage-record.html</id>
    <updated>2026-05-19T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. May 19, 2026 weighted to 47.1x leverage across 182.0 human-equivalent hours in 232 Claude-minutes. Supervisory leverage closed at 574.7x.</p>
<p class="mb-4 font-light font-serif">4.5 weeks of human-equivalent throughput in 3.9 hours of Claude wall-clock. The 166.2x ceiling came from a knowledge graph Act I Phase 0 — Python orchestrator daemon (IPC, Opus agent, MCP bus, briefing, diagnostics, test) + Swift Command Bar app (NSPanel, Carbon hotkey, NWConnection I...; the 4.8x floor sat at Resume autopilot cascade: diagnose+fix start_student commit-order bug, fix runs.json parallel-sweep race, fix 5 pre-existing tests, run Azure+AWS+GCP+retry sweeps; final 35/39 clou....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>a knowledge graph Act I Phase 0 — Python orchestrator daemon (IPC, Opus agent, MCP bus, briefing, diagnostics, test) + Swift Command Bar app (NSPanel, Carbon hotkey, NWConnection IPC client, view-model, design tokens) + build scripts + Launch Agent plist; swift build green, pytest green</td>
      <td>36.0h</td>
      <td>13m</td>
      <td>1m</td>
      <td>166.2x</td>
      <td>2160.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>a knowledge graph design rewrite — Metal+Rive visual stack (§21), Fleet Integration Matrix (§22), 32-phase plan (foundation + one feature per phase), 20 invented features mapped to phases and persisted to innovation log</td>
      <td>30.0h</td>
      <td>14m</td>
      <td>2m</td>
      <td>128.6x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>a knowledge graph Act I Phase 2 — 21-peer fleet registry + httpx-probing MCP bus + Haiku/rule-based classifier + PermissionGuard with TTL + fast/slow/confirm router + 8 slash commands + IPC fleet.<em> + confirm.</em> + Mac settings window with fleet panel + inline confirmation card + route breadcrumb + ⌘⇧, hotkey; s...</td>
      <td>36.0h</td>
      <td>17m</td>
      <td>1m</td>
      <td>127.1x</td>
      <td>2160.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>a knowledge graph Act I Phase 3 — Visual Stack Foundation: AtlasRenderEnvironment singleton (Metal device + queue + library + DisplayLink + Rive factory + energy monitor + FramePacer), MetalLayerView NSViewRepresentable, AtlasRenderer protocol, 7 .metal shader sources + compute kernels, 7 Swift pass wrappers...</td>
      <td>32.0h</td>
      <td>16m</td>
      <td>1m</td>
      <td>120.0x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>a knowledge graph Act I Phase 1 — Ledger &amp; Self-Instrumentation: SQLite state<em>db (0600 mode, WAL, command</em>history/cost<em>records/settings), OTel ledger emitter with OTLP to an observability platform, CostAccountant with daily cap + Opus-&gt;Haiku hard-cap fallback, agent instrumentation, IPC ledger.list</em>today + co...</td>
      <td>24.0h</td>
      <td>14m</td>
      <td>1m</td>
      <td>102.9x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>an analytics platform audit + Statcounter feature gap analysis + remediation plan (6 phases)</td>
      <td>12.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>90.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Resume autopilot cascade: diagnose+fix start_student commit-order bug, fix runs.json parallel-sweep race, fix 5 pre-existing tests, run Azure+AWS+GCP+retry sweeps; final 35/39 cloud certs passed (AWS 13/13, GCP 9/11, Azure 13/15) up from 16/38 baseline</td>
      <td>12.0h</td>
      <td>150m</td>
      <td>10m</td>
      <td>4.8x</td>
      <td>72.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>182.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>232</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,433,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>47.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>574.7x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>4.5</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 166.2x ceiling came from a knowledge graph Act I Phase 0 — Python orchestrator daemon (IPC, Opus agent, MCP bus, briefing, diagnostics, test) + Swift Command Bar app (NSPanel, Carbon ho...; the 4.8x floor was Resume autopilot cascade: diagnose+fix start_student commit-order bug, fix runs.json parallel-sweep race, fix 5 pre-existing tests, run Azure+AWS+GCP+retry swee.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (574.7x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 7 tasks, the day produced roughly 4.5 weeks of senior-engineer-equivalent throughput in 3.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 18, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-18-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-18-leverage-record.html</id>
    <updated>2026-05-18T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Five tasks. May 18, 2026 weighted to 30.4x leverage across 190.0 human-equivalent hours in 375 Claude-minutes. Supervisory leverage closed at 518.2x.</p>
<p class="mb-4 font-light font-serif">4.8 weeks of human-equivalent throughput in 6.2 hours of Claude wall-clock. The 120.0x ceiling came from Review an admin client and author full Stitch prompt for Westworld Delos-themed WebGL/Rive redesign covering all 24 pages, design tokens, component vocabulary, motion language, aud...; the 13.6x floor sat at Docstring audit Phase 7 (Protocol contract enforcement): new audit script (scripts/audit<em>protocol</em>contracts.py, 857 LoC) with AST-based one-hop expansion through same-class helpers....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Review an admin client and author full Stitch prompt for Westworld Delos-themed WebGL/Rive redesign covering all 24 pages, design tokens, component vocabulary, motion language, audio design, and fidelity grading rubric</td>
      <td>24.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Aperture V2 viewer Phases 1-3: Three.js stage layer (paper-grain + page-turn shaders, mastery candle, postprocessing), Rive Living Diagrams integration (validator update in engine), layer-registry slot system, Settings UI toggle, 19 vitest cases, Storybook themes/density stories</td>
      <td>45.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>77.1x</td>
      <td>2700.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Resume + commit cleanup across engine/audits/domains, then scaffold Phase 0 Aperture V2 lesson viewer (4-layer V1↔V2 toggle, theme + motion + density registries, ApertureShell, AdaptiveDensityLayer idea #9, ViewerErrorBoundary, an analytics platform telemetry; ~950 LOC; vite build clean)</td>
      <td>16.0h</td>
      <td>28m</td>
      <td>6m</td>
      <td>34.3x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>an inference engine autopilot Fix A: coverage damping + hard ceiling on readiness. SOA-C02 baseline 36/73 KG goals at exam<em>passed→ 73/73 covered + passed; 36/38 cloud certs hit full per-goal coverage across AWS/GCP/Azure cascade. </em>compute<em>domain</em>readiness (<em>helpers.py:712+) and compute</em>next_actions (autopilot...</td>
      <td>100.0h</td>
      <td>278m</td>
      <td>10m</td>
      <td>21.6x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Docstring audit Phase 7 (Protocol contract enforcement): new audit script (scripts/audit<em>protocol</em>contracts.py, 857 LoC) with AST-based one-hop expansion through same-class helpers AND field-attribute delegates; audited 12 raise contracts across 7 Protocol abc.py files against 7 canonical implementer classes;...</td>
      <td>5.0h</td>
      <td>22m</td>
      <td>2m</td>
      <td>13.6x</td>
      <td>150.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>190.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>375</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,416,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>30.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>518.2x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>4.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 120.0x ceiling came from Review an admin client and author full Stitch prompt for Westworld Delos-themed WebGL/Rive redesign covering all 24 pages, design tokens, component vocabulary,...; the 13.6x floor was Docstring audit Phase 7 (Protocol contract enforcement): new audit script (scripts/audit<em>protocol</em>contracts.py, 857 LoC) with AST-based one-hop expansion throug.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (518.2x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 5 tasks, the day produced roughly 4.8 weeks of senior-engineer-equivalent throughput in 6.2 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 17, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-17-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-17-leverage-record.html</id>
    <updated>2026-05-17T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">17 tasks. May 17, 2026 weighted to 10.8x leverage across 309.0 human-equivalent hours in 1723 Claude-minutes. Supervisory leverage closed at 228.9x.</p>
<p class="mb-4 font-light font-serif">7.7 weeks of human-equivalent throughput in 28.7 hours of Claude wall-clock. The 96.0x ceiling came from Origin-extract Phase 3 — populate services/an origin service with synthesis code, merged backend, /jobs API + structlog observability, aoctl CLI, and relocated test surface (522 pa...; the 1.0x floor sat at Decoy zero-sweep on reclassified cloud cert packages: engine restart, fixed autopilot_service NameError (missing import os), ran sweep, 2 real terminals (AZ-120 crossed 0.5 readine....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Origin-extract Phase 3 — populate services/an origin service with synthesis code, merged backend, /jobs API + structlog observability, aoctl CLI, and relocated test surface (522 passing service-wide, was 7). 10 commits.</td>
      <td>80.0h</td>
      <td>50m</td>
      <td>5m</td>
      <td>96.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Audit other Claude&#39;s outstanding-work report against an inference engine engine codebase; corrected stale claims and re-estimated effort</td>
      <td>8.0h</td>
      <td>11m</td>
      <td>6m</td>
      <td>43.6x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Cloud deployment plan for an origin service: distilled Phases 5-7 (SQS+Fargate+Bedrock wiring, frontend refactor, deploy+cutover) + Phase 8 hygiene into a single 194-line plan doc with Mermaid flow diagram, decision matrix, open questions</td>
      <td>3.0h</td>
      <td>5m</td>
      <td>1m</td>
      <td>36.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Persistence audit follow-through: all 4 fixes shipped. (1) DeltaReplicationPublisher fail-loud in cloud profile. (2) HIGH-severity in-flight exam persistence — Alembic 007<em>active</em>exams + ActiveExamRow + ActiveExamRepository + write-through on create<em>exam + cache-miss fallback on submit</em>exam + boot-time hydrat...</td>
      <td>24.0h</td>
      <td>55m</td>
      <td>1m</td>
      <td>26.2x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Refresh patent valuations and content counts across 25 a planning repo docs (business, marketing, research, README, CHANGELOG); rebuild patent-portfolio valuation framework ($60-230M floor); scrub Android-via-PWA and late-July language from funding plans and JDs to reflect native iOS+Android both launching Ju...</td>
      <td>14.0h</td>
      <td>40m</td>
      <td>4m</td>
      <td>21.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Origin-extract Phase 4: delete src/an inference engine/origin + dying preflight subdirs + origin_router + 100+ scripts; slim OriginConfig; collapse regression guard; ratchet coverage 81→82; recover 7 over-deleted test files; finalize docs across CLAUDE.md, CHANGELOG.md, plan doc — 4 commits, ~73k LOC deletion...</td>
      <td>16.0h</td>
      <td>47m</td>
      <td>1m</td>
      <td>20.4x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Docstring audit Phase 3 (DOC<em>OVERSELLS rewrite): F1 fix in admin</em>events.py (module + <em>live</em>session<em>payload docstrings) for asymmetric user fallback (user</em>name-&gt;entity<em>id; user</em>email-&gt;&quot;&quot;); audit re-run verified doc-likely 1-&gt;0; PHASE<em>START + DOC</em>REWRITE + PHASE_END log entries; resolution arc CLOSED</td>
      <td>3.0h</td>
      <td>10m</td>
      <td>1m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Deterministic docstring-vs-code audit for engine: AST-driven scripts/audit<em>docstrings.py with 12 categories (structural + intent-vs-impl), per-finding likely</em>truth heuristic (fix doc</td>
      <td>fix code</td>
      <td>review). 65 findings across 292 files / 3012 symbols. Surfaced reload<em>domains dedupe-vs-raise pattern + 5 </em>durable...</td>
      <td>12.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>18.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Docstring audit Phase 2 (FP bookkeeping): added EXCLUDED<em>FINDINGS set + AuditReport.add</em>finding() to scripts/audit<em>docstrings.py with 28 exact-tuple exclusions (file, line, symbol, category) retiring the 29 FALSE</em>POSITIVE dispositions from Phase 1. F26+F27 collapse to one tuple. Doc-likely count drops 30-&gt;1 (...</td>
      <td>3.0h</td>
      <td>10m</td>
      <td>1m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>CI hardening (fixed silently-dead nightly leak gate in engine nightly.yml — wrong import path; dropped continue-on-error from memray steps; mirrored nightly to an origin service with 500MB import baseline) + full persistence audit across engine+service. Found 4 issues, 1 HIGH (in-flight exams not persisted; e...</td>
      <td>6.0h</td>
      <td>20m</td>
      <td>1m</td>
      <td>18.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Origin-extract Phases 6+8: an origin client frontend retargeted at an origin service via VITE<em>ORIGIN</em>API<em>URL/VITE</em>ORIGIN<em>WS</em>URL; swapped local 300-LOC bug-reporter for @an inference engine/bug-reporter on new a defect tracker Origin board; updated CLAUDE.md/README/CHANGELOG. Phase 8: contract-changes.md entry...</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>13.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>an inference engine: fix domain reload manifold dupe (if_exists policy) + 8 unit tests + endpoint regression test; live-validated by reloading 38 AWS/GCP/Azure cert packages into running engine</td>
      <td>5.0h</td>
      <td>25m</td>
      <td>6m</td>
      <td>12.0x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Round content metrics to nnn,nnn+ notation, fix per-domain cost from $0.17 to ~$20 end-to-end (Mercury 2 + question bank + adversarial + tribunal + lessons + scenarios + labs), strip Apple Vision Pro from all marketing/business docs (no plans to ship), bump LaTeX template needspace values to keep section head...</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>9.6x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>recall-tier regeneration sweep — 274 domains across cloud + non-cloud buckets, +36462 nodes, +72924 contrastive pairs, fresh audit shows 0 in-scope CRITICAL+HIGH remaining; also tribunal pass on 8 orphan-fix packages, S3 backup of 295 domains (6.94 GB), AZ-140 synthesis resume + embedder lifecycle fix, autopi...</td>
      <td>80.0h</td>
      <td>540m</td>
      <td>12m</td>
      <td>8.9x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Decoy zero-sweep diagnosis: fixed current_day/elo DB sync + zombie &#39;running&#39; reaper + content-density auditor, traced 365-day exam-plateau to 74% of goals lacking recall foundation</td>
      <td>15.0h</td>
      <td>210m</td>
      <td>8m</td>
      <td>4.3x</td>
      <td>112.5x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Docstring audit Phase 1: deterministic 9-step disposition pass for 30 doc-likely findings (3 batches of 10), with verbatim docstring/code citations, call-site enumeration, and per-finding justification. Output: append-only disposition table (1716 lines, 30 finding rows + 1 correction) and append-only resoluti...</td>
      <td>24.0h</td>
      <td>360m</td>
      <td>20m</td>
      <td>4.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Decoy zero-sweep on reclassified cloud cert packages: engine restart, fixed autopilot_service NameError (missing import os), ran sweep, 2 real terminals (AZ-120 crossed 0.5 readiness=0.509 day 44 confirming recall lift; ANS-C01 partial climb to 0.204 day 48). 13 profiles untested at user request to stop.</td>
      <td>4.0h</td>
      <td>240m</td>
      <td>8m</td>
      <td>1.0x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>17</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>309.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1723</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>81</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>10,907,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>10.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>228.9x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>7.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 96.0x ceiling came from Origin-extract Phase 3 — populate services/an origin service with synthesis code, merged backend, /jobs API + structlog observability, aoctl CLI, and relocated...; the 1.0x floor was Decoy zero-sweep on reclassified cloud cert packages: engine restart, fixed autopilot_service NameError (missing import os), ran sweep, 2 real terminals (AZ-120.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (228.9x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 17 tasks, the day produced roughly 7.7 weeks of senior-engineer-equivalent throughput in 28.7 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 16, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-16-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-16-leverage-record.html</id>
    <updated>2026-05-16T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">38 tasks. May 16, 2026 weighted to 23.3x leverage across 393.5 human-equivalent hours in 1012 Claude-minutes. Supervisory leverage closed at 373.3x.</p>
<p class="mb-4 font-light font-serif">9.8 weeks of human-equivalent throughput in 16.9 hours of Claude wall-clock. The 57.8x ceiling came from an Android client Phase 15 Wear OS companion: WatchPhase + WatchActivityMode + WatchAppState + WatchAppViewModel (HiltViewModel with SavedStateHandle + PhoneSync collection), Phone...; the 4.4x floor sat at Diagnosed + fixed stale engine domain-cache bug (engine in-memory pairs/KG drift from disk after resynth), added /api/v1/admin/domains/reload bulk endpoint, wired decoy zero-sweep....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>an Android client Phase 15 Wear OS companion: WatchPhase + WatchActivityMode + WatchAppState + WatchAppViewModel (HiltViewModel with SavedStateHandle + PhoneSync collection), PhoneSyncClient over Wearable Data Layer (callbackFlow DataClient listener + decode pure helper), PhoneSyncModule, 5 screens (Welcome /...</td>
      <td>26.0h</td>
      <td>27m</td>
      <td>1m</td>
      <td>57.8x</td>
      <td>1560.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>an Android client Phase 11 five patent screens: 4 new EngineApi endpoints (governance/trajectory/cross-domain/scenario+submit) + 4 DTO files, PatentRepository, MockEngineDispatcher Contains match mode + 5 new fixtures, PatentScreenScaffold shared chrome, AnalyticsScreen (style axes + drift alerts + recommenda...</td>
      <td>26.0h</td>
      <td>28m</td>
      <td>1m</td>
      <td>55.7x</td>
      <td>1560.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>an Android client Phase 10 course mode + TTS: ElevenLabsTts (Media3 ExoPlayer wrapper with callbackFlow Player.Listener bridge), PlaybackUpdate, TtsCacheStore (SHA-256-keyed disk cache + resolve/enrollFile/clear/sizeBytes), VoiceModule, CourseViewModel (taxonomy → tree with depth-cap cycle short-circuit), bui...</td>
      <td>22.0h</td>
      <td>24m</td>
      <td>1m</td>
      <td>55.0x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>an Android client Phase 9 active session: ActiveSessionViewModel (engine session lifecycle + wall-clock-anchored timing + DailyRingsStore mutation), ActiveSessionState sealed class, SessionHeader, ActiveSessionScreen with ActivityRouter, SessionResultsScreen with ELO delta tile, 6 activity composables (Contra...</td>
      <td>28.0h</td>
      <td>31m</td>
      <td>1m</td>
      <td>54.2x</td>
      <td>1680.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>an Android client Phase 13 competitive multiplayer: 2 new lobby endpoints + CompetitiveDto + CompetitiveRepository + 2 fixtures, ReconnectingEngineEventClient (exponential backoff 1/2/4/8/16s cap with ConnectionState StateFlow + healthy-reconnect counter reset), CompetitiveLobbyViewModel/Screen (create + join...</td>
      <td>22.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>52.8x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>an Android client Phase 16 billing + i18n + finishing: Plus Jakarta Sans via Compose downloadable fonts + GoogleFont.Provider (5 weights, transparent SansSerif fallback), font_certs.xml documented stub, PlayBillingClient (suspending BillingClient wrapper + SharedFlow purchase updates + acknowledge auto-flow),...</td>
      <td>24.0h</td>
      <td>28m</td>
      <td>1m</td>
      <td>51.4x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>an Android client Phase 12 Autopilot + WorkManager: AutopilotStore (encrypted prefs) + InMemoryAutopilotStore, NotificationChannels (autopilot.reminders + streak.milestones), AutopilotReminderScheduler (nextOccurrence pure helper + OneTimeWorkRequest sized delay), AutopilotReminderNotifier (Android 13+ permis...</td>
      <td>22.0h</td>
      <td>26m</td>
      <td>1m</td>
      <td>50.8x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>an Android client Phase 14 knowledge cosmos: CosmosLayoutEngine in :domain (pure-Kotlin Fruchterman-Reingold with deterministic seed and 7 unit tests), LayoutNode/Edge/PositionedNode framework-free records, KnowledgeGraphDto + new EngineApi endpoint + KnowledgeGraphRepository + 9-node fixture, KnowledgeMapVie...</td>
      <td>18.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>49.1x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>an Android client Phase 17 macrobenchmark + baseline profile: :macrobenchmark Gradle module (com.android.test + androidx.baselineprofile + self-instrumenting + variant gating), StartupBenchmark (cold + warm × None/Partial-BaselineProfileMode-Require/Full × 10 iterations targeting .benchmark variant), Baseline...</td>
      <td>14.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>46.7x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Phase 6A: extract exam<em>service from rest</em>gateway (create<em>exam+submit</em>exam+get<em>study</em>plan, 800 LOC removed, 22 new unit tests)</td>
      <td>12.0h</td>
      <td>23m</td>
      <td>1m</td>
      <td>31.3x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Phase 7B: autopilot<em>service composite-path unit tests (compute</em>composite<em>readiness aggregation + compute</em>composite<em>next</em>actions cluster-dedup + diversity guard)</td>
      <td>5.0h</td>
      <td>12m</td>
      <td>0m</td>
      <td>25.0x</td>
      <td>6000.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Phase 7D: manifold + strategy gRPC servicer tests (fixed manifold.proto deprecated option, unblocked proto codegen, 14 new tests; api 75.3-&gt;79.3%, origin 78.2-&gt;80.5%)</td>
      <td>5.0h</td>
      <td>13m</td>
      <td>0m</td>
      <td>23.1x</td>
      <td>3000.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Phase 6H: extract composite autopilot routes + cross-domain cluster helpers to autopilot_service (359 LOC, collocates the full autopilot brain in one service)</td>
      <td>9.0h</td>
      <td>24m</td>
      <td>0m</td>
      <td>22.5x</td>
      <td>5400.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Phase 6F: extract insights<em>service (compute</em>insights + cognitive-state classifier; 402 LOC out of rest_gateway, 16 new tests covering each card heuristic)</td>
      <td>7.0h</td>
      <td>19m</td>
      <td>0m</td>
      <td>22.1x</td>
      <td>2100.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Phase 6C: extract question<em>service (get</em>next<em>pair</em>mcq + get<em>next</em>question) + generate<em>micro</em>challenge into autopilot<em>service (350 LOC, 21 new tests, fixes Phase 6B compute</em>next_actions regression)</td>
      <td>8.0h</td>
      <td>22m</td>
      <td>0m</td>
      <td>21.8x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>LLM-IT 8: controller<em>loop integration tests (3 tests covering constructor wiring + run</em>synthesis_stage + token usage rollup; $0.04/run)</td>
      <td>4.0h</td>
      <td>11m</td>
      <td>0m</td>
      <td>21.8x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>an inference engine Phase 3 heavyweight extractions: delete<em>entity (127 LOC) + submit</em>answer (313 LOC) + submit<em>question</em>answer (258 LOC) + assess<em>readiness (225 LOC) + get</em>fingerprint (85 LOC) into session<em>answer</em>service + strategy_service. Includes ~100 new comprehensive unit tests covering every contract p...</td>
      <td>18.0h</td>
      <td>50m</td>
      <td>2m</td>
      <td>21.6x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Phase 6B: extract submit<em>activity</em>credit + get<em>cross</em>domain_transfer into existing service modules (311 LOC, 12 new tests, 3 pre-existing tests updated)</td>
      <td>6.0h</td>
      <td>17m</td>
      <td>0m</td>
      <td>21.2x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Phase 6I: extract catalog_service (catalog-projections + catalog-proficiency routes plus shared cache state + invalidation; 370 LOC)</td>
      <td>6.0h</td>
      <td>17m</td>
      <td>0m</td>
      <td>21.2x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>an inference engine Phase 3 final heavyweight push: get<em>daily</em>stats + get<em>entity</em>readiness<em>history + get</em>lesson + record<em>autopilot</em>activity + diagnose<em>root</em>cause + create<em>remediation</em>session (6 endpoints; ~750 LOC consolidated into strategy<em>service/lesson</em>service/autopilot<em>service/entity</em>service). ~80 new uni...</td>
      <td>14.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>21.0x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Phase 7C: snapshot<em>cache pure-logic unit tests (17 tests: msgpack coercion, SnapshotMeta round-trip, tensor markers, url resolution, load</em>snapshot error paths)</td>
      <td>3.0h</td>
      <td>9m</td>
      <td>0m</td>
      <td>20.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>an inference engine final autopilot brain extraction: <em>get</em>next<em>actions</em>inner (660 LOC) moved to autopilot<em>service.compute</em>next_actions. Late-imports for 7 gateway-local helpers keep helpers + brain on separate sides without forcing helper migration. Audit-regression test updated to track the safety read at t...</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>20.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>an inference engine Phase 5 ratchet + client update plan: bumped fail<em>under 79-&gt;80 (actual 81.46%), wrote 200-line client-update-plan.md with endpoint-by-endpoint compatibility table, per-client impact assessment, behavior corrections (epsilon seeding, content</em>type passthrough, exception ordering), pre-merge...</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>2m</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>LLM-IT 9: ValidationPipeline integration tests (3 tests covering 3-pass validation through real embedder+NLI+LLM; happy/empty/wrong-fragment paths)</td>
      <td>3.0h</td>
      <td>9m</td>
      <td>0m</td>
      <td>20.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>LLM integration test harness: 17 tests across 5 origin modules (client, synthesizer, amplifier, validator tribunal, flashcard tribunal) with cost guard + auto-skip; first run cost $0.0255</td>
      <td>12.0h</td>
      <td>38m</td>
      <td>2m</td>
      <td>18.9x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Origin extract Phase 2: 7 grouped commits cutting engine off an inference engine.origin.<em> (LLM-client/embedder rewires in 9 files, composer relocation to an inference engine.runtime, PERSONALIZATION_</em> relocation to an inference engine.api.prompts, ScenarioConfig carve-off, AtomBundle/Collection lib path swaps...</td>
      <td>8.0h</td>
      <td>26m</td>
      <td>1m</td>
      <td>18.5x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Phase 6G: move <em>compute</em>domain<em>readiness from rest</em>gateway to services/<em>helpers (zero late-imports from services to rest</em>gateway anymore; 227 LOC, 5 new readiness-math tests)</td>
      <td>4.0h</td>
      <td>13m</td>
      <td>0m</td>
      <td>18.5x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>an inference engine Phase 5 coverage backfill: 85 new tests across snapshot<em>cache (msgpack default, tensor markers strip/restore, URL resolver, SnapshotPayload), scenario</em>seeds (normalize<em>difficulty, filter, tokens, coverage, grade keyword fallback, compose</em>context, build<em>scenario</em>response), compute<em>next</em>acti...</td>
      <td>6.0h</td>
      <td>20m</td>
      <td>2m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Phase 6D: extract shared math+taxonomy helpers into services/<em>helpers (eliminates late-import dance; 328 LOC out of rest</em>gateway, 25 new helper tests)</td>
      <td>5.0h</td>
      <td>17m</td>
      <td>0m</td>
      <td>17.6x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Phase 7A: catalog<em>service unit tests (15 tests covering cache helpers, projection bundle, invalidation, both routes; lifts catalog</em>service from 24% to ~95%)</td>
      <td>4.0h</td>
      <td>14m</td>
      <td>0m</td>
      <td>17.1x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Phase 7E: engine_context singleton + lab-index unit tests (6 tests; api 79.3-&gt;79.4%)</td>
      <td>2.0h</td>
      <td>7m</td>
      <td>0m</td>
      <td>17.1x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>an inference engine Phase 5 final coverage backfill: 25 new tests for rest<em>gateway math helpers (poisson</em>binomial<em>pass</em>probability, target<em>per</em>question<em>probability inverse with round-trip verification, entity</em>rolling<em>correctness</em>rate, required<em>observations</em>per_node). Round-trip property test between forward +...</td>
      <td>2.0h</td>
      <td>8m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Phase 6E: move 15 inline Pydantic models from rest_gateway to api/models.py (197 LOC, 0 regressions)</td>
      <td>2.0h</td>
      <td>9m</td>
      <td>0m</td>
      <td>13.3x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Origin extraction Phase 0: full inventory + dependency map + 9-phase plan + 3 new lib repos + new service repo with CLI/observability skeleton + 4 existing repos updated + 7 commits</td>
      <td>14.0h</td>
      <td>95m</td>
      <td>15m</td>
      <td>8.8x</td>
      <td>56.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Audit-orphanfix batch complete: 9 fresh re-syntheses + 9 question banks landed at 100% graph∩pair overlap, VPR 0.87-0.98. Engine bug fix (regenerate<em>nodes pair-orphan) verified end-to-end across all 9 packages. Monitored via 10-min cron with custom monitor</em>orphanfix.sh script that ran ~85 checks across 14h. A...</td>
      <td>2.5h</td>
      <td>20m</td>
      <td>2m</td>
      <td>7.5x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Origin extract Phase 1: populate 3 new libs from an inference engine.origin (llm/embeddings/runtime types + schemas + parser + validator), full coverage suites, 197 tests green at ≥92% per lib, all 4 docs and commits per lib</td>
      <td>9.0h</td>
      <td>75m</td>
      <td>3m</td>
      <td>7.2x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Created 4 new zero-sweep profiles, ran 9-domain a simulation harness calibration sweep, diagnosed portfolio-wide synthesis bug: contrastive pairs reference missing knowledge_graph nodes (33%-100% broken refs), starving engine readiness signal</td>
      <td>3.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>5.1x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Diagnosed + fixed stale engine domain-cache bug (engine in-memory pairs/KG drift from disk after resynth), added /api/v1/admin/domains/reload bulk endpoint, wired decoy zero-sweep preflight to auto-reload, fixed PCA profile resolver bug, identified FinOps-for-AI content bug (2 recall nodes vs 200+ baseline),...</td>
      <td>8.0h</td>
      <td>110m</td>
      <td>12m</td>
      <td>4.4x</td>
      <td>40.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>38</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>393.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1012</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>63</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,552,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>23.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>373.3x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>9.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 57.8x ceiling came from an Android client Phase 15 Wear OS companion: WatchPhase + WatchActivityMode + WatchAppState + WatchAppViewModel (HiltViewModel with SavedStateHandle + PhoneSyn...; the 4.4x floor was Diagnosed + fixed stale engine domain-cache bug (engine in-memory pairs/KG drift from disk after resynth), added /api/v1/admin/domains/reload bulk endpoint, wir.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (373.3x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 38 tasks, the day produced roughly 9.8 weeks of senior-engineer-equivalent throughput in 16.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 15, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-15-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-15-leverage-record.html</id>
    <updated>2026-05-15T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">19 tasks. May 15, 2026 weighted to 21.1x leverage across 378.0 human-equivalent hours in 1075 Claude-minutes. Supervisory leverage closed at 238.7x.</p>
<p class="mb-4 font-light font-serif">9.4 weeks of human-equivalent throughput in 17.9 hours of Claude wall-clock. The 73.8x ceiling came from an Android client repo skeleton: README, CLAUDE.md, and four parity docs (requirements, design, design-system, testing-strategy) translating the iOS Swift/SwiftUI client to Kotlin/...; the 7.2x floor sat at Recovered 5 misdirected re-synth packages (scripts/data/domains -&gt; data/domains); diagnosed and fixed engine bug at loop.py:460 (<em>pre</em>validate_nodes string-not-dict crash) mirrorin....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>an Android client repo skeleton: README, CLAUDE.md, and four parity docs (requirements, design, design-system, testing-strategy) translating the iOS Swift/SwiftUI client to Kotlin/Compose/AppAuth/Wear OS</td>
      <td>16.0h</td>
      <td>13m</td>
      <td>2m</td>
      <td>73.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>an Android client Phase 3 data layer: EngineApi (single Retrofit interface, all endpoint groups), 7 DTO files, EngineClient facade with HttpException/SerializationException/IOException → EngineError mapping, EngineError sealed class, AuthInterceptor + TokenProvider, EngineEventClient (OkHttp WebSocket → Flow&lt;...</td>
      <td>30.0h</td>
      <td>28m</td>
      <td>1m</td>
      <td>64.3x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>an Android client Phase 8 dashboard + rings: DailyRingsState + RingTargets, DailyRingsRollover (pure-function rules with 7 test cases), DailyRingsStore (SharedPreferences-backed with StateFlow + recordAnswer/recordActivity/rolloverIfNeeded), DailyRingsModule, DailyRingResetWorker (HiltWorker periodic 1-day fl...</td>
      <td>22.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>52.8x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>an Android client Phase 2 domain logic: LcsDiff (with iOS-bug fix), DeterministicShuffle (DJB2+Mulberry32+Fisher-Yates), BehavioralRingsComputation + RingArc + RingConstants + BehavioralRings, ProficiencyColor + TimedRecallTimer, Base64Url with PKCE helpers (RFC 7636 verified), full AppModels with kotlinx-ser...</td>
      <td>14.0h</td>
      <td>16m</td>
      <td>1m</td>
      <td>52.5x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>an Android client Phase 7 onboarding + initialization: OnboardingViewModel (3-step state machine with DeterministicShuffle-seeded calibration quiz, 8-question SAMPLE_BANK, SavedStateHandle restoration), OnboardingScreen (tier cards + progress-tracked quiz + completion), KnowledgeTier 5-tier enum, Initializati...</td>
      <td>14.0h</td>
      <td>16m</td>
      <td>1m</td>
      <td>52.5x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>an Android client Phase 6 catalog + exam info: CatalogViewModel (StateFlow combine + EngineError-to-message mapping), DomainCatalogScreen (adaptive LazyVerticalGrid 1/2/3 cols, badges, top app bar with refresh + sign-in/profile, loading/empty/error states), ExamInfoViewModel (SavedStateHandle for domainId), E...</td>
      <td>18.0h</td>
      <td>21m</td>
      <td>1m</td>
      <td>51.4x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>an Android client Phase 4 authentication: TokenStore + EncryptedTokenStore (AES-256-GCM Keystore), PendingEnrollmentStore + Encrypted impl, PkceVerifierStore + Encrypted impl with 5-min TTL, OidcConfig, OidcAuthService (AppAuth Custom Tabs orchestration with suspend code-exchange), AuthResult sealed class, Au...</td>
      <td>16.0h</td>
      <td>19m</td>
      <td>1m</td>
      <td>50.5x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>an Android client Phase 5 app shell + state machine: 28-state Phase sealed interface (all @Parcelize), ActivityModeKey + WatchPhase, AppState, AppStateHolder (StateFlow Singleton), AppViewModel (HiltViewModel with SavedStateHandle restoration + auth bootstrap + startStudying decision + handleBackPressed), Pha...</td>
      <td>14.0h</td>
      <td>17m</td>
      <td>1m</td>
      <td>49.4x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>an Android client Phase 1 design system: HslColor + an inference engineColorScheme (light + dark, 1:1 parity with web tokens.css), an inference engineBrand runtime accent override, an inference engineTokens public surface (Composable getters + Spacing/Radius/Motion/TapTarget/Elevation/FontSize), an inference...</td>
      <td>18.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>49.1x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>an Android client Phase 0: phased build plan (18 phases) + Gradle multi-module skeleton (app/wear/design-system/domain/data/testing), Kotlin 2.0 + AGP 8.5 + Compose BOM, Hilt+KSP, version catalog, Hilt Application + Compose MainActivity for phone+Wear, manifest with OIDC + App Link intent-filters, network-sec...</td>
      <td>12.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>40.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Two funding-strategy documents (pre-revenue SAFE path and growth-bridge + priced-seed path) covering consumer + a recruiter product + enterprise markets with branded PDFs</td>
      <td>16.0h</td>
      <td>28m</td>
      <td>8m</td>
      <td>34.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>an inference engine: retire @pytest.mark.slow tests, add 30s default timeout + pristine RNG seeding, lift 14 of 16 packages to &gt;=85% unit-test coverage with 1,342 new fast tests across 20 files (5,010 pass / 0 fail / 75s wall-clock, pristine across 3 back-to-back runs). Built per-module coverage gate, fixed L...</td>
      <td>80.0h</td>
      <td>240m</td>
      <td>15m</td>
      <td>20.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Third funding-plan variant (SAFE + 2 equity-comp founding hires + native Android September 2026); PDF tooling improvements (DOC_DATE override, H2 page-break removal)</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>6m</td>
      <td>16.4x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>an inference engine Phase 3 service-layer extraction: 16 endpoints across 12 service modules (sequencing, interaction, atom_service compose v1+v2, autopilot lifecycle/create/composite/list-due, operations+telemetry batch, entity self-report + seed-from-mastery, session audio/hint/end/upload-resume/next-challe...</td>
      <td>32.0h</td>
      <td>130m</td>
      <td>4m</td>
      <td>14.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>a simulation harness: audited UI vs post-April app-web rebuild, fixed Postgres auth + 22 stuck workers, added 4 frontend polish fixes (SSE wiring, sidebar grouping, cloud filter, per-provider calibration facet), remapped 8 Playwright page objects (onboarding, dashboard, exam, mcq, library, session_config, aut...</td>
      <td>22.0h</td>
      <td>95m</td>
      <td>6m</td>
      <td>13.9x</td>
      <td>220.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Diagnosed pair-orphan engine bug (regenerate_nodes returned only new nodes, caller looked up stale pairs by NEW id; pairs hold OLD id so intersection always empty); fixed signature + caller, added regression test #19; archived 9 affected packages; relaunched orphan-fix batch with 3-way parallel concurrency; s...</td>
      <td>5.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>8.6x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Consolidated advisor-ready funding plan 02c (5-person team, $6.5M SAFE, profit-sharing, patent-adjusted valuations, 5-year comp tables) plus HoRO/CFO + Marketing Director job description PDFs</td>
      <td>32.0h</td>
      <td>240m</td>
      <td>35m</td>
      <td>8.0x</td>
      <td>54.9x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Patent + diagram audit clean-up bundle for 7 follow-on filing working drafts (working drafts): reverted regression edges to deterministic-classifier verdicts (a follow-on FIG 2, a follow-on FIG 7), fixed EE 710 cross-fig conflict (subgraph carries numeral, PROV unnumbered, spec corrected), added success-path...</td>
      <td>8.0h</td>
      <td>65m</td>
      <td>2m</td>
      <td>7.4x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Recovered 5 misdirected re-synth packages (scripts/data/domains -&gt; data/domains); diagnosed and fixed engine bug at loop.py:460 (<em>pre</em>validate_nodes string-not-dict crash) mirroring synthesizer/engine.py defensive coercion; added regression test #18; relaunched resume batch (3 syntheses + 5 QBs)</td>
      <td>3.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>7.2x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>378.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1075</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>95</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,130,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>21.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>238.7x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>9.4</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 73.8x ceiling came from an Android client repo skeleton: README, CLAUDE.md, and four parity docs (requirements, design, design-system, testing-strategy) translating the iOS Swift/Swift...; the 7.2x floor was Recovered 5 misdirected re-synth packages (scripts/data/domains -&gt; data/domains); diagnosed and fixed engine bug at loop.py:460 (<em>pre</em>validate_nodes string-not-.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (238.7x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 19 tasks, the day produced roughly 9.4 weeks of senior-engineer-equivalent throughput in 17.9 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 14, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-14-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-14-leverage-record.html</id>
    <updated>2026-05-14T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eight tasks. May 14, 2026 weighted to 31.1x leverage across 189.0 human-equivalent hours in 365 Claude-minutes. Supervisory leverage closed at 290.8x.</p>
<p class="mb-4 font-light font-serif">4.7 weeks of human-equivalent throughput in 6.1 hours of Claude wall-clock. The 64.0x ceiling came from Merge an authentication service + a purchase service + an onboarding service + an inference engine-a recruiter product-web backend into an API gateway as separate logical DBs (auth...; the 4.4x floor sat at Content audit run; identified next 10 priority domains; SOA-C02 pair_id linkage repair (12.2% -&gt; 100%); diagnosed cross-domain prereq validator bug; built and launched audit-batch....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Merge an authentication service + a purchase service + an onboarding service + an inference engine-a recruiter product-web backend into an API gateway as separate logical DBs (auth<em>db, purchase</em>db, an inference engine_aces). Phases 0-5: SQLAlchemy + Alembic multi-DB foundation, JWT signing + JWKS, feature fla...</td>
      <td>80.0h</td>
      <td>75m</td>
      <td>8m</td>
      <td>64.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full implementation pass: delete redundant worker code (an authentication service workers/, a recruiter product Celery workers); build master<em>skills (188 rows) + master</em>certs (101 industry + 10 recruiter product = 111 rows) with real seed from a content specification system/certifications and curated taxonomy...</td>
      <td>60.0h</td>
      <td>90m</td>
      <td>6m</td>
      <td>40.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Implement 7-day free-trial epic: a purchase service comp endpoints + auto-revoke, an authentication service signup hook + trial-started email, a notification service templates, EventBridge Lambda for T-1d + T0 sweep, a web client trial badge, marketing copy on a marketing site + auth signup page</td>
      <td>24.0h</td>
      <td>65m</td>
      <td>6m</td>
      <td>22.1x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Full patent and diagram audits across 7 follow-on filing working drafts (working drafts): Phase 0 deterministic edge classifier (0 findings), Phases 1-7 of full-patent-audit.md, and 7 per-app diagram agents per full-diagram-audit.md. Identified 2 new regressions (a follow-on FIG 2 CFU-&gt;REC dotted-forward, a f...</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>20.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Backfill 4 days of leverage posts (May 10-13) on a personal site: synced 69 missing records from cloud API to CSV, wrote sanitization pipeline (regex-based) and generated 4 markdown posts with intro/task-table/aggregates/analysis structure covering 73 total tasks across the 4 days, scrubbed all proprietary re...</td>
      <td>7.0h</td>
      <td>22m</td>
      <td>4m</td>
      <td>19.1x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Merge Anthropic email content into How I Built a study product launch story essay (3200 words, 11 sections): added By the Numbers leverage table, Built with Claude observations section, a metrics tracker + The Deferral side quests, Accessibility section, and rewrote Giving Back to correctly distinguish free K...</td>
      <td>5.0h</td>
      <td>18m</td>
      <td>6m</td>
      <td>16.7x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Bring full an inference engine local stack up (11 services) and fix unauth /entitlements/me + /auth/refresh 401 cascade on public dashboard</td>
      <td>3.0h</td>
      <td>22m</td>
      <td>4m</td>
      <td>8.2x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Content audit run; identified next 10 priority domains; SOA-C02 pair<em>id linkage repair (12.2% -&gt; 100%); diagnosed cross-domain prereq validator bug; built and launched audit-batch (5 re-syntheses + 4 question regens) with an inference engine</em>SKIP<em>CROSS</em>DOMAIN<em>PREREQ</em>CHECK env var</td>
      <td>4.0h</td>
      <td>55m</td>
      <td>4m</td>
      <td>4.4x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>8</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>189.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>365</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>39</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,131,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>31.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>290.8x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>4.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 64.0x ceiling came from Merge an authentication service + a purchase service + an onboarding service + an inference engine-a recruiter product-web backend into an API gateway as separa...; the 4.4x floor was Content audit run; identified next 10 priority domains; SOA-C02 pair_id linkage repair (12.2% -&gt; 100%); diagnosed cross-domain prereq validator bug; built and l.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (290.8x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 8 tasks, the day produced roughly 4.7 weeks of senior-engineer-equivalent throughput in 6.1 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 13, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-13-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-13-leverage-record.html</id>
    <updated>2026-05-13T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Three tasks. May 13, 2026 weighted to 54.5x leverage across 80.0 human-equivalent hours in 88 Claude-minutes. A quieter day: an observability-platform from design-to-implementation gap closure, a deterministic diagram-edge audit pass, and a single flagship-course buildout with curriculum mapping, study plan, and interaction tagging. Supervisory leverage closed at 480.0x.</p>
<p class="mb-4 font-light font-serif">2.0 weeks of human-equivalent throughput in 1.5 hours of Claude wall-clock. The 130.0x ceiling came from an observability platform: closed design-vs-implementation gap — 14 models + migration 0012, RBAC + API keys + audit, 30+ REST routes, 12 Celery workers, in-process MCP mount, 3...; the 15.0x floor sat at an AP course: CED mapping + 10-day study plan + V2 atom interaction tagger + goal_id bug fix + repair tooling + 354 atoms tagged with 708 interactions.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>an observability platform: closed design-vs-implementation gap — 14 models + migration 0012, RBAC + API keys + audit, 30+ REST routes, 12 Celery workers, in-process MCP mount, 3 ingest protocols (Prom remote_write/StatsD/syslog), 6 new frontend pages, real LLM wiring (a mid-tier model RCA + an embedding model embedd...</td>
      <td>65.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>130.0x</td>
      <td>1300.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Deterministic diagram edge audit: Python classifier, 6 .mmd fixes, 12 per-edge exceptions, audit doc update</td>
      <td>5.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>16.7x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>an AP course: CED mapping + 10-day study plan + V2 atom interaction tagger + goal_id bug fix + repair tooling + 354 atoms tagged with 708 interactions</td>
      <td>10.0h</td>
      <td>40m</td>
      <td>5m</td>
      <td>15.0x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>80.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>88</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>10</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>490,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>54.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.0</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 130.0x ceiling came from an observability platform: closed design-vs-implementation gap — 14 models + migration 0012, RBAC + API keys + audit, 30+ REST routes, 12...; the 15.0x floor was an AP course: CED mapping + 10-day study plan + V2 atom interaction tagger + goal_id bug fix + repair tooling + 354 atoms tagged with 708.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (480.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">May 13 was a low-task-count day but with one large, high-leverage build (the observability platform). When a single agent gets handed a coherent implementation spec covering 14 models, ~30 routes, RBAC, audit logging, and Celery workers, the ratio of human prompt-writing to AI output reaches its highest reasonable bound. Days like this produce big numbers from small task counts.</p>
<p class="mb-4 font-light font-serif">Across the 3 tasks, the day produced roughly 2.0 weeks of senior-engineer-equivalent throughput in 1.5 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 12, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-12-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-12-leverage-record.html</id>
    <updated>2026-05-12T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-four tasks. May 12, 2026 weighted to 65.7x leverage across 877.0 human-equivalent hours in 801 Claude-minutes. The day shifted into post-launch consolidation: porting the web client&#39;s full feature set to the desktop client, authoring four follow-on IP filings end-to-end, and running deterministic patent-and-diagram audits four consecutive times until the recurrence cycle broke. A typed-atom authoring subsystem and a continuous-density rendering subsystem both had patent drafts completed and audited. Supervisory leverage closed at 506.0x.</p>
<p class="mb-4 font-light font-serif">21.9 weeks of human-equivalent throughput in 13.4 hours of Claude wall-clock. The 213.3x ceiling came from Author 4 new follow-on filing patent applications (4 follow-on subsystems) — each ~100KB markdown with 20 claims and 8 Mermaid figures, plus full cross-document consistency upda...; the 5.0x floor sat at Fix 8 pre-existing test failures in an inference engine API endpoint suite (route mismatches, wrong status codes, inverted diminishing_note logic).</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Author 4 new follow-on filing patent applications (4 follow-on subsystems) — each ~100KB markdown with 20 claims and 8 Mermaid figures, plus full cross-document consistency updates (canonical numbers, gen scripts, audit JSON, CHANGELOG, 14 portfolio docs)</td>
      <td>160.0h</td>
      <td>45m</td>
      <td>5m</td>
      <td>213.3x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>a desktop client full web feature parity — foundation deps + 16 IPC handlers + 8 charts + 15 components + 24 data stores + 22 i18n namespaces + readiness module + session machine + voice/TTS + sync/telemetry + app-services + 4 big-rock screens (Session 1244 LOC, CourseDetail full, Exam 420 LOC, LessonView 570 LOC) +...</td>
      <td>240.0h</td>
      <td>95m</td>
      <td>8m</td>
      <td>151.6x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Build remaining ~57 Tier 3-4 interaction components across 12 domains; FullComponentCatalog browse page; registry wire-up; build green</td>
      <td>160.0h</td>
      <td>85m</td>
      <td>3m</td>
      <td>112.9x</td>
      <td>3200.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Build all 10 Tier-2 interaction components (graphing<em>calc, compound</em>interest, punnett<em>square, timeline, conjugation</em>drill, piano, map<em>quiz, orbital</em>sim, physics<em>sim, circuit</em>builder) plus shared utilities; gallery + registry + build green</td>
      <td>80.0h</td>
      <td>50m</td>
      <td>3m</td>
      <td>96.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>a desktop client: wire every local-only stub to real IPC — getDailyStats, postCognitiveState, patchEnrollment/archiveEnrollment, userState get/put/delete, testimonial get/upsert/delete/streaming-suggest (NDJSON per-chunk fan-out), plus dailyStats/userPrefs/activityPreferences/enrollment store rewrites to use real an...</td>
      <td>12.0h</td>
      <td>12m</td>
      <td>2m</td>
      <td>60.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>an iOS client: web parity sweep (9 of 12 deltas closed) — auto bug reporter, native Autopilot settings, Credential Mapping, Insights/Forecast/KnowledgeMap promotions, Offline mode, Calibrate, KaTeX math, Accept Invite flow; docs + build green</td>
      <td>32.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>54.9x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Fix all rerun-2 patent + diagram audit findings (16 FAILs + 3 WARNs across 7 follow-on filing apps): refresh canonical.json (a follow-on range added, a follow-on app to 26 claims); replace learner with entity in several follow-on apps; rename days<em>to</em>exam to days<em>to</em>assessment in a follow-on app; expand Invention_Li...</td>
      <td>14.0h</td>
      <td>19m</td>
      <td>1m</td>
      <td>42.9x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Port 10 screens + KnowledgeMap chart from a web client to a desktop client (ExamResultsScreen, ReadinessForecast, CredentialMapping, Courses, FlashcardsScreen, CertificationsScreen, KnowledgeMapScreen, OfflineScreen, PageNotFound, AcceptInvite)</td>
      <td>8.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Run full patent and diagram audits for an IP portfolio repo: 7 follow-on filing apps (7 follow-on apps), 56 diagrams, 7 phases of patent checks plus per-app semantic agents. Produced timestamped report and updated diagram baseline.</td>
      <td>6.0h</td>
      <td>9m</td>
      <td>1m</td>
      <td>36.7x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Full patent and diagram audit (rerun-4) in an IP portfolio repo: 7 follow-on filing apps, 56 diagrams, ~30 supporting docs, 7 parallel per-app diagram agents. Found 7 FAIL + 8 WARN against rerun-3 0/0 claim; diagnosed structural recurrence (uncommitted fixes, prose-mirror drift, stale audit-doc expectations).</td>
      <td>8.0h</td>
      <td>14m</td>
      <td>2m</td>
      <td>34.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Seed four Entity Collections for an inference engine adaptive learning platform (periodic<em>elements 118, us</em>states 50, countries 50, historical_figures 44)</td>
      <td>20.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>34.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Port CourseDetail.tsx (2930 LOC, 5 tabs) from a web client to CourseStructure.tsx in a desktop client — full feature parity including Autopilot, Study Plan, Curriculum, Activities, Labs tabs</td>
      <td>24.0h</td>
      <td>45m</td>
      <td>8m</td>
      <td>32.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Full an inference engine patent + diagram audit (7 follow-on filing apps, 56 diagrams, 27 docs)</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>30.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Audit, optimize, and ship all 58 CLAUDE.md files across the an inference engine monorepo: 6 parallel audit agents, 5 parallel editing agents, 50 repos committed and pushed. Net -3500 lines, 6 new docs files extracted, internal contradictions resolved (a CMS CodePipeline, websites parallel-build), version staleness f...</td>
      <td>35.0h</td>
      <td>75m</td>
      <td>12m</td>
      <td>28.0x</td>
      <td>175.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>a desktop client Wave 5 parity: Help Center (10 screens), full Insights rewrite (AnalyticsPanel), Dashboard polish (DriftActionCard + ConvoyCard + DashboardAcesSection), Settings polish (tabbed layout + ScheduleTab + account deletion with react-hook-form/zod)</td>
      <td>24.0h</td>
      <td>55m</td>
      <td>10m</td>
      <td>26.2x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Break the patent-audit recurrence cycle: commit 49 rerun-3 fixes; fix 5 real diagram FAILs (FIG 1 arrows, FIG 7 label, FIG 8 (740), FIG 8 (720)/(730)); identify 2 BB findings as agent errors via cycle test and add exceptions; migrate CLAUDE.md/AGENTS.md exception-list prose to canonical pointers; refactor full-paten...</td>
      <td>8.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>19.2x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Port active-session screen from a web client to a desktop client - full state machine with countdown/active/feedback/paused/summary phases, ActivityFrame, cognitive state, TTS narration, plan session</td>
      <td>8.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>17.1x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Build deterministic a11y audit toolchain (axe-core CLI + Playwright sweep + jsx-a11y + Python source checker, unified through stable-hash triage ledger) to eliminate cross-run finding nondeterminism. New scripts: a11y_ledger.py with adopt/list/mark/filter; run-a11y-static.sh axe-core/cli wrapper. ESLint jsx-a11y wir...</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>16.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Run full deterministic accessibility audit via new 3-engine toolchain (Python source + Playwright axe + static-site axe via Playwright .mjs replacing broken @axe-core/cli). Ledger bootstrapped with 185 unique findings. Critical infra bug surfaced: existing a web client npm run test:axe has been silently scanning an...</td>
      <td>8.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Cascade 717-&gt;733 claim total across patent portfolio docs, audits canonical, architecture README, canonical-values.yaml</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Port 22 utility modules (hooks, voice, sync, telemetry, app-services, a11y) from a web client to a desktop client with IPC adaptations</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>8m</td>
      <td>13.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Port LessonView from a web client to a desktop client LessonScreen — full markdown/math/code rendering, collapsible sidebar taxonomy, TTS IPC audio, adaptive toggle, section pagination, completion credit, confetti</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>4m</td>
      <td>13.3x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Port readiness and session modules (16 files) from a web client to a desktop client with API import adaptation</td>
      <td>3.0h</td>
      <td>20m</td>
      <td>5m</td>
      <td>9.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Fix 8 pre-existing test failures in an inference engine API endpoint suite (route mismatches, wrong status codes, inverted diminishing_note logic)</td>
      <td>1.5h</td>
      <td>18m</td>
      <td>2m</td>
      <td>5.0x</td>
      <td>45.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>24</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>877.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>801</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>104</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,146,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>65.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>506.0x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>21.9</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 213.3x ceiling came from Author 4 new follow-on filing patent applications (4 follow-on subsystems) — each ~100KB markdown with 20 claims and 8 Mermaid figures, p...; the 5.0x floor was Fix 8 pre-existing test failures in an inference engine API endpoint suite (route mismatches, wrong status codes, inverted diminishing_no.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (506.0x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">May 12 was the highest-volume day in the four-day window. The 213x ceiling on the four-IP-filings task came from work that maps cleanly to a known authoring template; the model fills the slot, the audit catches issues, the loop closes in minutes. Cross-platform feature-parity ports also scored high because the source-of-truth implementation already existed in another codebase.</p>
<p class="mb-4 font-light font-serif">Across the 24 tasks, the day produced roughly 21.9 weeks of senior-engineer-equivalent throughput in 13.4 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 11, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-11-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-11-leverage-record.html</id>
    <updated>2026-05-11T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nineteen tasks. May 11, 2026 weighted to 37.2x leverage across 473.5 human-equivalent hours in 764 Claude-minutes. The day was launch-night itself plus a sustained accessibility-audit-and-remediation push across the customer product and 8 marketing-site fleet members. Late-night security audit, real-time fabric refactor, and the inevitable post-launch infrastructure fixes rounded it out. Supervisory leverage closed at 263.1x.</p>
<p class="mb-4 font-light font-serif">11.8 weeks of human-equivalent throughput in 12.7 hours of Claude wall-clock. The 240.0x ceiling came from WCAG 2.1 AA accessibility audit across 9 properties (a web client + 8 marketing sites) — ~120 concrete findings with file:line refs, severity grouping, cross-cutting themes, and...; the 7.6x floor sat at Launch-night batch: fix admin delete lockup (a cache layer purge timeout), unblock an API service CI build (ruff lint), kill a frontend library 401 retry storm, rebuild + upload....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>WCAG 2.1 AA accessibility audit across 9 properties (a web client + 8 marketing sites) — ~120 concrete findings with file:line refs, severity grouping, cross-cutting themes, and 6-8 dev-day remediation roadmap</td>
      <td>60.0h</td>
      <td>15m</td>
      <td>2m</td>
      <td>240.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full WCAG 2.1 AA accessibility audit on a web client + 8 sister sites — deterministic checker + parallel LLM judgment phase, 56 findings (7 CRITICAL, 17 HIGH, 24 MEDIUM, 8 LOW) with sequenced remediation plan</td>
      <td>30.0h</td>
      <td>17m</td>
      <td>2m</td>
      <td>105.9x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>WCAG 2.1 AA remediation across 11 repos (a web client + design-system + activities + a marketing site flagship + 6 sister sites + shared template + enterprise accessibility-statement rewrite). 8 parallel fix agents, design-system fixes propagate via roving tabindex/aria-controls/FocusScope traps; shared Jinja partia...</td>
      <td>70.0h</td>
      <td>40m</td>
      <td>1m</td>
      <td>105.0x</td>
      <td>4200.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Full WCAG 2.1 AA accessibility audit across a web client and 10 sister sites (123 findings; 13 P0 blockers identified). Consolidated report written to the monorepo audits/reports/accessibility-audit-report-2026-05-11-deep.md.</td>
      <td>24.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fix all 56 WCAG 2.1 AA accessibility findings (7 CRITICAL + 17 HIGH + 24 MEDIUM + 8 LOW) across a web client and the 8 sister sites — token contrast, focus management, ARIA wiring, keyboard nav, focus traps, animation guards, touch targets, document titles, modal labelling, custom tablists, FAQ semantic structure, e...</td>
      <td>60.0h</td>
      <td>50m</td>
      <td>1m</td>
      <td>72.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Pre-launch security &amp; crash audit + fix sweep across auth/purchase/onboarding/notification services: 21 issues fixed (4 CRITICAL admin gaps + IDOR, MFA bypass, webhook bypass, IDOR/spam, plus 17 HIGH), 2 alembic migrations, 109 new tests, all 4 services deployed and smoke-tested in prod, plus a notification service...</td>
      <td>48.0h</td>
      <td>55m</td>
      <td>8m</td>
      <td>52.4x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>a newsletter platform: refactor real-time fabric from WebSocket to REST + SSE (a cache layer pub/sub + ring buffer, new /events/stream + /events/recent endpoints, EventStreamContext, cross-newsletter ActivityPage, full test rewrite)</td>
      <td>14.0h</td>
      <td>18m</td>
      <td>4m</td>
      <td>46.7x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>a project management cert demo + Adaptive Lesson Generation 2.0: plan + patentability (8 claims), atom schema+validator+composer+generator end-to-end, 6 project management cert item generators producing +671 new items (multi<em>select/drag</em>match/sequence/role<em>play/constructed</em>response), 8x throughput refactor via map_s...</td>
      <td>50.0h</td>
      <td>90m</td>
      <td>5m</td>
      <td>33.3x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>WCAG 2.1 AA accessibility audit of shared a learning platform Jinja templates (30 templates + main.js, 23 issues found)</td>
      <td>12.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>25.7x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>WCAG 2.1 AA accessibility audit of a marketing site and a marketing site — all templates, content pages, built HTML</td>
      <td>8.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>21.8x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Build isolated E2E Playwright harness (auth, stubs, page objects, firehose + journey runners) + fix 6 production bugs surfaced by harness (legacy token scrub, RemoteBanners filter, proficiency entries, dailyStats NaN, ResumeReviewSection length, offlineQueue indexedDB); 10 commits across an inference engine/an API s...</td>
      <td>30.0h</td>
      <td>90m</td>
      <td>8m</td>
      <td>20.0x</td>
      <td>225.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Launch-night DB pool sweep across 19 repos + a cache layer-backed user/refresh-token cache (refresh tokens moved to a cache layer-only, Postgres no longer system of record) + cross-service cascade delete (auth → purchase) + entitlements queryKey user-scoping</td>
      <td>24.0h</td>
      <td>90m</td>
      <td>8m</td>
      <td>16.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Deploy a newsletter platform SSE refactor + fix an assets CDN CORS (S3 bucket policy + CloudFront invalidation)</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>an admin tool: wire hard-delete customer flow to a billing service GDPR endpoint so subscriptions/payments/comps cascade-delete and a payment provider stops billing; receipt modal now shows purchase-side counts and a payment provider cancel errors</td>
      <td>2.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Add system snapshot purge (archived + older-than modes) to an admin tool SnapshotsTab + RPC handler; fix banner save MissingGreenlet by setting eager_defaults=True on Banner model</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>4m</td>
      <td>15.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>CSS accessibility audit: color contrast, focus styles, motion preferences across sister sites and a web client</td>
      <td>6.0h</td>
      <td>25m</td>
      <td>10m</td>
      <td>14.4x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>WCAG 2.1 AA accessibility audit of a web client React SPA</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>10m</td>
      <td>13.7x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Launch-day recovery: rewrote launch schedule for post-PH-flop reality (struck dead email-blast rows, added wire spend, fixed LinkedIn post date), audited homepage email-capture gap, wrote 08<em>solo</em>founder<em>press</em>plan.md (~430 lines: Anthropic-first/newsletter/exclusive/HN-inbound/aggregator strategy with per-outlet pe...</td>
      <td>16.0h</td>
      <td>90m</td>
      <td>22m</td>
      <td>10.7x</td>
      <td>43.6x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Launch-night batch: fix admin delete lockup (a cache layer purge timeout), unblock an API service CI build (ruff lint), kill a frontend library 401 retry storm, rebuild + upload 4.3GB boot cache to S3, author SessionStart voice hook with compaction-safe persistence</td>
      <td>7.0h</td>
      <td>55m</td>
      <td>6m</td>
      <td>7.6x</td>
      <td>70.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>473.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>764</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>108</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,185,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>37.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>263.1x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>11.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 240.0x ceiling came from WCAG 2.1 AA accessibility audit across 9 properties (a web client + 8 marketing sites) — ~120 concrete findings with file:line refs, seve...; the 7.6x floor was Launch-night batch: fix admin delete lockup (a cache layer purge timeout), unblock an API service CI build (ruff lint), kill a frontend l.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (263.1x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">May 11 was the actual launch day. The 240x ceiling on the WCAG audit task is a useful data point: deterministic audit work against a defined standard is where AI leverage maxes out, because the specification is external and the checker is mechanical. Launch-night fixes ran lower-leverage because every change needed live-system verification.</p>
<p class="mb-4 font-light font-serif">Across the 19 tasks, the day produced roughly 11.8 weeks of senior-engineer-equivalent throughput in 12.7 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[How I Built AccelaStudy AI]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-11-how-i-built-accelastudy-ai.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-11-how-i-built-accelastudy-ai.html</id>
    <updated>2026-05-11T12:00:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Today I launched AccelaStudy AI: what I believe is the most advanced, most capable adaptive learning platform ever created. That&#39;s a bold claim but one I believe will quickly be proven as people start using it to study.</p>
<p class="mb-4 font-light font-serif">The technology behind AccelaStudy AI is called <a href="https://avian.renkara.com/index.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AVIAN — Adaptive Vector Intelligence and Network</a> — and is protected by 33 patent filings describing 192 distinct inventions. The filings run nearly 1,000 pages of documentation, with 263 technical figures, 733 claims, grouped into 36 branded platform clusters spanning a 13-tier pipeline architecture. No competitor has anything remotely like it.</p>
<p class="mb-4 font-light font-serif">I built all of this in 80 days. Solo. Bootstrapped. $0 raised, no team, no co-founders. My only collaborator was Anthropic&#39;s Claude.</p>
<p class="mb-4 font-light font-serif">This post is the story of how that happened.</p>
<h2 id="the-problem">The Problem</h2>
<p class="mb-4 font-light font-serif">I&#39;ve worn many hats in my career but the one I wear most often these days is &quot;Solution Architect,&quot; which is a somewhat generic term that means I build infrastructure in the cloud, usually the Amazon Web Services (AWS) cloud. I have passed most of the AWS certification exams, some multiple times, but in September 2025 I was preparing to study for the <a href="https://aws.amazon.com/certification/certified-advanced-networking-specialty/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Advanced Networking Specialty (ANS)</a> exam. ANS is widely considered the most difficult of the AWS certifications to pass.</p>
<p class="mb-4 font-light font-serif">For other certifications in the past, I&#39;ve used A Cloud Guru (acquired by Pluralsight), Udemy, and other sites that are supposed to help you prepare for the exam. I hate these sites. They are all the same. An exam has a syllabus and most of the topics have videos and transcripts of the videos and simple, static quizzes at the end of each topic. After slogging through all of this, there are usually 1–3 practice exams that, assuming you pass, indicate you are ready for the real exam.</p>
<p class="mb-4 font-light font-serif">Garbage.</p>
<p class="mb-4 font-light font-serif">The first issue I have is the &quot;one size fits all&quot; curriculum model. Every class treats every student the same. And since they have to teach to the lowest common denominator, they assume you are coming at the exam with minimal prior knowledge. So they all start with refreshers on prerequisite material. You can skip these usually, but maybe I want a refresher and just don&#39;t need the WHOLE thing — just some of the more esoteric details. No way to get a refresher on just the details you need refreshed.</p>
<p class="mb-4 font-light font-serif">The primary course material is grouped into fairly broad topics. This means the course itself is largely like the refreshers: new material coupled with basic material many students already know. So you end up watching a 30-minute video to get 2 minutes of new knowledge that you need for the exam. It&#39;s not possible to skip around or you might miss the new material. To help with this, the video can often be watched at 1.5x or 2x speed. That&#39;s an awesome experience: having to focus intently on someone speaking super fast to make sure you don&#39;t miss the new material. Exhausting. The transcripts aren&#39;t much better. They are usually just blobs of text dumped out by a speech-to-text utility with zero formatting, no headers, nothing.</p>
<p class="mb-4 font-light font-serif">Some topics have practice &quot;quizzes&quot; which are essentially a handful of multiple choice questions to answer. There is only one practice quiz and it never changes, so once you&#39;ve taken it, that&#39;s it. You can take it again but it&#39;s the same questions with, maybe, the answers sorted into a different order than the first attempt. Woo!</p>
<p class="mb-4 font-light font-serif">Some topics have &quot;labs&quot; which is where they give you some instructions and then you go log into your own live cloud account and muck around following the instructions and hope you don&#39;t mess anything up or accidentally run up a bunch of charges. I&#39;ve never done a lab. I understand the value of doing things for real, but I&#39;m not messing around in my own cloud account. Forget it.</p>
<p class="mb-4 font-light font-serif">And the practice exams — these are arguably the most useful feature of these online courses. A good one simulates the format of the exam and its duration. I thought the A Cloud Guru (<a href="https://www.pluralsight.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Pluralsight</a>) ones were pretty good until I passed all three available exams with near-perfect scores and then went on to fail the real exam. $300 down the drain and a serious shot to my confidence. The main problem is that these exams use a fixed battery of questions and you end up learning their practice exam and not the real material being tested.</p>
<p class="mb-4 font-light font-serif">I was not looking forward to studying for ANS with any of these sites.</p>
<h2 id="the-idea">The Idea</h2>
<p class="mb-4 font-light font-serif">I had been thinking about building my own certification prep site for awhile. I figured if I was frustrated with the existing options, others were too. I was using Sonnet 4.5 regularly to write code and was able to have it put together a basic site in a few hours. There were two major obstacles to launching a real site, though.</p>
<p class="mb-4 font-light font-serif">One, how do I make mine better and truly useful? It wouldn&#39;t be sufficient to just put out a site that was the same as the competition. It had to be measurably better. Really, it had to be revolutionary.</p>
<p class="mb-4 font-light font-serif">Two, how do I create all of that content for users to study? Even one exam required a massive amount of content, and while I like writing, no way I had the free time to write the code AND write the content. And I didn&#39;t know all of it, either. I needed content for exams I hadn&#39;t passed yet.</p>
<p class="mb-4 font-light font-serif">Fortunately, I already knew all about creating educational software. The original AccelaStudy was the first flashcard app in the App Store when it opened in July 2008. That AccelaStudy was basically just foreign-language vocabulary flashcards: &quot;Hello&quot; on one side, &quot;Hola&quot; on the other. But I didn&#39;t know all of the languages (Spanish, French, German, Italian, and Turkish on opening day), so how did I generate the translations? I didn&#39;t. I hired professors at the premier foreign-language university in the world — <a href="https://catalog24byu.catalog.prod.coursedog.com/pages/department-1234" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Brigham Young University</a> in Utah — to do the translations. Then I simply imported them into the app. For the native speaker audio files, I hired professional voiceover artists who spoke each language natively. That was a lot of fun, actually. The voice for Japanese was done by the same actor who does voiceovers in TV commercials for Mercedes-Benz.</p>
<p class="mb-4 font-light font-serif">But this content was on a different scale. Pluralsight has over 2,500 expert authors creating their technical courses. Of course, keeping 2,500 authors around is very expensive, and probably part of the reason Pluralsight is <a href="https://nedinthecloud.com/2024/07/06/pluralsight-problems/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">struggling financially</a>. I had no money for content authors, so I needed a different solution.</p>
<h2 id="content-galore">Content Galore</h2>
<p class="mb-4 font-light font-serif">For quite awhile, myself and all of my professional colleagues had been using ChatGPT for infrastructure questions. For example: &quot;What are the options for encrypting an S3 bucket?&quot; or &quot;I&#39;m getting a 502 error on a new web service I&#39;m running in Fargate. What could be the problem?&quot; I realized that the LLM&#39;s training data included every possible detail about every resource, every service that you could use in the AWS cloud.</p>
<p class="mb-4 font-light font-serif">Or be tested on in an AWS certification exam.</p>
<p class="mb-4 font-light font-serif">A few test prompts later — &quot;Tell me everything I need to know about S3 buckets to pass the Solutions Architect Professional exam&quot; — and I knew that AI had all the knowledge I needed to generate content for the site.</p>
<p class="mb-4 font-light font-serif">But how to handle hallucinations? How to make sure the content is accurate? These are tough problems with LLMs today. The solution to these issues is quite complicated but achievable. The solution that evolved became part of the AVIAN Origin and AVIAN Preflight patents, two of the 33 AVIAN patent filings, in the Content Creation architectural tier. AVIAN can generate the entire content of an AWS certification course in about 8 hours for around $100. And if the exam changes? A new version can be ready in 30 minutes.</p>
<p class="mb-4 font-light font-serif">But I&#39;m getting ahead of myself.</p>
<h2 id="adaptive-learning-solved">Adaptive Learning, Solved</h2>
<p class="mb-4 font-light font-serif">For over 10 years, I had been working on an adaptive learning patent. It started out as an idea to improve on the <a href="https://subjectguides.york.ac.uk/study-revision/leitner-system" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Leitner spaced-repetition algorithm</a>. That improvement proved unpatentable but it was a real improvement, and it shipped in AccelaStudy years ago. So I kept working on it. By 2020 or so, I had a draft of <em>The AccelaStudy Method</em>, which captured most of the ideas I had around adaptive learning. Alas, that document was heavy on the concepts and light on the technical implementation. Not patentable.</p>
<p class="mb-4 font-light font-serif">Then, last September, when I was getting started on a proof of concept for what would eventually become AccelaStudy AI, I entered a fateful prompt:</p>
<blockquote><p class="mb-4 font-light font-serif">I&#39;m working on an educational site and I&#39;ve got some ideas in this document, <code>accelastudy_method.md</code>. What would it take to make this a real patent?</p></blockquote>
<p class="mb-4 font-light font-serif">And so it began. What started off as a single Markdown file describing an array of ideas for making online learning adaptive and personalized became 33 separate patents, not just the one I thought I had. The first patent was filed in October 2025, another 25 in March and April 2026, and 7 more in early May.</p>
<p class="mb-4 font-light font-serif">One of the key aspects of the patent portfolio is that it applies to ANYTHING that can be learned. As long as the AI has a deep knowledge of the subject, curriculum can be created. And given that the training data for OpenAI and Anthropic models (and Grok and Gemini and others) includes essentially every document ever written by humans, the AI has far deeper knowledge than even the most experienced content author.</p>
<h2 id="code-warrior">Code Warrior</h2>
<p class="mb-4 font-light font-serif">On February 16, 2026, it was time to build it. The patents were mostly done, but I wanted to ensure they worked before I went to all the trouble and expense of filing them.</p>
<p class="mb-4 font-light font-serif">The first task was to build the AVIAN engine itself. This meant taking all of that patent documentation and extracting a system architecture, and then an implementation and testing plan. That work was done in an afternoon.</p>
<p class="mb-4 font-light font-serif">The next several weeks were a sustained sprint of building, in roughly this order: the engine, the content synthesis pipeline, the web application, the API, the admin tooling, the marketing site, the press kit, the iOS app, the desktop apps for macOS / Windows / Linux, and the entire supporting infrastructure to run all of it. Then, in parallel with the customer-facing product, I built out a fleet of internal tools to actually operate the company: a CMS, an email client, a CRM, an accounting system, a calendar, an analytics platform, a service-health monitor, a leverage-metrics tracker, and more than a dozen others. Each one is a real production application. Each one was 100% built with Claude Code.</p>
<p class="mb-4 font-light font-serif">I&#39;ll write a longer technical post about the architecture choices that made this pace possible. But the single biggest workflow unlock was something simple and structural: I used 57 nested <code>CLAUDE.md</code> constraint files as a per-repo knowledge graph that Claude Code walks before any edit. Plan mode and parallel sub-agents rode on top of that. It felt like handing Claude a map of the entire monorepo. Every constraint I would have wanted to enforce as a code reviewer — coding style, architectural rules, naming conventions, testing requirements, what NOT to touch — lives in those files. The agent reads them. The agent respects them.</p>
<p class="mb-4 font-light font-serif">I ran 2–3 concurrent Claude Max subscriptions for most of the build window so I could fan out work across multiple repos at once. I typically had 10-12 terminals up, each doing work in a different repo. Through the API, the content-synthesis pipeline ran independently — various Anthropic models orchestrated in sequence to yield the most accurate and comprehensive course material. That synthesis spend lives in a separate stack of credit-recharge invoices: 80+ at roughly $50 each, $4,000+ documented. The coding spend through Claude Code lives in <a href="https://renkara.com/tools/fulcrum.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Fulcrum</a>, the leverage tracker, which is itself one of the <a href="https://renkara.com/tools.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">19 internal tools</a> I built along the way.</p>
<h2 id="by-the-numbers">By the Numbers</h2>
<p class="mb-4 font-light font-serif">Eighty days. Solo. The tracker captured every non-trivial task as a row: estimated human-equivalent hours, actual Claude wall-clock minutes, tokens consumed, leverage factor, supervisory leverage. Here is what 80 days of compressed work looks like:</p>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Days of build</td>
      <td>80 (Feb 23 → May 13, 2026)</td>
    </tr>
    <tr>
      <td>Measured tasks</td>
      <td>2,115</td>
    </tr>
    <tr>
      <td>Human-equivalent work hours</td>
      <td>~50,319</td>
    </tr>
    <tr>
      <td><strong>Human-equivalent work-years</strong></td>
      <td><strong>24.2</strong></td>
    </tr>
    <tr>
      <td>Claude wall-clock</td>
      <td>~1,061 hours</td>
    </tr>
    <tr>
      <td>My supervisory time (writing prompts)</td>
      <td>~148 hours</td>
    </tr>
    <tr>
      <td>Average task leverage</td>
      <td>51.5×</td>
    </tr>
    <tr>
      <td>Average supervisory leverage (personal ROI)</td>
      <td>432.4×</td>
    </tr>
    <tr>
      <td>Maximum single-task leverage</td>
      <td>240×</td>
    </tr>
    <tr>
      <td>Claude Code tokens consumed</td>
      <td>~360 million</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The full record set has been published daily since early April at <a href="https://charlessieg.com/leverage/all/index.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">charlessieg.com/leverage/all</a>. Every task, every estimate, every minute of Claude wall-clock. Nothing redacted. Each day&#39;s post also includes an analytical writeup of which task patterns produced the highest leverage and which were still gated by human review.</p>
<p class="mb-4 font-light font-serif">And here is what those 24 work-years of compressed effort produced:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>AccelaStudy AI</strong> — the customer product. Over 900 certifications, standardized tests, and other courses covered, 1.4 million synthesized questions, sub-2-millisecond knowledge updates, root-cause prerequisite-gap detection, pass-probability forecasting before you spend hundreds of dollars on an exam voucher. Live on the web today at <a href="https://accelastudy.ai" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">accelastudy.ai</a>; native iOS / iPadOS / macOS / Windows / Linux apps follow on June 1.</li>
<li><strong>AVIAN</strong> — the patent portfolio behind it. 33 USPTO filings, 192 distinct inventions, 733 claims (68 independent + 665 dependent), 263 technical figures, organized into 36 platform clusters across 13 pipeline tiers. <a href="https://avian.renkara.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">avian.renkara.com</a>, also built by Claude.</li>
<li><strong>74 repositories</strong>, 1.27 million lines of code, 25,000+ automated tests.</li>
<li><strong>19 production Renkara internal tools</strong> — listed publicly at <a href="https://renkara.com/tools.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">renkara.com/tools</a>, with each tool&#39;s page tagged &quot;100% Built by Claude&quot; alongside the commercial SaaS category it replaces: Narrative (static site generator), Courier (email client), Tribe (CRM), Trellis (cloud accounting), Vigil (uptime monitoring), Cadence (calendar), Pulse (web analytics), Fulcrum (leverage tracker), Docket (issue tracking), Chronicle (observability), Beacon (marketing automation), Herald (newsletter platform), and seven more. Together they expose <strong>800+ MCP tools</strong> to any Claude session — so the entire fleet is agent-addressable through Anthropic&#39;s own protocol, not just human-addressable. That fleet is the operational backbone that lets one person run a 74-repo monorepo.</li>
<li><strong>21 production websites</strong> — 16 AVIAN/Renkara properties plus four fictional in-world sites and the book&#39;s own site for the novel below, all generated by Narrative.</li>
<li><strong>19,000+ pages of Markdown documentation</strong> — 3,513 files, 4.85 million words. Including the 57 nested <code>CLAUDE.md</code> constraint files.</li>
</ul>
<h2 id="fulcrum-and-other-side-quests">Fulcrum, and Other Side Quests</h2>
<p class="mb-4 font-light font-serif">Fulcrum, the leverage tracker, deserves its own paragraph. As I was starting the build I realized that nobody had ever produced a longitudinal dataset on a single solo developer&#39;s actual productivity with an AI coding agent. Most &quot;AI productivity&quot; claims are marketing. I wanted real data — task by task, hour by hour, dollar by dollar — and I wanted it public. So I built <a href="https://renkara.com/tools/fulcrum.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Fulcrum</a>. It records every non-trivial task as a row, computes leverage factor and supervisory ROI per task, and publishes a daily blog post with analytical commentary. As of today: 2,115 records, 51.5× weighted leverage, 432.4× supervisory ROI, 24.2 work-years compressed into 80 calendar days. If anyone wants to challenge the numbers, the records are there.</p>
<p class="mb-4 font-light font-serif">The other side quest is a novel.</p>
<p class="mb-4 font-light font-serif">In parallel with the AVIAN build, I co-wrote a 67,000-word literary novel with Claude called <a href="https://the-deferral.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600"><em>The Deferral</em></a>. As part of the world-building, Claude designed and built four in-world fictional company websites — <a href="https://strataforge-robotics.com/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Strataforge Robotics</a>, <a href="https://luthan-dynamics.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Luthan Dynamics</a>, <a href="https://elysium-atelier.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Elysium Atelier</a>, and <a href="https://mercer-institute.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">MIDAS</a> — each with its own brand identity and full marketing copy, plus the book&#39;s own site at <a href="https://the-deferral.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">the-deferral.com</a>. We even wrote a <a href="https://strataforge-robotics.com/engram-fabric.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">fake patent</a> to deepen the world. The novel announcement and a behind-the-scenes writeup live <a href="https://charlessieg.com/posts/2026/2026-04-02-announcing-the-deferral.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">here</a>. Total wall-clock cost: a side hobby on weekends. The point: this isn&#39;t just about code. Working with Claude expands what one person can attempt across every creative discipline at once.</p>
<h2 id="accessibility">Accessibility</h2>
<p class="mb-4 font-light font-serif">Most software fails accessibility. I didn&#39;t want AccelaStudy AI to be most software.</p>
<p class="mb-4 font-light font-serif">In the final weeks before launch I ran a series of <a href="https://www.w3.org/TR/WCAG21/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">WCAG 2.1 AA</a> audits across the web client and all 16 marketing-site properties — a deterministic Python checker plus a parallel LLM-judgment phase. The first deep audit found 123 findings, with 13 P0 blockers. I then dispatched eight parallel Claude Code sub-agents to fix them in the order an accessibility consultant would prioritize them: token contrast, focus management, ARIA wiring, keyboard navigation, focus traps, animation guards, touch targets, document titles, modal labelling, custom tablists, FAQ semantic structure, and the long tail of smaller issues. Across the fleet of 56 UI repos, the final sweep cleared 2,460 HIGH findings, 2,553 MEDIUM, and a long tail of LOW findings.</p>
<p class="mb-4 font-light font-serif">This work is invisible to most users. But it is the entire experience for users who depend on screen readers, who navigate by keyboard only, who need reduced motion, who use voice control. There is no chance I could have manually audited 16 marketing sites + a complex React SPA + a Swift iOS app + four desktop builds for full WCAG 2.1 AA compliance in a week. With Claude Code, it was tightly scoped, parallelizable, and verifiable. The deterministic checker is itself open-source, lives in the monorepo, and runs on every CI build.</p>
<p class="mb-4 font-light font-serif">That last detail matters. The audits are reproducible. Anyone can rerun them.</p>
<h2 id="built-with-claude">Built with Claude</h2>
<p class="mb-4 font-light font-serif">I want to be honest about what this actually was.</p>
<p class="mb-4 font-light font-serif">I didn&#39;t write a single line of production code in 80 days. I wrote prompts, I wrote <code>CLAUDE.md</code> constraint files, I wrote <a href="https://martinfowler.com/bliki/ArchitectureDecisionRecord.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">architecture decision records</a>, I reviewed pull requests, I made judgment calls about what to build next and what to defer. Claude wrote the code. Claude helped me turn my ideas into patents and did the grunt work of hardening the language, working examples, constructing diagrams, and checking the math. Claude wrote the marketing copy (with my voice). Claude wrote the documentation. Claude designed the UIs. Claude wrote the synthesis pipeline that wrote the learning content. Claude wrote the leverage tracker that documented Claude writing everything else.</p>
<p class="mb-4 font-light font-serif">A few specific observations from the 80 days, for anyone curious about what working at this scale with Claude is actually like:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Plan mode is the highest-leverage feature</strong> for any change touching more than three files. It surfaces dependency cycles and forces explicit reasoning about ordering. Twice it caught a circular import my own static analysis had missed.</li>
<li><strong><code>CLAUDE.md</code> constraint files are dramatically underused.</strong> 57 of them across 74 repos formed a knowledge graph the agent navigated before any edit. The agent&#39;s adherence to nuanced architectural rules tracked almost perfectly with whether those rules were written down. If a rule wasn&#39;t in a <code>CLAUDE.md</code> file, it might as well not have existed.</li>
<li><strong>Parallel sub-agents change the work model.</strong> For the synthesis pipeline, three or four sub-agents could fan out across distinct learning domains and produce independent drafts in 10 minutes. The bottleneck moves from &quot;writing the content&quot; to &quot;specifying what the content should be.&quot;</li>
<li><strong>Hooks reduce approval-cycle friction more than any other optimization.</strong> A small <code>settings.json</code> hook that runs my test suite after every edit saved an enormous amount of manual cycling.</li>
</ul>
<p class="mb-4 font-light font-serif">AccelaStudy AI is, in the end, an incredible product, and I didn&#39;t write a single line of its code. It is Claude&#39;s masterpiece. I am the operator who pointed the model at the target.</p>
<h2 id="create-like-a-god-command-like-a-king-work-like-a-machine">&quot;Create like a god; command like a king; work like a machine.&quot;</h2>
<p class="mb-4 font-light font-serif">This philosophy comes from the famous Romanian sculptor <a href="https://en.wikiquote.org/wiki/Constantin_Brâncuși" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Constantin Brâncuși</a> and is what I now live by.</p>
<p class="mb-4 font-light font-serif">Claude Code has given me the power of creation, to transform world-changing ideas into stunning reality.</p>
<p class="mb-4 font-light font-serif">Claude followed command after command after command, over 2,000 of them, tirelessly working to execute my vision.</p>
<p class="mb-4 font-light font-serif">However, I did work like a machine.</p>
<p class="mb-4 font-light font-serif">In my favorite scene from Jurassic Park, John Hammond says memorably that <a href="https://www.youtube.com/watch?v=Z3oVUmfKHNE" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">&quot;creation is an act of sheer will&quot;</a>. Delivering AccelaStudy AI, even with the work being done almost entirely by Claude Code, required the mental resolve and determination to sit at my desk an average of 120+ hours a week for almost 12 weeks, prompting Claude along, reviewing the work. That left only a handful of hours a day for sleep, eating, exercising, and spending time with family and friends. I should mention that I also worked a full-time job during 8 of those daily hours.</p>
<p class="mb-4 font-light font-serif">It was my deadline, optimistically set early on when it seemed like I&#39;d be done in no time at Claude Code pace. But, like any project that has to go to production, the <a href="https://en.wikipedia.org/wiki/Pareto_principle" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">80/20 rule</a> applies and it was clearly evident in this effort. It&#39;s the kind of ballooning that happens when the &quot;user sign up&quot; feature expands to include social media sign-ups, forgot password and MFA flows, and regulatory account closure requirements. In the end, even with all the hours, I still had to move the launch by 3 weeks. But it did launch.</p>
<h2 id="giving-back">Giving Back</h2>
<p class="mb-4 font-light font-serif">Middle school and high school curriculum is free. For students. For schools. For homeschoolers. For anyone teaching kids who deserve adaptive, personalized learning without a paywall. The K-12 curriculum rolls out across summer and fall 2026, available to any student, school, or family at no cost. Pass-probability forecasting, root-cause gap detection, real adaptive sequencing — at no cost, ever, full stop.</p>
<p class="mb-4 font-light font-serif">Adaptive learning shouldn&#39;t be a luxury good. The kids whose families can afford $4,000 tutors have always had the edge over the kids whose families can&#39;t. AccelaStudy AI doesn&#39;t know what a family&#39;s bank balance looks like, and that&#39;s the point.</p>
<p class="mb-4 font-light font-serif">The paid products fund the free K-12 work. We are launching with professional certifications to kickstart revenue. The AP catalog, AccelaStudy AI Languages, AccelaStudy AI English (IELTS + TOEFL, coming this summer), and the graduate-and-professional tests (GRE, GMAT, MCAT, and LSAT, coming in October) are all paid products. The college-entrance tests (SAT, ACT, PSAT) may also go free — that call is still open.</p>
<p class="mb-4 font-light font-serif">A solo founder, working with Claude, can build all of this in 80 days. The implication for what the rest of us — teachers, students, families — can attempt is what I want people to take from this story.</p>
<p class="mb-4 font-light font-serif">The ceiling moved. Look up.</p>
<hr>
<p class="mb-4 font-light font-serif"><em>Charles Sieg is the founder of Renkara Media Group. AccelaStudy AI is live at <a href="https://accelastudy.ai" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">accelastudy.ai</a>. The full daily leverage dataset is public at <a href="https://charlessieg.com/leverage" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">charlessieg.com/leverage</a>. The 19 internal Renkara tools, each tagged &quot;100% Built by Claude,&quot; are listed at <a href="https://renkara.com/tools.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">renkara.com/tools</a>. The AVIAN patent portfolio summary lives at <a href="https://avian.renkara.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">avian.renkara.com</a>.</em></p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 10, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-10-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-10-leverage-record.html</id>
    <updated>2026-05-10T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-seven tasks. May 10, 2026 weighted to 21.3x leverage across 524.0 human-equivalent hours in 1,478 Claude-minutes. The day was a pre-launch sweep across compliance and security remediation, audit-driven cleanups, press-kit asset regeneration, transactional email template overhauls, sister-site internationalization, and launch-teaser polish. Supervisory leverage closed at 251.5x.</p>
<p class="mb-4 font-light font-serif">13.1 weeks of human-equivalent throughput in 24.6 hours of Claude wall-clock. The 68.6x ceiling came from Compliance HIGH remediation: bumped a cloud database cluster RDS retention 1d→7d, removed localhost from an admin service prod CORS, added auth to 7 unauth anomalies endpoints i...; the 2.2x floor sat at Pre-launch calibration iteration: diagnosed v11 inverse-formula regression, designed and tested asymmetric-sigma fixes (v12, v13) via 12-journey a professional cert sweeps, reve....</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Compliance HIGH remediation: bumped a cloud database cluster RDS retention 1d→7d, removed localhost from an admin service prod CORS, added auth to 7 unauth anomalies endpoints in an admin tool (421 tests pass), wrote 1066-line Incident Response Plan + 915-line Disaster Recovery Plan (12 sections each with Mermaid di...</td>
      <td>32.0h</td>
      <td>28m</td>
      <td>4m</td>
      <td>68.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Audit findings remediation: BLOCKER fixes (an onboarding service test threshold + 21 orphan adjacency entries removed), CRITICAL #2 fix (HttpOnly refresh-cookie + in-memory tokenStore across an auth service + a web client + a desktop client, 540 backend tests + 212 frontend tests pass), an auth service coverage 71→7...</td>
      <td>120.0h</td>
      <td>110m</td>
      <td>10m</td>
      <td>65.5x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Run all 9 an inference engine audits (canonical, ecosystem inventory, content, accessibility, health-check, security, documentation, compliance, full-readiness) — 7 reports written to the monorepo audits/reports/</td>
      <td>80.0h</td>
      <td>95m</td>
      <td>1m</td>
      <td>50.5x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>a learning platform press-kit features 1/2/4/5/6: mastery seal, transfer-credit banner, root-cause diagnosis modal+endpoint, Monte Carlo distribution chart, past-readiness trend chart+endpoint — 5 UI components, 2 engine endpoints, 4 readiness helpers, 57 tests, 5 verified captures</td>
      <td>50.0h</td>
      <td>75m</td>
      <td>3m</td>
      <td>40.0x</td>
      <td>1000.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fix all HIGH/MEDIUM/LOW findings from an inference engine documentation audit (2026-05-10): README Features/Tech sections, stale CHANGELOGs, missing CI/CD sections, cross-reference links, missing docs for libs</td>
      <td>20.0h</td>
      <td>45m</td>
      <td>3m</td>
      <td>26.7x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Post-practice-exam autopilot remediation: submit_exam auto-injects wrong-node IDs into sequencing remediation queue; new POST /entities/{id}/remediation-session endpoint; ExamResults rewritten with Start-targeted-study CTA + See-why diagnosis hook on weakest gap; 19 tests (11 BE + 8 FE) all passing, no regressions</td>
      <td>14.0h</td>
      <td>32m</td>
      <td>2m</td>
      <td>26.2x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Roll the new email design across the remaining 22 transactional templates: welcome, invitation, comp-welcome, account-update/closed/deleted, daily-study-reminder, streak-at-risk, elo-decay-warning, elo-level-achieved, course-completed, exam-passed, weekly-progress, win-back, 5 exam-reminders (30d/14d/7d/3d/1d), recr...</td>
      <td>11.0h</td>
      <td>28m</td>
      <td>2m</td>
      <td>23.6x</td>
      <td>330.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Generate full launch demo: lived-in Charles a professional cert dashboard via engine seeding + DEV auth bypass, 14 retina press-kit screenshots, 64 site feature-mock screenshots (32 labels × 2 themes), ElevenLabs narration, Ken Burns 90-sec demo video, brand-styled lower-thirds, press-kit zip wired with assets, webs...</td>
      <td>14.0h</td>
      <td>40m</td>
      <td>5m</td>
      <td>21.0x</td>
      <td>168.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Rebuild shared feature page template Supernova-style: strip fake browser chrome (red/yellow/green dot row + URL chip), move hero shot below H1/subtitle/CTA at full container width, pair each how-it-works step crop inline with its paragraph. Add new feature-shot CSS class (rounded + soft elevation + theme-aware light...</td>
      <td>7.0h</td>
      <td>22m</td>
      <td>2m</td>
      <td>19.1x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Press-kit full sweep: 124 PNGs regenerated (62 slugs × 2 themes), 4 new onboarding heroes (resume-dropzone with new drag handlers, credential-mapping preview route, calibration-quiz, dashboard-pre-credited), Beat-0 added to remediation video (exam-finishing → submit → results → breakdown → gaps → plan → session), 68...</td>
      <td>30.0h</td>
      <td>95m</td>
      <td>5m</td>
      <td>18.9x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Remediation video + plan-preview modal + ExamReview fix + delete-entity completeness audit &amp; fix (engine multi-layer purge + admin cascade) — RemediationPlanModal, Exam.tsx review payload, target<em>concepts endpoint extension, ExamAttemptRepository.delete</em>for_entity, multi-repo commits + pushes, 22s remediation-loop.m...</td>
      <td>22.0h</td>
      <td>70m</td>
      <td>4m</td>
      <td>18.9x</td>
      <td>330.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Launch-night polish batch: cross-domain field rename, resume dropzone drag handlers, trendline animation boost, ready-to-test button nowrap, lab cards line-clamp removal, micro-challenge goal cutoff, minimal-pair scoring + prompt rewrite, error-detection JSON pretty-print + hljs syntax highlighting, scenario rehype-...</td>
      <td>18.0h</td>
      <td>60m</td>
      <td>6m</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Brand pass on a sister marketing site (always a learning platform, never a learning platform alone), repricing to $29/$23 from $59/$47 across site.yml, content stubs, both templates, README, comparison tables, FAQs; hero copy centered with <br> break before Adaptive, side-gradient rebalanced for centered text.</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>a sister marketing site i18n full rollout (Phases 2-5 + 1B mechanism + a newsletter platform wire-up): 7 LLM-generated translations (hi, zh, es, ar, pt, ko, ja) of ~150 strings each across home + pricing; per-language content stubs; language picker in shared header gated on Custom.Languages; hreflang alternates with...</td>
      <td>18.0h</td>
      <td>75m</td>
      <td>5m</td>
      <td>14.4x</td>
      <td>216.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Shared overlay i18n full rollout via tiered approach: Tier A (full conditional i18n on about/accessibility/platforms/faq with translations across 7 languages, ~400 string-language pairs), Tier B (chrome i18n on features/feature, features/activities, blog, post -- per-feature/per-post content stays English), Tier C (...</td>
      <td>14.0h</td>
      <td>60m</td>
      <td>4m</td>
      <td>14.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>a notification service email template overhaul: convert 4 an HTML design tool-generated HTML designs (Tailwind CDN + JS, won&#39;t render in mail clients) into email-safe table-based HTML with inline CSS, system-font fallbacks, dark-mode @media swaps, Outlook VML CTAs, mobile-responsive media query, plain-text alternati...</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>13.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Move Whats New release notes out of the SPA bundle: new GET /api/v1/whats-new route in an API service proxies markdown from an assets CDN/whats-new.md (engine content bucket) with 60s cache; new clients/a web client/src/api/whatsNew.ts client; rewrote WhatsNewPanel to use a frontend library Query (refetches on every...</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>13.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Fleet-wide nav + CSS + content sweep: (1) hide desktop CTA on &lt;lg viewport so mobile right-toolbar fits + hamburger becomes hit-targetable; (2) add .dark .bg-gradient-accent variant with lifted blues; (3) replace .skip-link left:-9999px hack with WCAG clip-path:inset(50%) visually-hidden pattern (kills stray Skip-to...</td>
      <td>6.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>12.9x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Generate two missing daily leverage blog posts (May 8 + May 9): fetch records from Leverage Manager API, sanitize 48 task descriptions for public disclosure, write Python sanitization pass with ~80 replacement rules, build markdown posts with task tables + aggregate stats + analysis sections, update about-page post...</td>
      <td>6.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>12.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Four a web client UI fixes: (1) AnalyticsPanel restack — Accuracy/Drift/Recs stacked left, wider Learning Style Fingerprint right with wrapping legend labels; (2) added productLabel slot to design-system Brand and wired Certs badge into AppShell matching marketing-site wordmark pattern; (3) fixed build-catalog doubl...</td>
      <td>6.0h</td>
      <td>32m</td>
      <td>4m</td>
      <td>11.2x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>a marketing site launch teaser: add 4-cell DD:HH:MM:SS countdown clock to midnight Pacific (2026-05-11T00:00:00-07:00) above the teaser video; deploy to production (clean rebuild + S3 sync + CloudFront invalidation), then restore staging to real home page; push websites repo</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>10.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Email template polish + a payment provider PDF invoice capture wired through a billing service. Templates: drop Manage Notifications link, swap billing email to a marketing site, rebuild receipt as edge-to-edge full-width band, add an inference engine bird mark to header. Backend: alembic migration 005 adds invoice_...</td>
      <td>5.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>10.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Fleet sweep: disable pricing/subscribe CTAs across all 6 sister sites (a standardized test/a standardized test/ap/test-prep/english/languages) — pricing.jinja Start-Monthly/Annual/Product CTAs and home Get-Started buttons all swapped to /#signup Notify-Me-at-Launch; hide Platforms entry from footer Product column on...</td>
      <td>5.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>a sister marketing site i18n Phase 1A: extracted ~150 user-visible strings across home + pricing into i18n/en.jinja, refactored both templates to load via Jinja {% import %} (since {% include %} doesnt propagate set), renamed Jinja-conflicting items-&gt;entries, added bilingual draft-translation banner gated on non-Eng...</td>
      <td>4.0h</td>
      <td>28m</td>
      <td>6m</td>
      <td>8.6x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Hide placeholder testimonials across all a learning platform sister sites — audit identified a standardized test/ap/test-prep with ungated TESTIMONIALS sections (a standardized test/english/aces/enterprise clean; a marketing site already had show<em>social</em>proof=false). Wrapped each section in {% if false %}, parallel-...</td>
      <td>2.5h</td>
      <td>18m</td>
      <td>1m</td>
      <td>8.3x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>9-beat launch press-kit capture: audited decoy playwright code (16 page objects + headless_runner against current app-web — 71% selectors stale), wrote smart engine seeder with peek-session correct-answer discovery (150 interactions, 69% accuracy), wrote 700-line Playwright capture script with localStorage planting...</td>
      <td>14.0h</td>
      <td>130m</td>
      <td>25m</td>
      <td>6.5x</td>
      <td>33.6x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Pre-launch calibration iteration: diagnosed v11 inverse-formula regression, designed and tested asymmetric-sigma fixes (v12, v13) via 12-journey a professional cert sweeps, reverted v13 to v12, built + pushed cloud boot cache to S3, committed + deployed v12 to prod via CodePipeline, wrote post-launch entity-embeddin...</td>
      <td>9.0h</td>
      <td>240m</td>
      <td>12m</td>
      <td>2.2x</td>
      <td>45.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>27</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>524.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1478</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>125</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>6,963,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>21.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>251.5x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>13.1</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 68.6x ceiling came from Compliance HIGH remediation: bumped a cloud database cluster RDS retention 1d→7d, removed localhost from an admin service prod CORS, adde...; the 2.2x floor was Pre-launch calibration iteration: diagnosed v11 inverse-formula regression, designed and tested asymmetric-sigma fixes (v12, v13) via 12-.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (251.5x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">May 10 was the final-prep day before web GA. The work clustered tightly: half the tasks were either audit-driven compliance fixes or asset/visual polish for the launch surface, and the other half were i18n + brand-pass rolls across the marketing-site fleet. That bimodal shape produced steady mid-band leverage rather than runaway high or low extremes; the work was real, but well-bounded.</p>
<p class="mb-4 font-light font-serif">Across the 27 tasks, the day produced roughly 13.1 weeks of senior-engineer-equivalent throughput in 24.6 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 9, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-09-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-09-leverage-record.html</id>
    <updated>2026-05-09T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-eight tasks. May 9, 2026 weighted to 26.9x leverage across 632.5 human-equivalent hours in 1,410 Claude-minutes. The day was a pre-launch sweep across iOS web parity, an end-to-end status site stand-up, a fleet-wide accessibility audit fix, an analytics platform overhaul, and a marketing-site canon-swap propagation. Supervisory leverage closed at 223.2x.</p>
<p class="mb-4 font-light font-serif">The volume reflects a launch deadline; 15.8 weeks of human-equivalent throughput in twenty-three and a half hours of Claude wall-clock. The 85.7x ceiling came from an 8-phase mobile rebuild rebuilding the mobile client to match the web client, while the floor in the table sits at 6.7x on a four-tab settings restructure with extensive design-token migration. The middle of the distribution is dominated by accessibility audits, content-pipeline integrity work, and the ground infrastructure for the launch site.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>iOS web-parity rebuild: 8 phases ; phase machine restructure, an app shell+a top-nav component, launch routing fix, HomeView (slim hub), multi-course Dashboard, CoursesView+CourseDetailView, SettingsView split, container/transitions/radius polish</td>
      <td>50.0h</td>
      <td>35m</td>
      <td>8m</td>
      <td>85.7x</td>
      <td>375.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>an analytics platform: date-range fix + SSE-driven realtime ticks + bounce/duration/GeoIP + funnel ordering, attribution models, webhook handlers, CSV export, IP exclusions, public dashboard share</td>
      <td>60.0h</td>
      <td>44m</td>
      <td>6m</td>
      <td>81.8x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>a status site: built and deployed a status site end-to-end ; new clients/a status site SPA (React 19/Vite/TS), a monitoring tool schema + public read API + alembic migration + 12 sanitization tests, admin-service banner.channels JSONB + public banners endpoint,</td>
      <td>80.0h</td>
      <td>70m</td>
      <td>8m</td>
      <td>68.6x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>iOS Help fixes: tab strikethrough fix (overlay alignment), port 40 help guides verbatim from a help-doc source file → a help-doc target file (sidebar+content layout, iPhone sheet), embed 5 legal docs (privacy, terms, accessibility, trademarks,</td>
      <td>24.0h</td>
      <td>22m</td>
      <td>4m</td>
      <td>65.5x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>iOS app facelift: SwiftUI design system port (tokens, typography, 14 components), a brand sans font bundling, a design theme shim, migrate 6 high-traffic views (LoginView, ResultsView, WelcomeView, ProfileView, DashboardView, BugReportView), pbxproj patch, docs</td>
      <td>40.0h</td>
      <td>50m</td>
      <td>6m</td>
      <td>48.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>iOS Settings/Profile/Help web parity: fix sign-in button (a top-nav component overflow on iPhone), build new HelpView (5-tab Overview/FAQ/Guides/WhatsNew/Legal + .help phase + bug-report bridge), refactor ProfileView into hero+4-tab (Profile/Resume/Subscription/Account),</td>
      <td>18.0h</td>
      <td>24m</td>
      <td>5m</td>
      <td>45.0x</td>
      <td>216.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Build reusable static-site Terraform module (S3+OAC+CloudFront+ACM+Route53) with edge-enforced CloudFront-Function an access gate gate, plus english-accelastudy-website root stack (prod imports existing E51I2L5WDXNNS via auto-discovering import.sh, staging fresh-provisions with the gate).</td>
      <td>9.0h</td>
      <td>14m</td>
      <td>4m</td>
      <td>38.6x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Upgrade a language-exam product site (a language-proficiency exam product) to multi-page subscription product site: standalone /pricing/ page with comparison table &amp; FAQ, switched nav to standalone routes, live header CTA, sister-site parity in Custom block, README + CHANGELOG updated. Verified clean build (26 pages,</td>
      <td>5.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>37.5x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Major engine fix + audit expansion. (1) Built a backfill script - deterministic pair<em>id linkage backfill across 234 synthesized domain packages. Drove pair</em>id coverage from 32.3% to 54.1% across 1.29M questions, with the worst cert domains (a professional cert 0.1%-&gt;38.1%, a professional cert, a professional cert,</td>
      <td>16.0h</td>
      <td>28m</td>
      <td>6m</td>
      <td>34.3x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>a status site: round 2 ; closed remaining gaps from initial deploy. a monitoring tool frontend SiteSettingsForm gets public<em>status</em>visible/group/public<em>display</em>name/public<em>description fields; new IncidentDetailModal lets operators set severity/title/public</em>visible and post markdown updates (investigating→identified→mon...</td>
      <td>32.0h</td>
      <td>65m</td>
      <td>2m</td>
      <td>29.5x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>MEDIUM cleanup wave: 9 reduced-motion guards + 8 sr-only utilities + 594 h1-&gt;h2 codemod demotions across 241 files + 50 input-adjacent-label codemod pairings + 5 hand-fixes (BillingPage h1, Blog.jsx h1s, purchase-service globals.css, a legacy product site SCSS sr-only, charlessieg-redesign exemption);</td>
      <td>14.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>28.0x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Fleet-wide a11y fix sweep across 56 UI repos: 2,460 HIGH findings fixed (2,235 via a simulator suite label-pairing codemod + 17 manual + 5 wave-1 activities-react + 59 wave-3 client apps + 136 wave-4 tools fleet + 8 a simulator suite primitives);</td>
      <td>60.0h</td>
      <td>130m</td>
      <td>5m</td>
      <td>27.7x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Final wave: clear remaining 192 HIGH a11y findings ; patched 71 stale cloudops dist HTML files with lang=en (Python sed), dispatched focused subagent to fix 118 of 120 a simulator suite view-level inputs/svgs/clickable-divs (NetworkTopology+PolicyEditor+PacketInspector+ProjectBoard+a top-nav component+30 more dashboard...</td>
      <td>16.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>27.4x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Port web Help Center guide articles to iOS (40 docs, 7 categories) and rebuild Guides tab with sidebar+content layout</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Drafted Making a learning platform Accessible to All across 3 sites ; a personal site (~3500-word technical deep-dive with mermaid wave diagram + 6 reference tables + concrete codebase counts: 2185 TSX/JSX files, 2527 native buttons, 3486 form inputs, 3019 ARIA uses, 1530 aria-labels, 752 aria-hidden, 101 role=button,</td>
      <td>12.0h</td>
      <td>28m</td>
      <td>2m</td>
      <td>25.7x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Drove the a structured-content spec catalog spec audit from 257 LOW (post-prior-pass) to absolute zero across all four severities. Tightened a spec auditor (broadened verb whitelist, fixed cross-domain prefix detection, normalized weight-sum auto-fix to handle any non-100 sum, relaxed cross-domain check to &gt;=1,</td>
      <td>14.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>24.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Refactor CLAUDE.md chain: extract patent checklist, repo map, ADR rules, SSM, domain inventory, synthesis pipeline into subtree files; relocate API keys to mode-600 env file outside prompt</td>
      <td>2.5h</td>
      <td>7m</td>
      <td>3m</td>
      <td>21.4x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Built deterministic Python accessibility-audit checker (15 rules, 56-repo discovery, brace/quote-aware JSX tokeniser, JSON+MD output, mode-aware exit codes); updated accessibility-audit.md with Phase 0 spec citing the script; ran fleet-wide audit (414 HIGH + 2553 MEDIUM identified);</td>
      <td>24.0h</td>
      <td>70m</td>
      <td>4m</td>
      <td>20.6x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Content audit reconciliation: dropped 30 of 40 findings (all 11 CRITICALs + all 14 catalog/canonical MEDIUMs + 5 LOWs). Wrote a dedup script to remap 33 collided exam_code values to vendor-correct codes (a professional cert Plus suite -&gt; a professional cert/a professional cert/a professional cert/a professional cert/a ...</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>2m</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Restructure iOS ProfileView to mirror web Profile 4-tab layout (hero + Profile/Resume/Subscription/Account)</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>an analytics platform last-hour delta on MetricCards (backend + frontend), an admin tool SoundProvider + priority-aware notification/anomaly cues, and tool-specific cues across foundry/chronicle/trellis/herald/meridian/envoy/fulcrum/tribe (plus pre-existing tsc fixes)</td>
      <td>18.0h</td>
      <td>55m</td>
      <td>5m</td>
      <td>19.6x</td>
      <td>216.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Sound effects follow-ups: nuked an inference engine root node_modules + made tools self-contained, Terraform stack lib-pipelines/ provisioning a build service + a CI/CD pipeline for all 6 publishable @avian/* libs (5 imported + new sound-effects), tool-specific cues wired into chirp/courier/vigil/slate/packed</td>
      <td>16.0h</td>
      <td>50m</td>
      <td>4m</td>
      <td>19.2x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Build CoursesView and CourseDetailView for a learning platform iOS app (web parity)</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>8m</td>
      <td>16.4x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Port web legal docs into iOS HelpView ; embed privacy policy, terms, accessibility, trademarks, and credits as scrollable in-app a legal-doc tree node tree; rebuild Legal tab with iPad sidebar and iPhone sheet flow</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>16.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Sound effects fleet rollout: created a shared sound-effects library v0.1.0 standalone package, uploaded 28 mp3s to an assets CDN CDN with CORS, wired SoundProvider into 21 tools (3 needed manual handling, fixed pre-existing TS/JSX errors in cadence/courier/dossier along the way), committed + pushed each tool repo.</td>
      <td>24.0h</td>
      <td>90m</td>
      <td>8m</td>
      <td>16.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>an analytics platform: webhook hardening (require pulse<em>site</em>id, no default fallback) + dedicated 30 req/min webhook rate limit; deployed and verified live</td>
      <td>4.0h</td>
      <td>16m</td>
      <td>2m</td>
      <td>15.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Mode-1 a11y audit on a web client + 6 React libs: 11 HIGH fixes (RemoteBanners aria-live, HelpCenter dialog focus, LabConsole tab pattern, ProgressBar/ExamScoreReport/Sidebar progress+log roles, ProceduralStepSequencing focus-visible, InteractiveMap :focus-visible, BugReportModal dialog semantics,</td>
      <td>12.0h</td>
      <td>55m</td>
      <td>3m</td>
      <td>13.1x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>a marketing site staging: redeploy with an access gate, restore real home page + /platforms/ nav link, remove /vote teaser; ship stage-isolated dist/<stage>/ build directories in narrative CMS so parallel Staging+Production never overwrite each other (3 unit tests, doc updates across 3 repos)</td>
      <td>7.5h</td>
      <td>36m</td>
      <td>4m</td>
      <td>12.5x</td>
      <td>112.5x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Build real SettingsView for iOS app mirroring web settings page (appearance, language, study prefs, voice, accessibility, privacy, about sections)</td>
      <td>3.0h</td>
      <td>15m</td>
      <td>5m</td>
      <td>12.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Migrate a SwiftUI view to an inference engine iOS design system (design tokens, design typography, a button component, a card component, an empty-state component)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>3m</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Rebuild a SwiftUI view to multi-course portfolio matching web Dashboard.tsx</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Migrate a SwiftUI view (1521 lines) to an inference engine iOS design system tokens, typography, and components</td>
      <td>3.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>a marketing site canon-swap propagation: replace hardcoded counts with [[canon:...]] placeholders across press, about, how-it-works, faq, accessibility, pricing, courses, free, 5 feature pages and shared pricing-card partial; fix stale patent counts (27→29 filings, 593/613→637 claims);</td>
      <td>5.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>8.6x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>canon-swap sweep across 7 sister sites: mcat/lsat/ap/test-prep/english (OtherProducts blocks), a corporate site corporate (10 files - patent counts on index/about/ip/timeline/products/dossier/etc), enterprise (activity-formats); fix stale 27/28 filings → 29 + 593/613 claims → 637 + 20→13 activity formats;</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>8.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Activities catalog reorg (default+5 addons across 62 categories) + 4 web bug fixes (data-driven Service Match applicability, Privacy footer link, Bio Profile→Resume, unenroll→autopilot cascade) + Settings prefs gray-out ; three repos committed and pushed</td>
      <td>14.0h</td>
      <td>110m</td>
      <td>18m</td>
      <td>7.6x</td>
      <td>46.7x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>pre-launch staging audit + fixes: add og:image fallback in _metadata.jinja, strip /index.html from canonical URLs, add Exclude/ExcludeWhere collection filters in narrative CMS (4 unit tests), exclude a deferred category + a deferred category categories + 85 child course pages from rendering,</td>
      <td>5.0h</td>
      <td>40m</td>
      <td>2m</td>
      <td>7.5x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Migrate a SwiftUI view (1108 lines) to an inference engine iOS design system ; replace a design theme tokens with design tokens, update typography to design typography presets, replace ad-hoc cards/buttons with a card component/a button component/a badge component/an empty-state component/an inline-alert component,</td>
      <td>3.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>7.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Restructure a SwiftUI view to 4-tab layout (General/Autopilot/Accessibility/Privacy) with Audio section, extended-time toggle, Privacy Policy link, and SoundManager integration</td>
      <td>2.0h</td>
      <td>18m</td>
      <td>5m</td>
      <td>6.7x</td>
      <td>24.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>38</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>632.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1410</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>170</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>6,445,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>223.2x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>15.8</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 85.7x ceiling came from iOS web-parity rebuild: 8 phases ; phase machine restructure, an app shell+a top-nav component,; the 6.7x floor was Restructure a SwiftUI view to 4-tab layout (General/Autopilot/Accessibility/Privacy) with Audio sect.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (223.2x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 38 tasks, the day produced roughly 15.8 weeks of senior-engineer-equivalent throughput in 23.5 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Making AccelaStudy AI Accessible to All]]></title>
    <link href="https://charlessieg.com/articles/making-accelastudy-ai-accessible-to-all.html" />
    <id>https://charlessieg.com/articles/making-accelastudy-ai-accessible-to-all.html</id>
    <updated>2026-05-09T00:00:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Accessibility is the kind of work that gets pushed to the next sprint until something forces the issue. The forcing function for AccelaStudy AI was the launch window. We had fifty-six user-facing repositories across consumer apps, enterprise tools, internal back-office surfaces, and marketing sites, and we had a brand promise that adaptive learning works for every learner. Every learner means every learner; a screen-reader user, a switch-device user, a keyboard-only user, a person magnifying the screen 200%. None of those people care that we built a beautiful adaptive engine if the buttons aren&#39;t reachable, the inputs aren&#39;t labeled, or the focus ring is invisible.</p>
<p class="mb-4 font-light font-serif">This article is the autopsy of one day&#39;s accessibility work. The numbers are real. The patterns are reusable. If you have a JavaScript codebase north of a thousand files and you&#39;ve been treating WCAG as a checklist instead of as engineering, this is the playbook.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#what-fully-accessible-actually-means" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">What "fully accessible" actually means</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-shape-of-the-problem" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The shape of the problem</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-audit-script" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The audit script</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#heuristics-worth-their-weight" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Heuristics worth their weight</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-fix-waves" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The fix waves</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#whats-actually-in-the-codebase-now" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">What's actually in the codebase now</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#patterns-that-did-the-heavy-lifting" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Patterns that did the heavy lifting</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#what-the-script-does-not-check" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">What the script does *not* check</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#what-it-actually-takes" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">What it actually takes</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#continuous-not-episodic" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Continuous, not episodic</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#numbers-i-want-you-to-take-away" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Numbers I want you to take away</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<h2 id="what-fully-accessible-actually-means">What &quot;fully accessible&quot; actually means</h2>
<p class="mb-4 font-light font-serif">Plenty of apps claim to be accessible. Far fewer pass an actual audit. Almost none have an audit that runs in CI and refuses to ship regressions. The difference matters. <strong>WCAG 2.1 Level AA</strong> is a moving target made up of about fifty success criteria; &quot;we tested with VoiceOver once&quot; is not a strategy for staying compliant as a codebase grows.</p>
<p class="mb-4 font-light font-serif">I draw a hard line between three states a codebase can be in:</p>
<table>
  <thead>
    <tr>
      <th>State</th>
      <th>What it means</th>
      <th>What it requires</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Aspirationally accessible</td>
      <td>Some components are good; some aren&#39;t; nobody knows which</td>
      <td>Hope and a styleguide</td>
    </tr>
    <tr>
      <td>Audited accessible</td>
      <td>A scan happened once and findings got fixed</td>
      <td>Discipline for a sprint</td>
    </tr>
    <tr>
      <td>Continuously accessible</td>
      <td>Every commit is gated by a deterministic check; regressions can&#39;t merge</td>
      <td>Engineering, scripts, codemods</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">We were aspirationally accessible. We&#39;re now continuously accessible. That transition required three things: a script that catches regressions deterministically, a codebase pattern library that makes the right thing easy, and a set of codemods that did one-time mass fixes without humans touching three thousand files by hand.</p>
<h2 id="the-shape-of-the-problem">The shape of the problem</h2>
<p class="mb-4 font-light font-serif">AccelaStudy AI is one product in a fleet. The fleet shares a design system, a console-simulator library, an activities library, an authentication shell, and a layer of UI primitives. Around that core sit the consumer apps (<code>avian-app-web</code>, <code>avian-app-electron</code>), the recruiter and enterprise surfaces, the internal tools (twenty-one of them, from a Kanban board to a calendar to a unified observability dashboard), and the marketing websites. Fifty-six repositories, all in one monorepo, all needing to pass the same accessibility bar.</p>
<p class="mb-4 font-light font-serif">After running the first deterministic audit pass against fresh <code>main</code>, the script reported:</p>
<table>
  <thead>
    <tr>
      <th>Severity</th>
      <th style="text-align: right">Findings</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CRITICAL</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td>HIGH</td>
      <td style="text-align: right">414</td>
    </tr>
    <tr>
      <td>MEDIUM</td>
      <td style="text-align: right">312</td>
    </tr>
    <tr>
      <td>LOW</td>
      <td style="text-align: right">0</td>
    </tr>
    <tr>
      <td><strong>Total</strong></td>
      <td style="text-align: right"><strong>726</strong></td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Six hundred and twenty-six issues clustered into a small number of patterns. Seventy-one percent of the HIGH findings were in two repositories: the cloud-console simulator (<code>avian-console-sim-react</code>, used by labs across forty-five certifications) and a static-site <code>dist/</code> folder that hadn&#39;t been rebuilt in a month. Once I clustered the findings by rule and repository, the path to zero became obvious.</p>
<h2 id="the-audit-script">The audit script</h2>
<p class="mb-4 font-light font-serif">The first thing I built was the auditor itself. The premise: anything mechanical should be deterministic. Color contrast and focus-trap correctness need eyes; missing <code>alt</code> attributes do not.</p>
<p class="mb-4 font-light font-serif">The script is <code>avian-audits/scripts/accessibility_audit.py</code>, stdlib-only Python, about seven hundred lines. It implements fifteen rules covering the mechanical phases of WCAG 2.1 AA:</p>
<table>
  <thead>
    <tr>
      <th>Rule</th>
      <th>Severity</th>
      <th>WCAG</th>
      <th>What it catches</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>img-missing-alt</code></td>
      <td>HIGH</td>
      <td>1.1.1</td>
      <td><code>&lt;img&gt;</code> without <code>alt=</code></td>
    </tr>
    <tr>
      <td><code>svg-info-no-aria</code></td>
      <td>HIGH</td>
      <td>1.1.1</td>
      <td>Standalone informational <code>&lt;svg&gt;</code> lacking <code>role=&quot;img&quot;</code> + <code>aria-label</code> (and not inside a labelled control)</td>
    </tr>
    <tr>
      <td><code>canvas-no-alt</code></td>
      <td>HIGH</td>
      <td>1.1.1</td>
      <td><code>&lt;canvas&gt;</code> without <code>aria-label</code>/<code>aria-labelledby</code>/<code>aria-hidden</code></td>
    </tr>
    <tr>
      <td><code>input-no-accessible-name</code></td>
      <td>HIGH</td>
      <td>1.3.1</td>
      <td>Form input with no label / aria-label / aria-labelledby / wrapping label</td>
    </tr>
    <tr>
      <td><code>input-adjacent-label-no-htmlfor</code></td>
      <td>MEDIUM</td>
      <td>1.3.1</td>
      <td>Sibling <code>&lt;label&gt;</code> exists but no <code>htmlFor</code>/<code>id</code> link</td>
    </tr>
    <tr>
      <td><code>multiple-h1</code></td>
      <td>MEDIUM</td>
      <td>1.3.1</td>
      <td>More than one <code>&lt;h1&gt;</code> per page-tree component</td>
    </tr>
    <tr>
      <td><code>missing-main-landmark</code></td>
      <td>HIGH</td>
      <td>1.3.1</td>
      <td>Repo with no <code>&lt;main&gt;</code> anywhere</td>
    </tr>
    <tr>
      <td><code>missing-skip-link</code></td>
      <td>HIGH</td>
      <td>2.4.1</td>
      <td>Repo with a layout but no skip-to-main-content link</td>
    </tr>
    <tr>
      <td><code>html-no-lang</code></td>
      <td>HIGH</td>
      <td>3.1.1</td>
      <td>HTML file with no <code>lang</code> on <code>&lt;html&gt;</code></td>
    </tr>
    <tr>
      <td><code>generic-link-text</code></td>
      <td>MEDIUM</td>
      <td>2.4.4</td>
      <td>&quot;click here&quot; / &quot;learn more&quot; inside <code>&lt;a&gt;</code> / <code>&lt;Link&gt;</code></td>
    </tr>
    <tr>
      <td><code>clickable-non-interactive</code></td>
      <td>HIGH</td>
      <td>2.1.1</td>
      <td><code>&lt;div&gt;</code>/<code>&lt;span&gt;</code>/<code>&lt;li&gt;</code> with <code>onClick</code> lacking <code>role</code> + <code>tabIndex</code> + <code>onKeyDown</code></td>
    </tr>
    <tr>
      <td><code>aria-hidden-focusable</code></td>
      <td>HIGH</td>
      <td>4.1.2</td>
      <td>Focusable element with <code>aria-hidden=&quot;true&quot;</code> and no <code>tabIndex={-1}</code></td>
    </tr>
    <tr>
      <td><code>positive-tabindex</code></td>
      <td>MEDIUM</td>
      <td>2.4.3</td>
      <td><code>tabIndex={N&gt;0}</code></td>
    </tr>
    <tr>
      <td><code>outline-none-no-replacement</code></td>
      <td>HIGH</td>
      <td>2.4.7</td>
      <td>CSS <code>outline:none</code> on <code>:focus</code> with no replacement; Tailwind <code>focus(-visible):outline-none</code> without a ring/outline/border replacement</td>
    </tr>
    <tr>
      <td><code>no-reduced-motion-guard</code></td>
      <td>MEDIUM</td>
      <td>2.3.3</td>
      <td>Repo defines <code>@keyframes</code> but no CSS file references <code>prefers-reduced-motion</code></td>
    </tr>
    <tr>
      <td><code>missing-sr-only-utility</code></td>
      <td>MEDIUM</td>
      <td>1.3.1</td>
      <td>Repo never references a <code>sr-only</code> / <code>visually-hidden</code> utility</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The script auto-discovers UI-bearing repositories by walking the conventional monorepo parents (<code>clients/</code>, <code>libs/</code>, <code>tools/</code>, <code>websites/</code>, <code>services/</code>, <code>automations/</code>) and identifying any directory that contains TSX, JSX, or HTML files. It honors a small exemption list for repos with no UI surface (server-only services, layout-engine libraries, design archives). Test files, <code>node_modules/</code>, <code>dist/</code>, <code>build/</code>, <code>coverage/</code>, <code>htmlcov/</code>, and per-repo <code>docs/</code> and <code>examples/</code> paths are skipped.</p>
<p class="mb-4 font-light font-serif">The clever part is the JSX tokenizer. Every JSX-aware tool I tried (regex, tree-sitter, Babel) had a tradeoff. Regex is fast but breaks on <code>onClick={() =&gt; x &gt; 0}</code> because the inner <code>&gt;</code> is read as a tag close. Babel is correct but slow and brings a parser dependency I didn&#39;t want in an audit script. So I wrote a small character-by-character walker that tracks brace depth and string state: when it sees <code>&lt;</code>, it walks forward, ignoring <code>&gt;</code> inside <code>{...}</code> and string literals, until it finds the real closing <code>&gt;</code> of the opening tag. About eighty lines. Every rule checks attributes via this walker, which means the script reads JSX correctly the first time on every run.</p>
<p class="mb-4 font-light font-serif">The script writes two artifacts:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><code>avian-audits/reports/accessibility-audit-report-YYYY-MM-DD.md</code> — Markdown summary with by-repo and by-rule tables</li>
<li><code>avian-audits/reports/accessibility-audit-findings-YYYY-MM-DD.json</code> — machine-readable findings for CI, dashboards, diffing across runs</li>
</ul>
<p class="mb-4 font-light font-serif">In Mode 1 (the default), it exits with code <code>2</code> if any HIGH or CRITICAL findings remain. That&#39;s the gate.</p>
<h2 id="heuristics-worth-their-weight">Heuristics worth their weight</h2>
<p class="mb-4 font-light font-serif">Determinism is great until your script flags fifty true positives and twelve false ones, and the false-positive review burns more time than the fixes. Three heuristic refinements made the audit usable in practice:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Skip aria-hidden inputs and divs.</strong> An input with <code>aria-hidden=&quot;true&quot;</code> is by definition not in the accessibility tree. Honeypot inputs, autofill catchers, hidden file pickers triggered by a styled button — all of these legitimately omit <code>aria-label</code>. Same logic for <code>&lt;div onClick aria-hidden=&quot;true&quot;&gt;</code> modal backdrops.</li>
<li><strong>Skip spread-prop forwarders.</strong> A generic component like <code>&lt;Input ref={ref} {...props} /&gt;</code> delegates <code>aria-label</code> to the consumer. The wrapper itself can&#39;t statically declare a label. The script checks for <code>{...spread}</code> syntax and exempts the element.</li>
<li><strong>Recognize the conditional-attribute pattern.</strong> A common React idiom is <code>&lt;div role={cond ? &#39;button&#39; : undefined} tabIndex={cond ? 0 : undefined} onKeyDown={cond ? handler : undefined}&gt;</code>. Statically, we can&#39;t verify the conditions match, but the developer is clearly aware of the requirement. When all three attributes appear as JSX expressions, the script treats the element as authored-correctly. (The original implementation had a bug: <code>role</code> was already brace-stripped before this check ran. Took me a few minutes to notice the heuristic was a no-op.)</li>
</ol>
<p class="mb-4 font-light font-serif">These three suppressions cleared dozens of confirmed false positives without weakening real-defect detection. Every suppression is documented inline in the script alongside the rule it modifies, so a future engineer reading <code>accessibility_audit.py</code> understands not just what&#39;s checked but what&#39;s deliberately not checked.</p>
<h2 id="the-fix-waves">The fix waves</h2>
<p class="mb-4 font-light font-serif">I ran the audit, looked at the clustering, and built a wave plan. Each wave targeted a class of fix, not a repository. That ordering matters: fixing the design-system primitives first means downstream consumers inherit the fixes, and a good codemod beats a hundred manual edits.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 345.73199999999997 1151.7999999999997" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<polyline class="edge" data-from="A" data-to="B" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,93.80000000000001 172.86599999999999,141.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="B" data-to="C" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,195.60000000000002 172.86599999999999,243.60000000000002" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="C" data-to="D" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,297.40000000000003 172.86599999999999,345.40000000000003" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="E" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,399.20000000000005 172.86599999999999,447.20000000000005" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="E" data-to="F" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,501.00000000000006 172.86599999999999,549" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="F" data-to="G" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,602.8000000000001 172.86599999999999,650.8000000000001" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="G" data-to="H" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,704.6 172.86599999999999,752.6" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="H" data-to="I" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,806.4 172.86599999999999,854.4" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="I" data-to="J" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,908.1999999999999 172.86599999999999,956.1999999999999" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="J" data-to="K" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="172.86599999999999,1009.9999999999999 172.86599999999999,1057.9999999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<g class="node" data-id="A" data-label="Initial audit
414 HIGH, 312 MEDIUM" data-shape="rectangle">
  <rect x="88.53549999999998" y="40" width="168.661" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="66.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Initial audit</tspan><tspan x="172.86599999999999" dy="16.900000000000002">414 HIGH, 312 MEDIUM</tspan></text>
</g>
<g class="node" data-id="B" data-label="Wave 1: activities-react
5 fixes" data-shape="rectangle">
  <rect x="86.68299999999999" y="141.8" width="172.36599999999999" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="168.70000000000002" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 1: activities-react</tspan><tspan x="172.86599999999999" dy="16.900000000000002">5 fixes</tspan></text>
</g>
<g class="node" data-id="C" data-label="Wave 2: console-sim codemod
2,235 input/label pairings + 8 primitives" data-shape="rectangle">
  <rect x="40" y="243.60000000000002" width="265.73199999999997" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="270.5" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 2: console-sim codemod</tspan><tspan x="172.86599999999999" dy="16.900000000000002">2,235 input/label pairings + 8 primitives</tspan></text>
</g>
<g class="node" data-id="D" data-label="Wave 3: client apps subagent
59 fixes" data-shape="rectangle">
  <rect x="67.7875" y="345.40000000000003" width="210.15699999999998" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="372.3" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 3: client apps subagent</tspan><tspan x="172.86599999999999" dy="16.900000000000002">59 fixes</tspan></text>
</g>
<g class="node" data-id="E" data-label="Wave 4: tools fleet subagent
136 fixes across 21 tools" data-shape="rectangle">
  <rect x="72.23349999999999" y="447.20000000000005" width="201.265" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="474.1" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 4: tools fleet subagent</tspan><tspan x="172.86599999999999" dy="16.900000000000002">136 fixes across 21 tools</tspan></text>
</g>
<g class="node" data-id="F" data-label="Wave 5: heuristic refinements +
17 manual cleanup fixes" data-shape="rectangle">
  <rect x="61.85949999999998" y="549" width="222.013" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="575.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 5: heuristic refinements +</tspan><tspan x="172.86599999999999" dy="16.900000000000002">17 manual cleanup fixes</tspan></text>
</g>
<g class="node" data-id="G" data-label="Wave 6: cloudops dist sed
71 stale dist HTML fixes" data-shape="rectangle">
  <rect x="76.67949999999999" y="650.8000000000001" width="192.373" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="677.7" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 6: cloudops dist sed</tspan><tspan x="172.86599999999999" dy="16.900000000000002">71 stale dist HTML fixes</tspan></text>
</g>
<g class="node" data-id="H" data-label="Wave 7: console-sim views subagent
118 view-level fixes" data-shape="rectangle">
  <rect x="45.92800000000001" y="752.6" width="253.87599999999995" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="779.5" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 7: console-sim views subagent</tspan><tspan x="172.86599999999999" dy="16.900000000000002">118 view-level fixes</tspan></text>
</g>
<g class="node" data-id="I" data-label="Wave 8: final stragglers
2 fixes" data-shape="rectangle">
  <rect x="83.719" y="854.4" width="178.29399999999998" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="881.3" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 8: final stragglers</tspan><tspan x="172.86599999999999" dy="16.900000000000002">2 fixes</tspan></text>
</g>
<g class="node" data-id="J" data-label="Wave 9: MEDIUM cleanup
676 fixes" data-shape="rectangle">
  <rect x="77.05000000000001" y="956.1999999999999" width="191.63199999999995" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="983.0999999999999" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Wave 9: MEDIUM cleanup</tspan><tspan x="172.86599999999999" dy="16.900000000000002">676 fixes</tspan></text>
</g>
<g class="node" data-id="K" data-label="Final state
0 findings at every severity" data-shape="rectangle">
  <rect x="73.34500000000001" y="1057.9999999999998" width="199.04199999999994" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="172.86599999999999" y="1084.8999999999999" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="172.86599999999999" dy="-3.9000000000000012">Final state</tspan><tspan x="172.86599999999999" dy="16.900000000000002">0 findings at every severity</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">The nine-wave fix sequence: 414 HIGH findings to zero across all severities</figcaption>
</div>
<p class="mb-4 font-light font-serif">The biggest single intervention was a Python codemod. The console-sim repository had a stereotypical pattern across 257 dashboard files: <code>&lt;label&gt;Field name&lt;/label&gt; &lt;input ... /&gt;</code>, with no <code>htmlFor</code>/<code>id</code> linkage. Visually, the labels lined up with the inputs. Programmatically, no screen reader knew the input&#39;s name. A codemod that walks the JSX, finds adjacent <code>&lt;label&gt;</code> and input pairs, generates a stable id from the input&#39;s <code>data-testid</code> (or a slug of the label text if no testid), and rewrites both the label and the input to carry the linkage took about two hundred lines and fixed 2,235 inputs in eight seconds. That&#39;s three orders of magnitude faster than the equivalent human pass and one order of magnitude more reliable.</p>
<p class="mb-4 font-light font-serif">A second codemod handled <code>&lt;h1&gt;</code> proliferation. Pages in the simulator render multiple panels, each with its own page-level heading. Source-level, that means multiple <code>&lt;h1&gt;</code> per file; runtime, only one panel renders at a time. The codemod kept the first <code>&lt;h1&gt;</code> per file and demoted the rest to <code>&lt;h2&gt;</code>. 594 demotions across 241 files.</p>
<p class="mb-4 font-light font-serif">A third codemod added <code>aria-label</code> to inputs that had a <code>data-testid</code> but no preceding sibling label, deriving the label from the testid (e.g., <code>net-add-device-name</code> becomes <code>&quot;Device name&quot;</code>). I had to rewrite this one twice; the first version&#39;s regex broke on JSX attribute values containing arrow functions. Brace-aware tokenizers earn their keep.</p>
<p class="mb-4 font-light font-serif">The waves outside the codemods went to subagents. A subagent is just an LLM session with a specific task, scoped to a list of files, with the audit findings JSON as input. I dispatched two in parallel (one for client apps, one for the tools fleet) and they came back with 195 fixes between them. The agents apply the fixes; I review the patterns and the typecheck output. The pattern review caught three confirmed false positives in client apps that the script&#39;s heuristics didn&#39;t yet suppress, which became the basis for Wave 5&#39;s heuristic refinements.</p>
<h2 id="whats-actually-in-the-codebase-now">What&#39;s actually in the codebase now</h2>
<p class="mb-4 font-light font-serif">A snapshot of the AccelaStudy AI surface area, post-audit:</p>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th style="text-align: right">Count</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>UI-bearing repositories</td>
      <td style="text-align: right">56</td>
    </tr>
    <tr>
      <td>TSX/JSX source files (production)</td>
      <td style="text-align: right">2,185</td>
    </tr>
    <tr>
      <td>Native <code>&lt;button&gt;</code> elements</td>
      <td style="text-align: right">2,527</td>
    </tr>
    <tr>
      <td>Form inputs (input / select / textarea)</td>
      <td style="text-align: right">3,486</td>
    </tr>
    <tr>
      <td><code>&lt;a href&gt;</code> links</td>
      <td style="text-align: right">thousands (uncounted; per-repo)</td>
    </tr>
    <tr>
      <td>Total ARIA attribute uses</td>
      <td style="text-align: right">3,019</td>
    </tr>
    <tr>
      <td>Explicit <code>aria-label</code> uses</td>
      <td style="text-align: right">1,530</td>
    </tr>
    <tr>
      <td><code>aria-hidden</code> uses (decorative)</td>
      <td style="text-align: right">752</td>
    </tr>
    <tr>
      <td>Total <code>role=</code> uses</td>
      <td style="text-align: right">1,001</td>
    </tr>
    <tr>
      <td><code>role=&quot;button&quot;</code> (custom clickable elements)</td>
      <td style="text-align: right">101</td>
    </tr>
    <tr>
      <td><code>role=&quot;img&quot;</code> (canvas/SVG with text alternative)</td>
      <td style="text-align: right">112</td>
    </tr>
    <tr>
      <td><code>role=&quot;dialog&quot;</code> (modal containers)</td>
      <td style="text-align: right">109</td>
    </tr>
    <tr>
      <td><code>tabIndex</code> uses</td>
      <td style="text-align: right">150</td>
    </tr>
    <tr>
      <td><code>onKeyDown</code> handlers (custom keyboard support)</td>
      <td style="text-align: right">208</td>
    </tr>
    <tr>
      <td>Tailwind <code>focus-visible:</code> ring classes</td>
      <td style="text-align: right">102</td>
    </tr>
    <tr>
      <td>Skip-to-main-content references</td>
      <td style="text-align: right">200+</td>
    </tr>
    <tr>
      <td>Total fixes shipped in one day</td>
      <td style="text-align: right"><strong>3,317</strong></td>
    </tr>
    <tr>
      <td>HIGH findings before / after</td>
      <td style="text-align: right"><strong>414 / 0</strong></td>
    </tr>
    <tr>
      <td>Findings at every severity, after</td>
      <td style="text-align: right"><strong>0</strong></td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Three thousand nineteen ARIA attributes is not a vanity number. It&#39;s the count of places we&#39;ve explicitly chosen to extend or refine the accessibility tree beyond what the native HTML provides. Every one of those is a design decision that the audit will catch the regression on.</p>
<p class="mb-4 font-light font-serif">Two thousand five hundred twenty-seven native <code>&lt;button&gt;</code> elements is the more important metric, because it&#39;s the count of things we <em>didn&#39;t</em> have to make accessible by hand. Native semantics are the foundation; ARIA is the extension. The codebase leans heavily on native semantics: buttons, anchors, fieldsets, labels, headings. The ARIA layer covers the visualizations (the Knowledge Map canvas, the Behavioral Rings SVG, the Ring Forge), the custom widgets (the lab console toolbar, the segmented billing-cadence selector, the keyboard-driven drag-and-drop in activities), and the live regions (toasts, exam timers, chat output, narration logs).</p>
<h2 id="patterns-that-did-the-heavy-lifting">Patterns that did the heavy lifting</h2>
<p class="mb-4 font-light font-serif">A few patterns recur across the codebase. They&#39;re worth naming because they encode the &quot;shape&quot; of an accessible component once, and every consumer inherits the shape.</p>
<h3 id="the-interactive-checkbox-pattern">The interactive-checkbox pattern</h3>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span>
<span class="w">  </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;checkbox&quot;</span>
<span class="w">  </span><span class="na">tabIndex</span><span class="o">=</span><span class="p">{</span><span class="mf">0</span><span class="p">}</span>
<span class="w">  </span><span class="na">aria-checked</span><span class="o">=</span><span class="p">{</span><span class="nx">isComplete</span><span class="p">}</span>
<span class="w">  </span><span class="na">onClick</span><span class="o">=</span><span class="p">{()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="nx">toggle</span><span class="p">(</span><span class="nx">id</span><span class="p">)}</span>
<span class="w">  </span><span class="na">onKeyDown</span><span class="o">=</span><span class="p">{(</span><span class="nx">e</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">key</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="s1">&#39; &#39;</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nx">e</span><span class="p">.</span><span class="nx">key</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="s1">&#39;Enter&#39;</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span>
<span class="w">      </span><span class="nx">toggle</span><span class="p">(</span><span class="nx">id</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}}</span>
<span class="p">&gt;</span>
<span class="w">  </span><span class="p">{</span><span class="nx">label</span><span class="p">}</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>

<p class="mb-4 font-light font-serif">Used wherever a styled checkbox replaces the native control. The four ingredients (role, tabIndex, click handler, key handler) are non-negotiable; the audit script enforces all four together.</p>
<h3 id="the-dialog-backdrop">The dialog backdrop</h3>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span><span class="w"> </span><span class="na">className</span><span class="o">=</span><span class="p">{</span><span class="nx">styles</span><span class="p">.</span><span class="nx">overlay</span><span class="p">}</span><span class="w"> </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;presentation&quot;</span><span class="w"> </span><span class="na">onClick</span><span class="o">=</span><span class="p">{</span><span class="nx">onClose</span><span class="p">}&gt;</span>
<span class="w">  </span><span class="p">&lt;</span><span class="nt">div</span><span class="w"> </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;dialog&quot;</span><span class="w"> </span><span class="na">aria-modal</span><span class="o">=</span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="na">aria-labelledby</span><span class="o">=</span><span class="s">&quot;title&quot;</span><span class="p">&gt;</span>
<span class="w">    </span><span class="p">&lt;</span><span class="nt">h2</span><span class="w"> </span><span class="na">id</span><span class="o">=</span><span class="s">&quot;title&quot;</span><span class="p">&gt;</span><span class="nx">Confirm</span><span class="p">&lt;/</span><span class="nt">h2</span><span class="p">&gt;</span>
<span class="w">    </span><span class="p">{</span><span class="cm">/* content */</span><span class="p">}</span>
<span class="w">  </span><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>

<p class="mb-4 font-light font-serif"><code>role=&quot;presentation&quot;</code> removes the backdrop from the accessibility tree. The inner <code>&lt;div role=&quot;dialog&quot;&gt;</code> carries the focus trap, the labelled-by reference, and the Escape-key handler. The audit catches backdrops that pretend to be buttons (and would pollute the keyboard tab order) and silences the rule for this pattern.</p>
<h3 id="the-decorative-svg-inside-a-labelled-control">The decorative SVG inside a labelled control</h3>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">button</span><span class="w"> </span><span class="na">aria-label</span><span class="o">=</span><span class="s">&quot;Close&quot;</span><span class="p">&gt;</span>
<span class="w">  </span><span class="p">&lt;</span><span class="nt">svg</span><span class="w"> </span><span class="na">aria-hidden</span><span class="o">=</span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="na">focusable</span><span class="o">=</span><span class="s">&quot;false&quot;</span><span class="p">&gt;</span><span class="err">…</span><span class="p">&lt;/</span><span class="nt">svg</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">button</span><span class="p">&gt;</span>
</pre></div>

<p class="mb-4 font-light font-serif">Every icon button. Every Lucide / Phosphor / Heroicons reference. The button carries the name; the SVG is a glyph, not content. Marking the SVG <code>aria-hidden</code> plus <code>focusable=&quot;false&quot;</code> keeps it out of the accessibility tree and out of the tab order on legacy browsers.</p>
<h3 id="the-progress-bar-wrapper">The progress bar wrapper</h3>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span>
<span class="w">  </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;progressbar&quot;</span>
<span class="w">  </span><span class="na">aria-valuenow</span><span class="o">=</span><span class="p">{</span><span class="nb">Math</span><span class="p">.</span><span class="nx">round</span><span class="p">(</span><span class="nx">percent</span><span class="p">)}</span>
<span class="w">  </span><span class="na">aria-valuemin</span><span class="o">=</span><span class="p">{</span><span class="mf">0</span><span class="p">}</span>
<span class="w">  </span><span class="na">aria-valuemax</span><span class="o">=</span><span class="p">{</span><span class="mf">100</span><span class="p">}</span>
<span class="w">  </span><span class="na">aria-label</span><span class="o">=</span><span class="p">{</span><span class="sb">`</span><span class="si">${</span><span class="nx">mastered</span><span class="si">}</span><span class="sb"> of </span><span class="si">${</span><span class="nx">total</span><span class="si">}</span><span class="sb"> concepts mastered`</span><span class="p">}</span>
<span class="p">&gt;</span>
<span class="w">  </span><span class="p">&lt;</span><span class="nt">div</span><span class="w"> </span><span class="na">className</span><span class="o">=</span><span class="p">{</span><span class="nx">styles</span><span class="p">.</span><span class="nx">fill</span><span class="p">}</span><span class="w"> </span><span class="na">style</span><span class="o">=</span><span class="p">{{</span><span class="w"> </span><span class="nx">width</span><span class="o">:</span><span class="w"> </span><span class="sb">`</span><span class="si">${</span><span class="nx">percent</span><span class="si">}</span><span class="sb">%`</span><span class="w"> </span><span class="p">}}</span><span class="w"> </span><span class="na">aria-hidden</span><span class="o">=</span><span class="s">&quot;true&quot;</span><span class="w"> </span><span class="p">/&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>

<p class="mb-4 font-light font-serif">Used for the radial progress on the certifications page, the per-domain bars on the exam score report, and the mastery bar on the activity sidebar. The wrapper carries the role and the values; the inner fill is decorative.</p>
<h3 id="the-radio-group-with-arrow-keys">The radio-group with arrow keys</h3>
<div class="highlight"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span>
<span class="w">  </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;radiogroup&quot;</span>
<span class="w">  </span><span class="na">aria-label</span><span class="o">=</span><span class="s">&quot;Billing cadence&quot;</span>
<span class="w">  </span><span class="na">onKeyDown</span><span class="o">=</span><span class="p">{(</span><span class="nx">e</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="p">([</span><span class="s1">&#39;ArrowRight&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;ArrowDown&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;ArrowLeft&#39;</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;ArrowUp&#39;</span><span class="p">].</span><span class="nx">includes</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">key</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">();</span>
<span class="w">      </span><span class="nx">onChange</span><span class="p">(</span><span class="nx">billing</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="s1">&#39;monthly&#39;</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="s1">&#39;annual&#39;</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s1">&#39;monthly&#39;</span><span class="p">);</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}}</span>
<span class="p">&gt;</span>
<span class="w">  </span><span class="p">&lt;</span><span class="nt">IntervalButton</span><span class="w"> </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;radio&quot;</span><span class="w"> </span><span class="na">aria-checked</span><span class="o">=</span><span class="p">{</span><span class="nx">isMonthly</span><span class="p">}</span><span class="w"> </span><span class="na">tabIndex</span><span class="o">=</span><span class="p">{</span><span class="nx">isMonthly</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">}</span><span class="w"> </span><span class="err">…</span><span class="w"> </span><span class="p">/&gt;</span>
<span class="w">  </span><span class="p">&lt;</span><span class="nt">IntervalButton</span><span class="w"> </span><span class="na">role</span><span class="o">=</span><span class="s">&quot;radio&quot;</span><span class="w"> </span><span class="na">aria-checked</span><span class="o">=</span><span class="p">{</span><span class="nx">isAnnual</span><span class="p">}</span><span class="w">  </span><span class="na">tabIndex</span><span class="o">=</span><span class="p">{</span><span class="nx">isAnnual</span><span class="w">  </span><span class="o">?</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">}</span><span class="w"> </span><span class="err">…</span><span class="w"> </span><span class="p">/&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>

<p class="mb-4 font-light font-serif">This is the WAI-ARIA radio pattern: only the selected option is in the tab order; arrow keys cycle through the rest. The subscribe flow&#39;s monthly/annual toggle uses it. Without the arrow-key handler, keyboard users couldn&#39;t discover the second option; the audit catches that omission.</p>
<h2 id="what-the-script-does-not-check">What the script does <em>not</em> check</h2>
<p class="mb-4 font-light font-serif">The script catches the mechanical eighty percent. It does not catch:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Color contrast.</strong> Computed colors per theme, against per-component backgrounds, with consideration for state (hover, disabled, focus). This needs axe-core&#39;s color-contrast rule running against rendered DOM in a real browser.</li>
<li><strong>Touch target size.</strong> A <code>&lt;button&gt;</code> that&#39;s correctly labelled but only 24 pixels tall fails WCAG 2.5.5 on mobile. Computing the box model needs a layout engine.</li>
<li><strong>Modal focus-trap correctness.</strong> Catching whether Tab loops within the modal and Escape closes it requires actual interaction, not static analysis.</li>
<li><strong>Custom ARIA widget pattern correctness.</strong> A <code>&lt;tablist&gt;</code> + <code>&lt;tab&gt;</code> + <code>&lt;tabpanel&gt;</code> triple needs <code>aria-controls</code> on each tab pointing to a panel id and <code>aria-labelledby</code> on each panel pointing back. The script catches missing roles; it doesn&#39;t catch wiring errors between the three.</li>
<li><strong>Screen-reader narrative quality.</strong> &quot;Knowledge map showing 400 concepts: 60% mastered, 25% in progress, 15% not started&quot; is a meaningful text alternative for a canvas. &quot;Knowledge map&quot; is not. The script verifies the attribute exists; it doesn&#39;t verify the words inside it convey the data.</li>
<li><strong>Activity-format keyboard semantics.</strong> A drag-and-drop activity needs Space-to-grab, arrow-keys-to-move, Enter-to-drop, Escape-to-cancel, and live-region announcements of position. The script verifies &quot;an <code>onKeyDown</code> exists&quot;; it doesn&#39;t verify the full pattern.</li>
</ul>
<p class="mb-4 font-light font-serif">These are the LLM-driven phases of the spec. They run after the script passes, on a slower cadence, and they need a human to confirm the result. We have an axe-core Playwright sweep across thirty-four routes for color contrast and a manual screen-reader pass that goes into a release readiness checklist.</p>
<h2 id="what-it-actually-takes">What it actually takes</h2>
<p class="mb-4 font-light font-serif">After three thousand-plus fixes in a day, here&#39;s what I think is non-negotiable for a fully accessible product, and what&#39;s nice-to-have:</p>
<table>
  <thead>
    <tr>
      <th>Area</th>
      <th>Non-negotiable</th>
      <th>Nice-to-have</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Audit</td>
      <td>Deterministic script in CI; exit non-zero on HIGH/CRITICAL</td>
      <td>Coverage dashboard; per-rule trend charts</td>
    </tr>
    <tr>
      <td>Spec</td>
      <td>Single source-of-truth doc; modes formalized</td>
      <td>Rendered as a website page</td>
    </tr>
    <tr>
      <td>Codemods</td>
      <td>Reusable for the most-common bulk fixes</td>
      <td>Plugin into a pre-commit hook</td>
    </tr>
    <tr>
      <td>Patterns</td>
      <td>Documented and exemplified in the design system</td>
      <td>Storybook stories for each pattern</td>
    </tr>
    <tr>
      <td>Native HTML</td>
      <td>Buttons, anchors, fieldsets, labels — used over div+role wherever possible</td>
      <td>—</td>
    </tr>
    <tr>
      <td>ARIA</td>
      <td>Used to extend, never replace, native semantics</td>
      <td>—</td>
    </tr>
    <tr>
      <td>Focus</td>
      <td>Visible indicator on every focusable element; <code>:focus-visible</code> not <code>:focus</code></td>
      <td>High-contrast mode tested</td>
    </tr>
    <tr>
      <td>Keyboard</td>
      <td>Every interactive control reachable; arrow-key patterns where applicable</td>
      <td>Tab-order Playwright tests</td>
    </tr>
    <tr>
      <td>Skip-link</td>
      <td>Present at the top of every shell layout</td>
      <td>Multiple targets (e.g., to nav, to main)</td>
    </tr>
    <tr>
      <td><code>lang</code></td>
      <td>Set on <code>&lt;html&gt;</code> for every page</td>
      <td>Per-section overrides for non-English content</td>
    </tr>
    <tr>
      <td>Reduced motion</td>
      <td><code>@media (prefers-reduced-motion: reduce)</code> guard wherever animations exist</td>
      <td>Per-component opt-outs</td>
    </tr>
    <tr>
      <td>Screen-reader testing</td>
      <td>Manual pass with at least one of NVDA / VoiceOver / JAWS before each release</td>
      <td>Recorded passes for regression comparison</td>
    </tr>
    <tr>
      <td>Color contrast</td>
      <td>Verified per theme</td>
      <td>Computed in CI</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The first row is what gates a release. The rest gets there over time. The script catches the &quot;broken at all&quot; cases. Manual review catches the &quot;could be better&quot; cases. Both have a place; neither is sufficient on its own.</p>
<h2 id="continuous-not-episodic">Continuous, not episodic</h2>
<p class="mb-4 font-light font-serif">What I care most about is what happens in three months, when we ship a new activity format, a new lab dashboard, a new tool. The work this week was finite; the discipline is continuous.</p>
<p class="mb-4 font-light font-serif">The discipline lives in three places:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong><code>avian-audits/accessibility-audit.md</code></strong> is the spec. It defines the target standard (WCAG 2.1 AA), the rules, the severities, the audit modes, and the fixes-section patterns. It updates in the same commit as the script. Treat it like an ADR.</li>
<li><strong><code>avian-audits/scripts/accessibility_audit.py</code></strong> is the executable. CI runs it. Mode 1 exits non-zero on HIGH/CRITICAL. Pull requests that introduce regressions get blocked at the review gate.</li>
<li><strong>The fix sections of the spec</strong> are the codemod inventory. When a new mechanical pattern surfaces, the rule and the codemod ship together.</li>
</ol>
<p class="mb-4 font-light font-serif">Every six weeks, someone runs Mode 2 (which enforces the MEDIUM gate too). MEDIUMs accumulate slowly in a healthy codebase; the slower cadence is appropriate. The really judgment-heavy phases — color contrast, touch targets, modal focus traps, screen-reader quality — run on release boundaries, not on every commit.</p>
<p class="mb-4 font-light font-serif">If you&#39;re starting from where we were a week ago, my advice is: write the script first. Don&#39;t write the report; don&#39;t make the slide deck; don&#39;t even fix anything. Write the script. The script gives you a baseline number, the baseline tells you the size of the problem, and the size of the problem tells you whether to fix by hand, by codemod, or by subagent. Once the script is in place, every fix is cheap and every regression is impossible. That&#39;s the difference between aspirationally accessible and continuously accessible, and it&#39;s a one-week investment for a permanent payoff.</p>
<h2 id="numbers-i-want-you-to-take-away">Numbers I want you to take away</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Fifty-six</strong> UI-bearing repositories audited. None excluded.</li>
<li><strong>Two thousand one hundred eighty-five</strong> TSX and JSX source files scanned in production code paths.</li>
<li><strong>Three thousand nineteen</strong> explicit ARIA attribute uses across the codebase. Every one of them is a deliberate design decision the audit catches if regressed.</li>
<li><strong>Three thousand four hundred eighty-six</strong> form inputs, every one with an accessible name (label, aria-label, or wrapping label).</li>
<li><strong>Three thousand three hundred seventeen</strong> fixes shipped in a single day across nine fix waves and seven codemods.</li>
<li><strong>Two thousand two hundred thirty-five</strong> of those fixes came from a single 200-line Python codemod.</li>
<li><strong>Four hundred fourteen</strong> HIGH-severity findings became zero. Zero CRITICAL throughout. Zero MEDIUM and zero LOW after the cleanup wave.</li>
</ul>
<p class="mb-4 font-light font-serif">A learner using a screen reader, a keyboard, switch device, voice control, magnification, or reduced-motion settings can now use AccelaStudy AI without hitting a barrier any of the rest of us would notice. That&#39;s not a finishing line; that&#39;s a starting point. It&#39;s also the bar every product in our fleet, and every team I work with, should be willing to clear.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 8, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-08-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-08-leverage-record.html</id>
    <updated>2026-05-08T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Ten tasks. May 8, 2026 weighted to 22.4x leverage across 108.5 human-equivalent hours in 291 Claude-minutes. The day was dominated by an internal cross-domain warm-start architecture rolled out across engine, web, desktop, and mobile clients in five phases, plus a deep data-integrity audit and an IP working-draft amendment. Supervisory leverage closed at 323.9x.</p>
<p class="mb-4 font-light font-serif">Compared to the prior day, this one ran tighter; about a third of the human-equivalent hours but a higher weighted factor because most tasks were tightly-scoped engine or client wiring with explicit success criteria. The 53.3x ceiling came from a 5-phase routing implementation; the 4.7x floor was a session-recovery commit-bundling task where the human reviewed each step.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Browse-before-auth web client implementation: all 5 phases (router public/gated split, pendingIntent + resumeAfterAuth + AuthCallback dispatcher, anonymous CourseDetail with auth-aware Enroll, AppShell anonymous chrome with sign-in CTA, deep-link returnTo verified).</td>
      <td>40.0h</td>
      <td>45m</td>
      <td>1m</td>
      <td>53.3x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>an internal ADR Phase 1 engine: a Bayesian warm-starter module, a posterior model trust<em>flagged field, mastery trust gate, autopilot creationRequest/Response field expansion, 5 CrossDomainConfig fields, cloud.toml section, create</em>autopilot handler hook, 24 new unit tests across 3 files; 3,473 fast tests pass</td>
      <td>7.0h</td>
      <td>16m</td>
      <td>0m</td>
      <td>26.2x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Pair-to-node ref repair across 247 broken domains via embedding cosine match (146,762 pairs re-anchored, mean cosine 0.91). Bulk readiness-gate stamp across 178 manifests derived from exam metadata. Post-audit shows 319 of 320 viable domains HEALTHY (was 73). an internal ADR decision log updated.</td>
      <td>12.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>24.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Amend an IP working draft working draft (several new claims, a spec subsection, alt embodiment, related-inventions paragraphs for E and H), draft an internal ADR (cross-domain posterior warm-starting), update canonical claim totals 633-&gt;637 across 11 portfolio docs, regenerate Application_BB.pdf</td>
      <td>7.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>23.3x</td>
      <td>280.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>an internal ADR Phase 2 client wiring (web + Electron): API types, env flag, autopilot store extensions, CrossDomain fast-track buttons, CourseDetail savings callouts, SkillsCarryingOverPanel warm-start data, i18n keys, Electron screen state machine transferContext threading;</td>
      <td>5.0h</td>
      <td>14m</td>
      <td>0m</td>
      <td>21.4x</td>
      <td>1000.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>iOS cross-domain fast-track parity (EngineClient types, AppState TransferContext, CrossDomainView fast-track button, AutopilotView pre/post-activation callouts, env flag), invite-code gate removal (SiteKeyService/SiteKeyGateView delete + pbxproj cleanup + Localizable.xcstrings auto-clean),</td>
      <td>5.5h</td>
      <td>18m</td>
      <td>0m</td>
      <td>18.3x</td>
      <td>825.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Domain pair-to-node integrity audit (323 domains, 76% degraded), EB leaf catastrophic-regression fix (gate on domain<em>obs</em>total instead of raw pair_stats ; acc92 crashed 1.0→0.001 on broken-pair domains), per-domain readiness gates on CLF/SAA/a professional cert/ANS manifests, 12 new regression tests,</td>
      <td>18.0h</td>
      <td>65m</td>
      <td>4m</td>
      <td>16.6x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>an internal ADR Phase 3 artifacts: 5 reference profile YAMLs (CLF→SAA, SAA→SAP, a professional cert→a professional cert, a professional cert→a professional cert, a professional cert→a professional cert), run<em>warmstart</em>validation.py synthetic A/B harness (~500 lines, parses clean),</td>
      <td>4.0h</td>
      <td>15m</td>
      <td>0m</td>
      <td>16.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Built shared NLI server (FastAPI/MPS) + LM Studio embeddings client + engine wiring so synthesis pipeline can run 10-way concurrent without OOM</td>
      <td>6.5h</td>
      <td>25m</td>
      <td>4m</td>
      <td>15.6x</td>
      <td>97.5x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Resume an internal ADR cross-domain warmstart work after crash: bundle drift into 4 focused engine commits + 1 web a11y commit, add Phase 11 to an audit harness content audit (md spec + py implementation) catching missing decoy validation prerequisites and 26 pre-existing duplicate exam_codes,</td>
      <td>3.5h</td>
      <td>45m</td>
      <td>7m</td>
      <td>4.7x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>10</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>108.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>291</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>20</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,425,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>22.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>323.9x</td>
    </tr>
    <tr>
      <td>Human-equivalent weeks</td>
      <td>2.7</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution matters more than the headline figure. The 53.3x ceiling came from Browse-before-auth web client implementation: all 5 phases (router public/gated split,; the 4.7x floor was Resume an internal ADR cross-domain warmstart work after crash: bundle drift into 4 focused engine c.... Tasks at the top of the distribution share a shape: tightly-scoped specifications, clear success criteria, and minimal integration ambiguity. The AI doesn&#39;t need to discover anything new; it executes against an explicit target.</p>
<p class="mb-4 font-light font-serif">Tasks at the bottom run differently. They&#39;re either bounded by review-heavy work where every step gets verified, or they involve ambiguity that demands several rounds of trial and adjustment. The factor is real and informative, not a failure mode.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage figure (323.9x today) tracks something orthogonal to wall-clock leverage. It&#39;s the ratio of human-equivalent output to human prompt-writing time. It stays high even on lower-leverage days because supervisory minutes scale with task count, not with the human-hour estimate; a 20-minute task and a 4-hour task can both be specified in two minutes of human prompt-writing.</p>
<p class="mb-4 font-light font-serif">Across the 10 tasks, the day produced roughly 2.7 weeks of senior-engineer-equivalent throughput in 4.8 hours of model wall-clock. That ratio is the practical answer to the question of how much output a single operator can move per day when the model handles the execution and the operator handles the direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 7, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-07-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-07-leverage-record.html</id>
    <updated>2026-05-07T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty tasks. May 7, 2026 weighted to 10.9x leverage across 304.5 human-equivalent hours in 1676 Claude-minutes. Admin/ops dominated the day&#39;s volume. Supervisory leverage closed at 188.4x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 68.6x (40h human in 35 Claude-minutes) on Pre-launch burndown: fixed 3 holdout partial labs (git-lab-02, a cloud cert exam-lab-16, a cloud cert exam-lab-14), shipped Phase-2 polish for 5 simulators (not. The floor was 0.7x on the marketing site courses page: tighten card cap from 20 to 15, strip Certified word from 99 course titles via template filter (cards + course pages), reorder . Median Claude-minutes per task: 60; median human-equivalent hours per task: 7.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Pre-launch burndown: fixed 3 holdout partial labs (git-lab-02, a cloud cert exam-lab-16, a cloud cert exam-lab-14), shipped Phase-2 polish for 5 simulators (notebook markdown preview, SQL chart panel, project-board drag-and-drop kanban, SIEM MITRE ATT&amp;CK tagging, network topology SVG diagram), shipped 8 native-language syntax-validating resolvers (Java/Go/Rust/Swift/C#/PHP/Ruby/Kotlin) with 14 unit tests, documented vendor-console deferral until post-Monday-launch. 1 commit pushed.</td>
      <td>40.0h</td>
      <td>35m</td>
      <td>1m</td>
      <td>68.6x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Phase-2 round 2 across all 7 simulators: Project Board (visual Gantt + burndown SVGs), SQL Workbench (schema browser sidebar + describeSchema SDK), Policy Editor (SVG diagram canvas with arrows), Device Manager (Disks tab with partition bar + POST screen), SIEM Workbench (event detail with pivots + kill-chain investigations timeline), Network Topology (Cisco-style CLI panel with show ip interface brief / show ip route / configure terminal / ping), Notebook (matplotlib inline PNG capture + DataFrame HTML rendering). 7 tasks completed; 51 simulator unit tests pass.</td>
      <td>56.0h</td>
      <td>50m</td>
      <td>1m</td>
      <td>67.2x</td>
      <td>3360.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Built Top-3 parity catch-up via parallel sub-agents: Electron SSE event-bus client (port from web), Electron embedded Stripe subscribe flow + useRequireSubscription gate (CSP allowlist, SSE-driven completion, deep-link 3DS return), iOS ExamReviewView (new SwiftUI view + data model + 13 localization keys + xcodeproj wiring)</td>
      <td>10.0h</td>
      <td>15m</td>
      <td>1m</td>
      <td>40.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>the an internal service: generate 5 top-level hero images via an image model.1 Pro (home, about, applications, contact, portfolio), wire 7 heroes total into all top-level page templates including index.jinja behind particle canvas, WebP optimization, deploy prod+staging</td>
      <td>10.0h</td>
      <td>16m</td>
      <td>1m</td>
      <td>37.5x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Audited web client vs electron + iOS; expanded parity script (+22 features, 2 false-positive fixes, console-sim reclassification), regenerated FEATURE<em>PARITY</em>MATRIX.md, wrote parity-drift-prioritization-2026-05-07.md sprint plan with two parallel tracks for catch-up</td>
      <td>5.0h</td>
      <td>15m</td>
      <td>2m</td>
      <td>20.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Three audience-tailored &#39;Making What If?&#39; blog posts: a personal site (first-person reflective, lessons-learned tone), renkara.com (engineering build voice with ffmpeg code blocks), _shared-the product/blog (product marketing, links to /vote/). All 3 set to draft:true and dated 2026-05-12. Plus comprehensive rewrite of tools/static site generator/CLAUDE.md and README.md deploy sections documenting the actual no-CI/CD reality for marketing sites, the safe sequential build pattern (rm -rf dist .static site generator-build between stages to prevent staging→production cross-contamination), draft handling, post-deploy verification, and common-mistake catalog. ~5000 words of new prose total.</td>
      <td>16.0h</td>
      <td>60m</td>
      <td>5m</td>
      <td>16.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>the an internal service: homepage app-domain cards w/ heroes, footer text fix, replace hardcoded counts with [[canon:]] placeholders, renumber+reorder tiers (Foundational=1, Validation moved to 8, Transparency-Social swap), add 5 brand.bio.* canon keys, fix 27→canon on renkara.com, cascade tier reorder to IP portfolio docs (README, Platform<em>Architecture</em>Tiers, FAQ, Patent<em>Family</em>Grouping), recursive resolver fix (static site generator+standalone), replace cdn.tailwindcss with built tailwind-compiled.css; deploy prod+staging</td>
      <td>24.0h</td>
      <td>95m</td>
      <td>12m</td>
      <td>15.2x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Reordered Phase E queue to prioritize CompTIA after PMI for launch credibility. Wrote Phase E2 orchestrator (PMI→CompTIA→ScrumAlliance→ISACA→ISC2 at 4-way) and a race-free swap handler that polls for active python content jobs hitting zero (Phase E batch boundary), grants 15s grace for run_one post-processing, then SIGTERMs the Phase E parent and launches Phase E2 lossless — no in-flight specs interrupted. Chains forward to Phase F (Meta recovery)</td>
      <td>5.0h</td>
      <td>22m</td>
      <td>4m</td>
      <td>13.6x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Press release rewrite (live vs shipping, Autopilot/behavioral, strip jargon, anchor originating patent + perf), add deferred-content launch placeholders, correct HQ city/dateline, build pre-commit canon validator + helper script</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>6m</td>
      <td>13.3x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Port embedded subscribe flow from web client to desktop client (SubscribeModal, SubscribeScreen, SubscribeCompleteScreen, useRequireSubscription, subscription API client, CSP update, TTS gate wiring)</td>
      <td>8.0h</td>
      <td>40m</td>
      <td>5m</td>
      <td>12.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>the product launch teaser end-to-end production pipeline: 5 protagonist refs (an image model.1 Pro Ultra), 16+ character-locked stills (an image model) with multiple iterations per shot, 16 video shots (a video model) animated from locked stills, 3 music tracks (a TTS service) with iterative prompts, narration recording + ffmpeg cleanup chain (highpass, FFT denoise, declick, deesser, compressor, limiter), ffmpeg assembly with timing-derived cuts, animated LAUNCHING/MONDAY title plate (PIL+ffmpeg fades), crossfade transitions, poster prepend for messaging-app preview, 60s trim, 4 compressed delivery variants</td>
      <td>80.0h</td>
      <td>540m</td>
      <td>12m</td>
      <td>8.9x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Add ExamReviewView.swift to iOS client — per-question post-exam review screen with NavigationStack push from ExamResultsView</td>
      <td>4.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>8.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Port SSE event-bus client from web client to desktop client</td>
      <td>2.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>8.6x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>the marketing site launch pages + newsletter platform integration: built /vote/ (A/B teaser comparison with bias-neutral Video 1/Video 2 labels, JS-driven radio selection, newsletter platform public subscribe form) and /product-hunt/ (launch CTA explainer with upvote walkthrough). Custom Jinja templates extending shared the product overlay. Created newsletter platform &#39;the product Launch Feedback&#39; newsletter via MCP. Iterative bug-fix cycle: asset path resolution (/assets/ vs root), CORS-aware fetch with graceful fallback, B-version voice regeneration with George + audio level matching to A (-20dB attenuation), shot-1 poster cache-busting. Targeted S3 + CloudFront deploys via aws-cli (no CI/CD exists for marketing sites).</td>
      <td>18.0h</td>
      <td>180m</td>
      <td>8m</td>
      <td>6.0x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>the platform ADR-0002 follow-ups Thread 1+3+4: autopilot-driven harness mode in headless<em>runner (StudentProfile.harness</em>mode + <em>load</em>pairs<em>by</em>goal helper + <em>grade</em>one<em>pair goal</em>id parameter), clarifying comment block on <em>grade</em>one<em>pair documenting calibration vs optimizer validation paths, per-domain target</em>competence + competence<em>floor overrides from domain.exam</em>metadata plumbed through rest<em>gateway → orchestrator → plan</em>session.</td>
      <td>4.0h</td>
      <td>60m</td>
      <td>2m</td>
      <td>4.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>the platform multi-cohort calibration sweep proving predictor handles heterogeneous learners (Charles-style 10/10 pass at predicted 0.975 actual 0.824 ECE 0.025) — MoE design exploration deferred since single-model predictor is well-calibrated for novice/ready/heterogeneous regimes (overall Brier=0.003, ECE=0.034). Postgres recovery from Docker corruption.</td>
      <td>4.0h</td>
      <td>70m</td>
      <td>3m</td>
      <td>3.4x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>the platform predictor mixture-of-experts design exploration + Phase F (heterogeneous goal<em>target</em>accuracies in StudentProfile + per-question lookup in headless_runner) + Charles Sieg resume-modeled a cloud cert exam profile generator (70 leaf goals classified into weak/moderate/strong by keyword rules from resume) + multi-cohort sweep script (novice CLF, ready CLF, Charles-style heterogeneous ANS).</td>
      <td>5.0h</td>
      <td>90m</td>
      <td>8m</td>
      <td>3.3x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>the platform ADR-0002 + ELIF (predictor calibration robustness + gap-focused optimizer): full ADR with 12-section MADR shape (decision drivers, considered options A-F, detailed design split into 5.1 predictor + 5.2 optimizer, 5-phase implementation plan, validation criteria, 4 documented risks, decision log including a correction entry). Implemented Fix 1 (gap<em>focus urgency function), Fix 2 (competence floor on readiness), Fix 3 (two-phase state machine) behind a feature flag feature flag in autopilot</em>ranker.py + rest<em>gateway.py. Five regression tests in test</em>audit_regressions.py. Validation testing surfaced that the original diagnosis was partially wrong — the legacy ranker already picks weak goals; the decoy harness was bypassing the optimizer. Honest correction logged in ADR decision log.</td>
      <td>7.0h</td>
      <td>130m</td>
      <td>10m</td>
      <td>3.2x</td>
      <td>42.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>the marketing site title cleanup: hide redundant total pill on provider pages, factor coursetitle macro into <em>tm</em>macros, preserve Certified-in-X (ISC2/ISACA) carve-outs, strip trailing Certificate (ISACA Certificates), wire macro into 9 call sites across courses/course-page/category-page templates, deploy 3 prod + 1 staging cycles</td>
      <td>1.5h</td>
      <td>110m</td>
      <td>5m</td>
      <td>0.8x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>the marketing site courses page: tighten card cap from 20 to 15, strip Certified word from 99 course titles via template filter (cards + course pages), reorder VMware after Cisco in Networking and Salesforce/SAP/Oracle after IBM in Enterprise, deploy 1 prod + 1 staging build</td>
      <td>1.0h</td>
      <td>88m</td>
      <td>3m</td>
      <td>0.7x</td>
      <td>20.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>20</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>304.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1676</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>97</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,951,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>10.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>188.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 4 tasks cleared the 30x threshold; 6 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 7, 2026 the 68.6x ceiling came from Pre-launch burndown: fixed 3 holdout partial labs (git-lab-02, a cloud cert exam-lab-16, a cloud cert exam-lab. The work fit cleanly into 35 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 0.7x floor on the marketing site courses page: tighten card cap from 20 to 15, strip Certified word from 99 course titles vi reflects a near-1:1 ratio that reflects bounded review-heavy work where the human watches each step. The supervisory ratio (188x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 6, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-06-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-06-leverage-record.html</id>
    <updated>2026-05-06T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eleven tasks. May 6, 2026 weighted to 12.0x leverage across 189.5 human-equivalent hours in 951 Claude-minutes. Lab simulator dominated the day&#39;s volume. Supervisory leverage closed at 258.4x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 160.0x (16h human in 6 Claude-minutes) on the an internal service: generate 11 application-domain hero images via an image model.1 Pro, wire into application.jinja hero + applications.jinja card grid, W. The floor was 0.8x on the marketing site courses page: cap provider card course list at 20 items + N more arrow row across all 4 card variants (live+heroed, live+plain, soon+heroed, . Median Claude-minutes per task: 45; median human-equivalent hours per task: 16.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>the an internal service: generate 11 application-domain hero images via an image model.1 Pro, wire into application.jinja hero + applications.jinja card grid, WebP optimization (13MB→1.2MB)</td>
      <td>16.0h</td>
      <td>6m</td>
      <td>3m</td>
      <td>160.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Open-items batch 2: mass terminal-wait-output pattern fix (2158 patterns / 454 labs broken by escape mismatch — 13 labs recovered to full-score), 124 unsupported terminal-runs stripped, content cleanup, 3 audit residuals retired (one demoted to AUDIT_STRICT-only), TS/TSX/JSX support via Sucrase in node resolver, Phase-1 SIEM Workbench (search bar + alerts + investigations), Phase-1 SQL Workbench (sqlite-wasm + result grid + saved scripts), Phase-1 Project Board (Kanban + Gantt with critical-path + RAID with risk scoring), Phase-1 Notebook (Pyodide cell runner with kernel state persistence). 8 commits pushed.</td>
      <td>80.0h</td>
      <td>95m</td>
      <td>1m</td>
      <td>50.5x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Three more Phase-1 simulators: Network Topology Sandbox (BFS reachability + static routes + ping with simulated latency, 8 tests), Device Manager Panel (default A+ fleet + Settings + BIOS, 7 tests), Policy/Architecture Editor (5 document templates with required-section validation + diagram node/edge graph, 6 tests). All 3 wired into App routes; 21 new SDK resource types registered. Inventory now 15 of 16 Phase-1 shipping (only Vendor Console - Salesforce/SAP/Oracle - remains).</td>
      <td>24.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>48.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Custom the product AI sound effect library: 28 a TTS service-generated sounds (incl. Apple-style branded startup), SoundProvider+useSound hook, volume/preview settings UI, design-system event dispatches (Button/Modal/Drawer/Toast), integration into Exam + QuestionBank flows, online/offline cues</td>
      <td>16.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>32.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Designed Phase E launch sprint orchestrator (75 specs across ISC2/ISACA/PMI/ScrumAlliance/Cisco/CompTIA-backfill), auto-chained from Phase D, ramped parallelism 2→3→4-way as labs session freed memory. Diagnosed Meta phase D failures as cross-spec prereq referential integrity violations, wrote fix<em>meta</em>cross<em>spec</em>prereqs.py to strip dangling prereqs and seed 6 specs to Digital<em>Marketing</em>Associate. Wrote Phase F (Meta recovery) orchestrator and chained it after Phase E. Updated the platform/CLAUDE.md and content corpus/CLAUDE.md with permanent Trivia/Renkara exclusion + 51-suggestion free-tier expansion plan to clear 200</td>
      <td>12.0h</td>
      <td>45m</td>
      <td>12m</td>
      <td>16.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Open-items burn-down: VFS reset across labs (memory leak fix), QuickJS node resolver (CDN-loaded, ~3MB lazy), shell stdout redirection (echo &gt; file), Monaco editor listener leak fix, multi-editor-create-file DOM driver hardening, action<em>assertion</em>gap audit revert + content reverts (8 labs back to full-score), 7 conceptual itil4/togaf labs flagged shipping:false, 255 control-flow terminal-run uiSteps cleanup across 30 labs, 3 gql multi-create labs flagged shipping:false. 4 commits pushed.</td>
      <td>16.0h</td>
      <td>90m</td>
      <td>1m</td>
      <td>10.7x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>the platform Decoy memory fix: opt-in fake-embedder + thread caps cuts worker RSS ~10x (168 GB calibration sweep blow-up reduced to ~15 GB). Tests for fake-embedder contract + SentenceTransformer-not-imported guard.</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>8.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>the platform engine a flagship cert exam cold-start 500 fixes: UnboundLocalError on avg<em>per</em>q (lifted assignment to function scope) + null exam<em>structure coercion (.get default does not fire on explicit null). AST-based regression tests in test</em>audit_regressions.py.</td>
      <td>2.0h</td>
      <td>25m</td>
      <td>2m</td>
      <td>4.8x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>the platform predictor calibration: harness RNG decouple (separate observation/exam streams), [PREDICT/COLD] log, calibration-only answer<em>key endpoint, n-aware verdict bands, multi-select-bug-unmask. Five sweep iterations Phase A-E (45 to 225 journeys) producing definitive predictor calibration verdict at acc92 (well</em>calibrated, Brier=0.003), acc65 (calibrated within sampling noise), and uncovering ~12pp acc80 underconfidence as remaining model signal.</td>
      <td>16.0h</td>
      <td>360m</td>
      <td>12m</td>
      <td>2.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>the marketing site courses page: 5 provider reorders + CNCF hero generation (an image model) + template refactor to honor slug order over live-first split, deployed across 2 prod + 2 staging build cycles</td>
      <td>2.5h</td>
      <td>165m</td>
      <td>4m</td>
      <td>0.9x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>the marketing site courses page: cap provider card course list at 20 items + N more arrow row across all 4 card variants (live+heroed, live+plain, soon+heroed, soon+plain), deployed to Production + Staging with CloudFront invalidation</td>
      <td>1.0h</td>
      <td>75m</td>
      <td>2m</td>
      <td>0.8x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>189.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>951</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>44</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,453,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>12.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>258.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 4 tasks cleared the 30x threshold; 4 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 6, 2026 the 160.0x ceiling came from the an internal service: generate 11 application-domain hero images via an image model.1 Pro, wire into applic. The work fit cleanly into 6 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 0.8x floor on the marketing site courses page: cap provider card course list at 20 items + N more arrow row across all 4 car reflects a near-1:1 ratio that reflects bounded review-heavy work where the human watches each step. The supervisory ratio (258x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 5, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-05-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-05-leverage-record.html</id>
    <updated>2026-05-05T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Six tasks. May 5, 2026 weighted to 27.3x leverage across 130.5 human-equivalent hours in 287 Claude-minutes. Lab simulator dominated the day&#39;s volume. Supervisory leverage closed at 652.5x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 144.0x (60h human in 25 Claude-minutes) on Bulk-migrated 568 legacy lab step-issues: wrote scripts/migrate<em>free</em>labs.py extracting code blocks + filenames into editor-create-file uiSteps; flagged 341 tem. The floor was 8.0x on Watch sweep complete (2.6h, 1700 labs, 36 partial). Triaged: removed 103 unwired propertiesPresent in 69 cloud-cert labs (recovered 8 partial-&gt;full); fixed a cl. Median Claude-minutes per task: 60; median human-equivalent hours per task: 14.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Bulk-migrated 568 legacy lab step-issues: wrote scripts/migrate<em>free</em>labs.py extracting code blocks + filenames into editor-create-file uiSteps; flagged 341 templated-stub labs as shipping:false. Audit now zero across 2196 labs.</td>
      <td>60.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>144.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Five follow-ups: fixed 522 mismatched/wrong-type checkpoints across 245 labs (auto-detector); split 66 &amp;&amp; commands across 44 labs; flagged gql-lab-01 as shipping:false; investigated vitest hang (it is just slow, not broken); kicked off full Watch corpus; built and integrated Pyodide python resolver (CDN-loaded, lazy) with 6 unit tests; rewired 132 cat--&gt;python verifications across 45 labs.</td>
      <td>32.0h</td>
      <td>75m</td>
      <td>1m</td>
      <td>25.6x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Lab audit cleanup (32 issues→0) + per-cert lab-examples-by-simulator doc + simulator-inventory doc covering 8 shipped + 8 planned simulators</td>
      <td>14.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>24.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Reschedule the product launch May 5 -&gt; May 11 + cascade dates across plan, canonical-values.yaml, press kit, launch-content drafts, and CLAUDE.md</td>
      <td>2.5h</td>
      <td>12m</td>
      <td>4m</td>
      <td>12.5x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Deleted legacy action-dispatch.ts (20K LOC) + bridge from generic-executor; made expectedActions optional in lab-types; fixed pre-existing lab-loader test failures; ran Watch sweep on 65+ migrated labs (~92% full-score); auto-fixed 19 EDITOR::File assertion mismatches; rebuilt lab-test-manifest.</td>
      <td>14.0h</td>
      <td>80m</td>
      <td>1m</td>
      <td>10.5x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Watch sweep complete (2.6h, 1700 labs, 36 partial). Triaged: removed 103 unwired propertiesPresent in 69 cloud-cert labs (recovered 8 partial-&gt;full); fixed a cloud cert exam slots-&gt;deploymentSlots property name; flagged gql-lab-02/04 shipping:false (multi-create-file flake same as gql-lab-01); relaxed audit script to accept multi-type assertions as property-equivalent. Final: 1664+8 ~= 98.4% full-score corpus.</td>
      <td>8.0h</td>
      <td>60m</td>
      <td>1m</td>
      <td>8.0x</td>
      <td>480.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>6</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>130.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>287</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>12</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,134,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>27.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>652.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 1 task cleared the 30x threshold; 0 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 5, 2026 the 144.0x ceiling came from Bulk-migrated 568 legacy lab step-issues: wrote scripts/migrate<em>free</em>labs.py extracting code blocks + filename. The work fit cleanly into 25 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 8.0x floor on Watch sweep complete (2.6h, 1700 labs, 36 partial). Triaged: removed 103 unwired propertiesPresent in 69 cloud reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (652x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 4, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-04-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-04-leverage-record.html</id>
    <updated>2026-05-04T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-five tasks. May 4, 2026 weighted to 13.3x leverage across 479.0 human-equivalent hours in 2164 Claude-minutes. Testing dominated the day&#39;s volume. Supervisory leverage closed at 142.3x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 51.4x (6h human in 7 Claude-minutes) on Run full patent portfolio audit (3 CIP drafts Z/AA/BB, ~50 supporting docs, 5 gen scripts, 24 diagrams) and write findings report to .audits/. The floor was 1.3x on the marketing site hero deployment: found stale heroed_providers template allowlist (22/56 providers), expanded to include all 34 missing (EC-Council, Cisco, IB. Median Claude-minutes per task: 26; median human-equivalent hours per task: 8.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Run full patent portfolio audit (3 CIP drafts Z/AA/BB, ~50 supporting docs, 5 gen scripts, 24 diagrams) and write findings report to .audits/</td>
      <td>6.0h</td>
      <td>7m</td>
      <td>1m</td>
      <td>51.4x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Decoy hardening: pass<em>probability vs expected</em>score_pct field split, binned exam-pass calibration analyzer (Brier+ECE), audit chain, credentials, per-source decay; 48 new tests + 6 pre-existing test contract fixes</td>
      <td>16.0h</td>
      <td>22m</td>
      <td>8m</td>
      <td>43.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Wire admin dashboard scaffolds: 4 student-detail tabs, Session Inspector, Domain Detail, viz demo gate, dead Dashboard cleanup, help text refresh, fixed pre-existing banner test</td>
      <td>18.0h</td>
      <td>26m</td>
      <td>4m</td>
      <td>41.5x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Free-tier matching: design + ship 3-phase plan to surface free content alongside paid certs. Phase 1: cert→free adjacency JSON (92 certs / 646 pairs) generated from auditable Python literals; an internal component Pass 4 back-fill with precedence rules. Phase 2: career-stage reranker (early/mid/senior + cs<em>degree/mba/phd signals) that boosts/demotes AND injects free-tier rows. Phase 3: match</em>reason field threaded DomainMapping → DomainSkillMapping → DomainAssessment → StudentTargetDomainView. 5 commits across 2 repos, 307 tests pass at 86.06% coverage, 45 new tests added.</td>
      <td>24.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>41.1x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Switch beta<em>certs ($29/$279) coupons to early</em>adopter<em>certs ($39/$399); rename BETA</em>DISCOUNT<em>* → EARLY</em>ADOPTER<em>DISCOUNT</em>* env vars; update billing service backend (config, coupon service, dev mock, tests, docs, buildspec, SSM param paths), web client LaunchSpecial in 2 places, and 7 marketing sites cross-promoting Certs</td>
      <td>8.0h</td>
      <td>12m</td>
      <td>4m</td>
      <td>40.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Extended free-tier adjacency catalog from 92 to 662 certs (84% of paid catalog). 22 new clusters covering Salesforce/SAP/Oracle/IBM/VMware/EC-Council/GIAC/CNCF/GitHub/Databricks/HashiCorp/HRCI/TOGAF/ITIL/RedHat/Meta/CFA/SixSigma/ICCP/etc., with sub-keyword routing for the multi-track providers (admin/dev/data/architect for Salesforce; functional/dev/data for SAP; DB/dev/cloud for Oracle; cloud/data-AI/security/dev for IBM). Discovery loop walks specs/ and applies provider-specific rules. Documented maintenance procedure in core/content corpus/CLAUDE.md so future authors update the table when adding new domains. 14 adjacency tests + full suite 308 pass at 86.24%. 3 commits across 3 repos.</td>
      <td>16.0h</td>
      <td>25m</td>
      <td>4m</td>
      <td>38.4x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Full deployment readiness audit (Phase 0 + 10 parallel per-repo agents covering 67 repos + Tier 1 mechanical fixes — canonical.json/CLAUDE.md/full-readiness-audit.md updated for 11 new repos and bumped spec/lab/synth/claim totals; Phase 0 PASS post-fix)</td>
      <td>12.0h</td>
      <td>19m</td>
      <td>2m</td>
      <td>37.9x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Resolve all 24 audit findings: integrate an IP filing across canonical.json, 3 counsel-packet docs, 5 public docs, NDA, Invention_List, a brand asset, PTM, SysArch, IP browser parser+metadata, audit doc; rewrite AA prior-art prose; generate BB PDF package; commit and push 3 repos</td>
      <td>24.0h</td>
      <td>40m</td>
      <td>1m</td>
      <td>36.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Engine: 4 new admin endpoints (per-session interactions, per-entity sessions, exam attempts, per-domain analytics) + exam_attempts migration/model/repo + 7 unit tests. Admin-service: 4 RPC proxies. admin dashboard: wire all 4 into Session Inspector, SessionsTab, ExamsTab, Domain Detail.</td>
      <td>36.0h</td>
      <td>73m</td>
      <td>5m</td>
      <td>29.6x</td>
      <td>432.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Build monorepo-wide canonical placeholder system: YAML source of truth + standalone resolver + static site generator CMS preprocessor; migrate the an internal service, press-kit, launch-content, patent portfolio public docs, IP browser, core/content corpus; integrate audit cross-check</td>
      <td>16.0h</td>
      <td>35m</td>
      <td>8m</td>
      <td>27.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Bug-fix bundle: an internal component noise floor (945 false matches → 38 real ones via stricter substring rules + 0.10 → 0.15 relevance threshold), cap recommended courses at 3 (was 50), onboarding-at-first-login gate via AuthCallback (with redirect-after preservation), and catalog-style CertCards in Resume Review section (extracted CourseCard to shared component, fuzzy-matched cert names against catalog). 4 commits.</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>3m</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Plan-only Fargate migration extension: 3 more TF stacks (admin-service, recruiter backend, enterprise backend) + per-service docs (migration-concerns, cutover-runbook, cost-analysis, buildspec.fargate.yml.example) + master runbook rewritten for full 7-service fleet with EC2-termination cost scenario.</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Run the platform content audit + write 2026-05-04 report</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>1m</td>
      <td>22.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Write pytest unit tests for admin dashboard backend to push coverage from 37% to 87%</td>
      <td>8.0h</td>
      <td>22m</td>
      <td>5m</td>
      <td>21.8x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Plan-only Fargate migration: 5 new TF stacks (the platform-services-cluster + auth/purchase/notification/onboarding) + per-service docs (migration-concerns, cutover-runbook, cost-analysis, buildspec.fargate.yml.example) + master cutover runbook with cost analysis. No infra applied — all files for daylight review.</td>
      <td>12.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>20.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Threaded solo-founder + Claude in 74 days angle through press kit (rewrote lede, added Built by One Person and Claude section, updated bio/FAQ/fact sheets) with verified LoC, test, and repo counts</td>
      <td>4.0h</td>
      <td>14m</td>
      <td>3m</td>
      <td>17.1x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Create CIP BB patent application skeleton (Posterior-Bayesian Adaptive Probing - the platform Sextant) with 20 claims, 8 Mermaid figures, and full portfolio cross-document updates (CLAUDE.md, AGENTS.md, README.md, Diagram_List.md, 3 gen scripts)</td>
      <td>8.0h</td>
      <td>28m</td>
      <td>3m</td>
      <td>17.1x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Create english.the marketing site (a language proficiency exam &amp; a language proficiency exam coming-soon site, Summer 2026 launch). Cloned test-prep skeleton, customized site.yml/index.jinja/content for English-language testing audience, generated 10 site-specific hero compositions (40 image variants, 16:9 desktop and 3:2 mobile, dark/light pairs locked via an image model img2img), provisioned AWS infra (S3 bucket english-the product-production, CloudFront E51I2L5WDXNNS, ACM cert, Route 53 record) via rendition --provision, built and uploaded to S3 with CloudFront invalidation, created GitHub repo CharlesSieg/english.the marketing site (private), updated websites/CLAUDE.md inventory.</td>
      <td>8.0h</td>
      <td>28m</td>
      <td>3m</td>
      <td>17.1x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Press kit corrections: HQ Illinois-&gt;Keller Texas, sanitized founder bio (removed sensitive patent claim detail), shifted multi-platform launch May 18-&gt;May 25 across all docs and cascading dates, propagated canonical press email</td>
      <td>2.5h</td>
      <td>9m</td>
      <td>2m</td>
      <td>16.7x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Press kit assembly + launch plan rewrite (strip beta, drop marketing platform, remove testimonials) for the product AI May 4 launch</td>
      <td>6.0h</td>
      <td>22m</td>
      <td>4m</td>
      <td>16.4x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Reorder tiers on the an internal service (5 jinja templates): renumber so Adaptation is Tier 6 between Planning and Delivery, Validation is Tier 12; update 13 tiers -&gt; 12 and 31 -&gt; 32 branded clusters; physically reorder list entries so render order matches; verify no patent-sensitive terms leaked</td>
      <td>2.0h</td>
      <td>8m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Content audit follow-ups: backfill 4 manifests, explain manifest &lt;100% jump, identify dropped packages</td>
      <td>1.0h</td>
      <td>4m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>web client: fix /subscribe paywall on already-subscribed accounts (entitlements gate + dashboard toast); axe a11y sweep — fix PageNotFound color-contrast and prune dead routes</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Greenfield Terraform module for web client in infra/terraform stack/ — S3+OAC+CloudFront+Stripe-friendly RHP+/.well-known carve-out+pipeline; deployed parallel-run at app-v2.the marketing site</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>3m</td>
      <td>13.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Resume content corpus synthesis chain after crash: triaged state across phase D synth + CompTIA tribunal, wrote run<em>comptia</em>tribunal<em>resume + run</em>phase<em>d</em>certs_resume orchestrators with status=live filter (so already-flipped specs aren&#39;t clobbered), chained them under a single nohup orchestrator with 4-way then dialed to 2-way parallelism for thermal headroom, launched recovery for 6 CompTIA tribunal specs + 20 Phase D draft specs</td>
      <td>8.0h</td>
      <td>35m</td>
      <td>6m</td>
      <td>13.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Reorder portfolio tiers 1-12, insert Adaptation (BB) between Planning and Delivery; rewrite Platform<em>Architecture</em>Tiers.md (was 10 tiers without Validation/Adaptation, now 12 with full Inputs/Outputs and complete cluster map); rewrite FAQ.md Q46 (was using pre-resequencing letter assignments) and FAQ<em>Simplified Q46; update README tier table; update Patent</em>Family_Grouping numbered list</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>13.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Write vitest unit tests for admin dashboard REST+SSE migration: restClient, SseClient, hooks, useEngineSSE, useAdminRealtime — 152 tests, 90%+ coverage</td>
      <td>6.0h</td>
      <td>28m</td>
      <td>5m</td>
      <td>12.9x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Built tokenization machinery (canonical<em>values.yaml + render</em>kit.sh), shifted launch to Tue May 5 with same-day Product Hunt, dropped wire spend per bootstrapped marketing plan, rewrote launch execution plan, drafted Show HN + Product Hunt + LinkedIn + Twitter + 5 Reddit posts + video script - all tokenized</td>
      <td>8.0h</td>
      <td>38m</td>
      <td>5m</td>
      <td>12.6x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>@the platform/subscribe-react 0.1.5: 1Password / browser-autofill compatibility — <form> wrapper + visually-hidden cc-* anchor inputs + type=submit Pay button</td>
      <td>2.0h</td>
      <td>10m</td>
      <td>2m</td>
      <td>12.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Diagnose &amp; fix Stripe Basil API breaking change in billing service (Invoice.payment<em>intent → confirmation</em>secret)</td>
      <td>3.0h</td>
      <td>15m</td>
      <td>3m</td>
      <td>12.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Stripped patent-internals leakage from press kit (kernel mechanism, variable names, claim numbers, Bayesian/BKT, contrastive pairs); kept defensible outcome metrics only (latency, energy)</td>
      <td>2.0h</td>
      <td>11m</td>
      <td>3m</td>
      <td>10.9x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Migrate admin dashboard from WebSockets to REST + SSE — backend SSE infra, RPC-over-REST gateway, Redis viz publishers, frontend RestClient/SseClient/hooks, 44 page migrations, viz SSE wiring, full WS code deletion. 336 backend tests at 83% coverage, 152 frontend tests at 85-100% coverage on new modules.</td>
      <td>16.0h</td>
      <td>90m</td>
      <td>6m</td>
      <td>10.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>the marketing site full hero corpus regen (813 per-course + 55 provider pairs) + mobile theme/menu/scroll-lock + tier-dupe fix + card layout + nav cleanup</td>
      <td>80.0h</td>
      <td>450m</td>
      <td>25m</td>
      <td>10.7x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Debug+fix Apple Pay webhook chain: rotate Stripe webhook secret; fix billing service Stripe SDK 15.x to<em>dict</em>recursive rename, Decimal JSON encoding, missing local sub-row create in production; live-patch container, replay missed events, manually activate stuck users sub</td>
      <td>8.0h</td>
      <td>50m</td>
      <td>4m</td>
      <td>9.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Dark-mode bridge for subscribe modal + drop spurious enroll-on-login loop + ship engine is_seeded() so catalog-proficiency stops 502&#39;ing</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>4m</td>
      <td>9.6x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>the an internal service updates: remove the platform trademark statement, remove Trivia domain, wire contact form to newsletter platform public-subscribe (with honeypot, async JS handler, success/error states), fix tier-cluster counts in portfolio (add Validation/Adaptation tiers), add 5 missing clusters (Manifest/Clarity/Ensemble/Decoy/Sextant), build _icons.jinja Lucide macro with 36 distinct icons, replace generic-circle SVGs across clusters/index/applications pages</td>
      <td>5.0h</td>
      <td>32m</td>
      <td>4m</td>
      <td>9.4x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Verified manifest regen for +60 free labs, ran watch sweep at 6 workers, fixed md-lab-15 + yj-lab-15 (50-&gt;100% score), capped Playwright workers for memory safety</td>
      <td>4.0h</td>
      <td>26m</td>
      <td>5m</td>
      <td>9.2x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Cut over web client from legacy terraform/client/ to new terraform stack/web client/ — destroyed legacy stack (10 resources), claimed app.the marketing site alias, flipped DNS, renamed pipeline</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>2m</td>
      <td>8.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Engine readiness calibration gap — root-cause investigation, hierarchical prior fix in /autopilot/next, decoy omniscient + target_accuracy debug modes, per-question telemetry, calibration sweep + multi-exam validation across CLF/a cloud cert exam/CDL</td>
      <td>24.0h</td>
      <td>180m</td>
      <td>15m</td>
      <td>8.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>@the platform/subscribe-react: theme-aware Stripe Elements appearance, host-font in iframe, color-mix loading skeleton, centered Preparing label, US billing default — published 0.1.2 → 0.1.4</td>
      <td>3.0h</td>
      <td>25m</td>
      <td>4m</td>
      <td>7.2x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Diagnose + fix prod errors in daily study session: CSP blob media-src (terraform applied), 422 fractional minutes (autopilot.ts rounding), 404 cognitive-state (full route impl: engine helper+model+route+consumer wiring, gateway client+route, 35 tests, doc fixes across 3 repos)</td>
      <td>12.0h</td>
      <td>105m</td>
      <td>4m</td>
      <td>6.9x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Resume adaptive engine optimization: regression-test full probing protocol, flip cloud flag, apply Decoy zero-sweep backend diffs, bring up service stack, launch pilot</td>
      <td>6.0h</td>
      <td>60m</td>
      <td>6m</td>
      <td>6.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Per-site full-bleed hero rotation across 7 the product sites: 70 unique compositions, 280 images (10 desktop pairs at 16:9 + 10 mobile pairs at 3:2 per site), dark/light locked via shared seed + an image model img2img; gaze on screen, identical environment between variants. Built orchestrator with rate-limit retry + jitter, rewrote 7 index.jinja templates to full-bleed pattern with picture/srcset for mobile, built and pushed all 7 site repos.</td>
      <td>16.0h</td>
      <td>207m</td>
      <td>8m</td>
      <td>4.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Fixed 4 lab-runner UX bugs (guided auto-advance, Try Again reset to guided, loading spinner with cancel, TTS subscription/settings gate); replaced lab-frame TTS monkey-patches with setTtsConfig API; deployed and verified on prod</td>
      <td>6.0h</td>
      <td>85m</td>
      <td>8m</td>
      <td>4.2x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>the marketing site hero deployment: found stale heroed_providers template allowlist (22/56 providers), expanded to include all 34 missing (EC-Council, Cisco, IBM, Oracle, SAP, VMware, ISC2, etc.), deployed to Production + Staging via safe sequential build with CloudFront invalidation, verified live</td>
      <td>2.0h</td>
      <td>93m</td>
      <td>3m</td>
      <td>1.3x</td>
      <td>40.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>45</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>479.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>2164</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>202</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>11,026,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>13.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>142.3x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 8 tasks cleared the 30x threshold; 3 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 4, 2026 the 51.4x ceiling came from Run full patent portfolio audit (3 CIP drafts Z/AA/BB, ~50 supporting docs, 5 gen scripts, 24 diagrams) and wr. The work fit cleanly into 7 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 1.3x floor on the marketing site hero deployment: found stale heroed_providers template allowlist (22/56 providers), expande reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (142x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 3, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-03-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-03-leverage-record.html</id>
    <updated>2026-05-03T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-four tasks. May 3, 2026 weighted to 35.1x leverage across 1767.5 human-equivalent hours in 3019 Claude-minutes. Testing dominated the day&#39;s volume. Supervisory leverage closed at 380.1x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 171.4x (600h human in 210 Claude-minutes) on Code Sandbox migration Waves 2-6 — 758 labs migrated to sandbox schema and lifted to strict-pass via service-cluster fixes (echo injection, CODE/SQL/EDITOR reso. The floor was 1.8x on the product A-glyph and purple-megaphone favicon replaced with the platform node-mesh bird across fleet (favicon multi-res, header/footer mark, about page full-. Median Claude-minutes per task: 30; median human-equivalent hours per task: 12.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Code Sandbox migration Waves 2-6 — 758 labs migrated to sandbox schema and lifted to strict-pass via service-cluster fixes (echo injection, CODE/SQL/EDITOR resource type repairs, name filter corrections). Ship-ready 1248 -&gt; 1946 (91% of full 2136-lab corpus). Cloud-cert 100%, sandbox-tier 97%. +6 over the 1940 design-doc target.</td>
      <td>600.0h</td>
      <td>210m</td>
      <td>15m</td>
      <td>171.4x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Innovation ideation: 20 features for web client + admin dashboard via /invent skill, then detailed multi-phase implementation plans (with Description + ELIF + files + data flow + acceptance criteria) written to docs/feature-plan-2026-05.md in both repos</td>
      <td>16.0h</td>
      <td>8m</td>
      <td>4m</td>
      <td>120.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Wave 2-5 sandbox lab migration: 315 labs (CloudFormation 30, Pulumi 30, Programming 150, DevOps 105) + pre-existing TS error fix</td>
      <td>80.0h</td>
      <td>45m</td>
      <td>10m</td>
      <td>106.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Code Sandbox Phases 6-8: extension system (SandboxAPI, ExtensionManager, 8 bundled extensions, ExtensionsPanel), lab driver bridge (10 UIStep actions, propertiesContain dual-mode, editor-client, migration script), Phase 8 polish (a11y, light mode, Pulse analytics, CSP checklist, design doc §19), terraform-lab-01 migration</td>
      <td>168.0h</td>
      <td>95m</td>
      <td>8m</td>
      <td>106.1x</td>
      <td>1260.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Resume onboarding plan recovery: ship pending onboarding service (study calendar app + live engine proficiency + an internal component discovery), ship web client (editable ResumeReviewSection + ELO band labels + delete InitializationFlow), and close Phase 4 (test<em>resume</em>upload + coverage 75 → 80). 4 commits across 2 repos, 262 tests pass at 85.1% coverage.</td>
      <td>14.0h</td>
      <td>8m</td>
      <td>3m</td>
      <td>105.0x</td>
      <td>280.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Create the platform patent an IP filing (Decoy / retrieval-constrained synthetic entity validation): 580-line USPTO-format spec with 20 claims, 8 Mermaid figures, and full cross-document sync across CLAUDE/AGENTS/README/Patent<em>Family</em>Grouping/Valuation/Cost<em>Analysis/System</em>Overview/Day<em>In</em>The<em>Life/NDA/Diagram</em>List/FAQ/Invention<em>List/Reading</em>Order/Platform<em>Architecture</em>Tiers/Reference_Architecture/gen-cip/gen-figures/gen-screen-svgs scripts (counts updated: 27→28 filings, 593→613 claims, 215→223 figures, 151→156 inventions, 30→31 clusters)</td>
      <td>65.0h</td>
      <td>38m</td>
      <td>3m</td>
      <td>102.6x</td>
      <td>1300.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Adaptive Probing Protocol full implementation: ADR-0001 Phases 0-8. New probing/ package with BetaPosterior+PosteriorStore, telemetry-weighted observation strength, stepwise difficulty escalation k-index, posterior-parameter activation spreading with manifold-derived edge weights and asymmetric decay, D-optimal cold-start coverage, mastery predicate + spaced review, in-session pivots from protocol state, hashed deterministic tie-breaker. SequencingConfig settings schema. Wired into rest<em>gateway answer-submit handlers behind a feature flag feature flag (default off). Knowledge-graph adjacency translator bridging node-level edges to pair-level posteriors. 92 new unit tests passing; full 3412-test suite still green. Decoy-style in-process validation simulator at scripts/run</em>probing<em>sim.py: 5 domains (AWS CLF, Azure a cloud cert exam, GCP CDL, CompTIA Security+, HashiCorp Terraform) x 5 conditions x 4 learner profiles = 100 simulations; results at .tmp/probing</em>sim_results.md.</td>
      <td>130.0h</td>
      <td>90m</td>
      <td>12m</td>
      <td>86.7x</td>
      <td>650.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>web client: implemented Phases 0/1/2/3/5/6 from May feature plan — cognitive-state steering POST + indicator (Session.tsx + cognitiveDetect.ts + tests), full-horizon ForecastAreaChart on CourseDetail + AnalyticsPanel, exam debrief Fix-These-Gaps section grouped by domain in ExamResults, auto-narrate verdict+explanation after each answer + Settings toggle, RadarChart fingerprint + DriftActionCard coaching cards backed by useCoachingData TanStack hook. Typecheck clean, all 200 vitest tests pass, vite build green</td>
      <td>32.0h</td>
      <td>26m</td>
      <td>3m</td>
      <td>73.8x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Cross-repo audit of study session reminder feature: engine, messaging service, API gateway gateway, web client — what is real, stubbed, absent. Produced prioritized tier 1-5 implementation plan including W3C web push, Twilio Verify, populated template context.</td>
      <td>6.0h</td>
      <td>7m</td>
      <td>3m</td>
      <td>51.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>web client lint triage: 4187 problems → 0. Excluded vendored reference-build/<em></em> bundles (root cause of ~3900 errors), relaxed no-console to allow warn/error globally, added e2e/scripts override for test-friendly rules, stripped 31 newly-redundant eslint-disable directives across 17 files, added 6 intentional exhaustive-deps disables with rationale comments. Typecheck/tests/build all green</td>
      <td>6.0h</td>
      <td>8m</td>
      <td>1m</td>
      <td>45.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>the platform-console-sim Phase 5: validators, pseudo-executors (Terraform/CFN/Pulumi), AWS/gcloud/az CLI emulators, ProblemsPanel, Monaco markers wiring, 54 new tests, provider catalog (760 entries)</td>
      <td>40.0h</td>
      <td>55m</td>
      <td>5m</td>
      <td>43.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Full patent audit on CIP applications Z and AA — 97 checks across 7 phases, 25 findings</td>
      <td>6.0h</td>
      <td>10m</td>
      <td>5m</td>
      <td>36.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Gate TTS behind subscription: useRequireSubscription hook + paid-access selector, TTSProvider.speak() chokepoint gate (manual=paywall, auto=silent), SpeakButton lock badge, Settings premium pill + toggle interception, Electron tts.ts subscription API surface (setSubscribed/setSubscriptionUnlock + source param), 11 new hook tests, axe a11y mock fixed</td>
      <td>10.0h</td>
      <td>18m</td>
      <td>4m</td>
      <td>33.3x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>admin dashboard: PageHelpBanner across every page+tab, viz WSS scheme fix, engine session realtime publisher (events.engine.session.*), four canonical docs sync (requirements, design, testing-strategy, ui-design-brief)</td>
      <td>16.0h</td>
      <td>30m</td>
      <td>6m</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Run diagram audit on CIP Z and AA (44 findings: 42 FAIL, 2 WARN), fix all by rewriting 11 figures (7 Z + 4 AA) plus per-figure exceptions for legitimate method-loop back-edges, then add Reference Numeral Discipline prevention guidance to repo CLAUDE.md codifying the 5 recurring failure modes (parent-numeral duplication, infrastructure-misassignment, cross-figure conflict, dotted-vs-solid choice, spec-vs-diagram coverage). Committed and pushed.</td>
      <td>12.0h</td>
      <td>23m</td>
      <td>2m</td>
      <td>31.3x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Patent audit bookkeeping: 19 items across patent-portfolio, architecture, and IP browser repos (README I-Y→Filing, Diagram_List move, App N title, Z/AA in checklists/matrices/appendices, IP browser AA regex fixes, CLAUDE.md count update)</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>5m</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Marketing rollout for May 2026 features: updated master feature list (4 enhanced + 2 new entries across 3 sections), 3 shared overlay feature pages (pass-prediction adds Readiness Forecast step, exam-simulator adds Fix These Gaps step, adaptive-learning adds Cognitive State step), and the marketing site home page feature card grid (3 cards reworded + 1 new Behavioral Coaching card). Build clean. Innovation backlog from /invent skill also committed. Inadvertent bundling of pre-existing WIP into the marketing site index.jinja flagged for user review</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>30.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Run full patent audit scoped to CIP Z and AA, then remediate all 9 findings (3 CRITICAL: gen scripts Filing/ refs; 4 MEDIUM: AA abstract over 150 words, AA learner/student outside BACKGROUND, Reading_Order stale, uncommitted changes; 2 LOW: AA Claim 19 said back-ref, the product spec stale). Committed and pushed to IP portfolio + architecture docs.</td>
      <td>6.0h</td>
      <td>12m</td>
      <td>2m</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>ADR-0001 rewrite as Adaptive Probing Protocol with Bayesian Posterior + Activation Spreading. Deep comparison Bayesian vs spreading activation, synthesis into unified design modeling human assessment behavior (easy-medium-hard with mastery confirmation via stepwise difficulty escalation), CAT/IRT framing, Beta posterior with telemetry-weighted updates, posterior-parameter activation spreading (alpha+beta on graph edges), D-optimal cold-start coverage criterion, mastery as joint posterior-moment predicate, autopilot ranker integration as natural extension not parallel system, full worked example with concrete posterior dynamics, component diagram + state machine diagram, comprehensive Decoy validation plan with phase ablation, honest 8-risk evaluation. Patent strategy corrected after user noted provisionals are immutable post-filing (35 USC 111b): new CIP captures entire system, with conversion-to-nonprovisional upside as independent path. Old ADR deleted, README updated.</td>
      <td>24.0h</td>
      <td>50m</td>
      <td>8m</td>
      <td>28.8x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Code Sandbox: cracked 1,021/1,021 cloud-cert (pmle-lab-18 Vertex AI defensive guard fix), wrote 1,657-line code-sandbox-design.md, marked 150 CompTIA labs non-shipping (manifest 2,135 -&gt; 1,985), shipped Phase 0 spike (Monaco + xterm.js + Allotment routed at /sandbox), then Phases 1-3 via sub-agent (VFS 57 unit tests, IDB cache, Zustand store, ActivityBar/FileExplorer/EditorHost/TerminalHost/StatusBar/CommandPalette, 4 command resolvers).</td>
      <td>120.0h</td>
      <td>260m</td>
      <td>12m</td>
      <td>27.7x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>ADR-0001 spreading activation + telemetry-weighted sequencing design (architecture docs). Investigated IAM clustering bug in sequencing engine, designed spreading activation over knowledge graph with telemetry-modulated decay, telemetry signal taxonomy, two-channel proficiency split (direct + inferred), cross-activity in-session rotation policy, mastery gate, hashed tie-breaker, Decoy validation plan with 8 metrics and rollout-blocking thresholds, patent claim analysis, six-risk honest evaluation, integration with existing autopilot ranker WIP. Created adr/ folder with README and ADR-0001.</td>
      <td>16.0h</td>
      <td>35m</td>
      <td>6m</td>
      <td>27.4x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Cross-repo doc rollout for new POST /api/v1/sessions/:id/cognitive-state route: API gateway 4 docs (design + requirements FR-016/017 + technical-design route map + testing-strategy with full unit+integration test inventory enforcing fire-and-forget contract), platform engine 3 in-repo docs (CHANGELOG entry, README subsystem row, CLAUDE architecture bullet), and cross-repo architecture docs Application_Interface.md §3.4 with formal spec for postCognitiveState as an IP filing mirror channel</td>
      <td>4.0h</td>
      <td>9m</td>
      <td>1m</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Patent + diagram audits on CIP Z and AA (3 parallel agents)</td>
      <td>3.0h</td>
      <td>7m</td>
      <td>2m</td>
      <td>25.7x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Engine internal-only refactor across 3 repos: remove dual-auth (JWT + admin) → X-Service-Key only, delete jwt_auth + competitive REST/WS + /labs + /assets mounts in engine; drop competitive proxy in gateway; rip out competitive pages/hook/api/i18n/routes/env-flag/help-docs in web; -1700 LOC engine, -1100 LOC web; CLAUDE.md updates</td>
      <td>12.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>24.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Reminder finalization end-to-end: web<em>push template + autopilot</em>due schedule rewire (notif), course<em>slug plumbing engine→client, VAPID keypair to SSM + buildspec env injection, EventBridge API Destination + 7 schedule rules to /execute, Dockerfile + ruff fixes, schedules created in prod via API; smoke confirms full pipeline EventBridge→notif→engine→targeting→render→web</em>push</td>
      <td>14.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>24.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>websites/ sweep: commit and push 13 site repos plus the websites umbrella (rendered→dist migration, patent counts 28/613, shared overlay legal/blog refresh, charlessieg leverage records, the product.com Pulse tracking)</td>
      <td>3.0h</td>
      <td>8m</td>
      <td>1m</td>
      <td>22.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Week 2 of study-session reminder push: W3C Web Push end-to-end backend + gateway. pywebpush + cryptography deps + VAPID config; alembic migration 007 + PushSubscription SQLAlchemy model; WebPushProvider with sent/gone/failed outcomes + 410 cleanup + asyncio.to<em>thread non-block; </em>send<em>web</em>push send-service branch with subscription enumeration and dead-row purging; four push API routes (VAPID public key, register, list, delete); API gateway NotificationServiceClient + four proxy routes; one-time VAPID key generator script + single-file smoke test HTML page. Tests: 39 new across both repos, full suites green (messaging service 280, API gateway 98).</td>
      <td>28.0h</td>
      <td>75m</td>
      <td>2m</td>
      <td>22.4x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Deep audit of onboarding service: HTTP API surface, adaptive calibration mechanics, cold-start prior generation, persistence model, engine integration, and gap analysis</td>
      <td>8.0h</td>
      <td>22m</td>
      <td>8m</td>
      <td>21.8x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Adaptive Probing Protocol exam-readiness journey simulator + confidence-blended candidate ranking. Built scripts/run<em>exam</em>journey<em>sim.py: synthetic learners with cognitive-transfer learning model study via autopilot-style daily sessions until engine declares exam-readiness, then take blueprint-stratified practice exam sampled from real domain pair pool. Updated manifold</em>candidate_generator confidence-blend formula so under-evidenced nodes do not outrank never-touched siblings. Ran across 5 cert domains x 5 learner profiles. Honest findings: 3/25 journeys reach readiness, all 3 pass exam with -0.09 mean calibration gap; remaining 22 reveal a candidate generator concentration bug that is independent of the protocol design. Cloud rollout NOT recommended until concentration is fixed; a feature flag default stays at off. Two commits in core/platform engine.</td>
      <td>24.0h</td>
      <td>70m</td>
      <td>5m</td>
      <td>20.6x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Week 1 of study-session reminder push: 5-week implementation plan + executed Week 1. Twilio asyncio.to<em>thread fix; engine GET /api/v1/autopilot/due endpoint with timezone-aware preferred</em>times window math; per-recipient template context (Recipient.context<em>overrides + schedules.py merged context); manual trigger</em>run wired to shared <em>execute</em>schedule; in-process EventBridge cron parser + local tick simulator for dev. 14 files touched across platform engine + messaging service, 87 new tests, full suites green (255 + 247).</td>
      <td>32.0h</td>
      <td>95m</td>
      <td>8m</td>
      <td>20.2x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Deep audit of the platform engine cold-start proficiency and onboarding→prior seeding chain (8 question items: proficiency model, cold-start path, onboarding ingest, cross-domain transfer, evidence chain, readiness predictor, autopilot Day 1 integration, gaps)</td>
      <td>6.0h</td>
      <td>18m</td>
      <td>8m</td>
      <td>20.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Week 3 of study-session-reminder push: web client Web Push opt-in (VAPID client, push SW, usePushSubscription hook, settings toggle, tests) + the platform CLAUDE.md worker-as-EventBridge-Lambda rule</td>
      <td>8.0h</td>
      <td>25m</td>
      <td>3m</td>
      <td>19.2x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Deep onboarding UX audit — web client (Onboarding.tsx, InitializationFlow.tsx, Calibrate.tsx, profile tabs, api gateway) + onboarding service backend route table. Documented all gaps, stubs, and API routing architecture.</td>
      <td>7.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>16.8x</td>
      <td>84.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Adaptive Probing Protocol journey breakthrough + cloud rollout. Diagnosed candidate-generator orphan-node bug: ranker iterated domain.nodes which omitted 372 of 400 valid pair-having nodes on CompTIA Security+ (and similar packages), locking the engine onto a 7% subset. Switched iteration to pairs<em>by</em>node and added a two-tier exploration phase rank (untouched nodes sort first). Result on full 5-domain x 5-learner journey sweep: 13/25 reach engine-declared readiness (was 3/25), 13/13 pass practice exam (was 3/3), mean exam score 88.2%, mean calibration gap -0.10 (engine slightly under-predicts; conservative). All 3412 engine unit tests + 92 probing tests still green. Flipped cloud profile probing<em>protocol to posterior</em>spread. Pushed both repos to origin/main.</td>
      <td>16.0h</td>
      <td>60m</td>
      <td>5m</td>
      <td>16.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>the marketing site catalog sync (819 files), staging deploy, plus static site generator CTR<em>LOGS</em>PATH env var, build.sh log re-routing across 10 sites, websites umbrella .gitignore, _output cleanup</td>
      <td>6.5h</td>
      <td>27m</td>
      <td>3m</td>
      <td>14.4x</td>
      <td>130.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Deploy embedded subscribe flow to prod: init/push @the platform/subscribe-react github repo, publish lib to CodeArtifact 0.1.0, pin web app to ^0.1.0, push billing service (intent + coupons endpoints), push web client (flip-card + TTS gate), verify backend endpoints respond and react vendor chunk contains all FlipCard/EmbeddedSubscribe/Stripe/intent code</td>
      <td>6.0h</td>
      <td>25m</td>
      <td>5m</td>
      <td>14.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Cloud-cert lab Batch 5 waves 2-5 (final push to clear corpus): a cloud cert exam mop-up (24 labs), a cloud cert exam cluster (25 labs), a cloud cert exam/a cloud cert exam/MLA-C01 wave (11 labs), PCDE cluster (8), PCA (3), PCSE (3), singles (6). 957 -&gt; 1,020/1,021 cloud-cert ship-ready (99.9%); +180 non-cloud incidentals = 1,200 total ship-ready. Only pmle-lab-18 hard-fail remains.</td>
      <td>80.0h</td>
      <td>340m</td>
      <td>4m</td>
      <td>14.1x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Sweep canonical numbers across portfolio docs (Z+AA propagation, 13 files)</td>
      <td>2.0h</td>
      <td>9m</td>
      <td>2m</td>
      <td>13.3x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>New platform engine Terraform stack + volatile-data preservation runbook: POST /admin/domains/push-to-s3 endpoint (model + handler + IAM perms), 4-curl preservation runbook in CLAUDE.md, 1027 LOC of TF (main/variables/security/internal-alb/compute/user-data/dns/pipeline/outputs/README), bucket-prefix bug fix (domains/ vs packages/, 219 files / 181 MB pushed), em-dash fix, terraform apply provisioning v2 engine in parallel</td>
      <td>20.0h</td>
      <td>90m</td>
      <td>6m</td>
      <td>13.3x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Fix prod blockers on embedded subscribe: add intent + recompute + coupons proxy routes to API gateway gateway (10 new tests, 91 passing), switch FlipCard from aria-hidden to inert (Chrome console error fix), bump @the platform/subscribe-react 0.1.0 → 0.1.1, redeploy gateway + web, verify both live (gateway returns 401 not 405, web bundle hash flipped, react chunk has inert + intent + coupons + loadStripe)</td>
      <td>4.0h</td>
      <td>22m</td>
      <td>3m</td>
      <td>10.9x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Engine internal-ALB cutover via AWS CLI (TF state too drifted to apply): create internal-only ALB + SG + listener + TG, register engine, swap engine.the marketing site R53 alias, drop public-ALB listener+TG, set CW retention 1d. Doc the desired end-state in TF (alb.tf stub + new internal-alb.tf + dns.tf swap)</td>
      <td>6.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>10.3x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Multi-day the product AI marketing site overhaul: observability tool RUM SDK schema fix and deploy across 5 the product sites with CORS verification; favicon + Tailwind compile pipeline; 200+ an image model hero pairs across 19 categories + per-cert + activities (Vigilant Lattice, Cipher Vault, Regulatory Tapestry, Continuous Pipeline, Living Blueprint, Neural Constellation, Insight Cascade, Ascending Path themes); legal page with 4-tab UI (Privacy/Terms/Credits/Trademarks) including hero, solid linked trademark pills, cross-tab JS, and right-aligned licenses; press kit expansion to 31 patent clusters with stats grid (28 filings, 613 claims, 223 figures, 156 inventions); merged certs page into home and removed; rewired pricing Annual toggle; nav menu rewrite; footer reorganization; courses page Foundations group, alphabetized lists, hero coverage; activity catalog sync to web client; bulk canonical-number updates across 4 sites (the marketing site, _shared-the product, the an internal service, renkara.com) including MCQ count to 1,400,000 and activity formats to 13; 11 staging deploys, 3 production deploys with verified invalidations.</td>
      <td>80.0h</td>
      <td>540m</td>
      <td>60m</td>
      <td>8.9x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>the product hero refresh: 70 editorial-photography prompts, 140 an image model.1 Pro hero images (10 per site x 7 sites x light+dark), random-cycle JS, side-by-side hero layout in 7 index.jinjas, theme-hero CSS for recruiter marketplace+enterprise, 3 staging deploys + 4 git pushes</td>
      <td>9.0h</td>
      <td>70m</td>
      <td>5m</td>
      <td>7.7x</td>
      <td>108.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>the product A-glyph and purple-megaphone favicon replaced with the platform node-mesh bird across fleet (favicon multi-res, header/footer mark, about page full-bleed hero with light/dark variants, 7 the product sites built, shared overlay + enterprise overrides committed and pushed)</td>
      <td>10.0h</td>
      <td>330m</td>
      <td>12m</td>
      <td>1.8x</td>
      <td>50.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>44</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1767.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>3019</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>279</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>10,363,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>35.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>380.1x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 18 tasks cleared the 30x threshold; 1 task ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 3, 2026 the 171.4x ceiling came from Code Sandbox migration Waves 2-6 — 758 labs migrated to sandbox schema and lifted to strict-pass via service-c. The work fit cleanly into 210 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 1.8x floor on the product A-glyph and purple-megaphone favicon replaced with the platform node-mesh bird across fleet (favic reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (380x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 2, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-02-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-02-leverage-record.html</id>
    <updated>2026-05-02T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirteen tasks. May 2, 2026 weighted to 17.0x leverage across 395.0 human-equivalent hours in 1393 Claude-minutes. Lab simulator dominated the day&#39;s volume. Supervisory leverage closed at 353.7x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 60.0x (24h human in 24 Claude-minutes) on Embedded subscribe flow: PaymentIntent backend + recompute + coupon validate endpoints, new shared @the platform/subscribe-react lib (FlipCard primitive, Subscr. The floor was 3.4x on Diagnose remaining engine 401s as a frontend bug (engine.ts had its own raw fetch() bypassing Authorization header), audit all api/*.ts callsites, fix engine.ts. Median Claude-minutes per task: 35; median human-equivalent hours per task: 8.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Embedded subscribe flow: PaymentIntent backend + recompute + coupon validate endpoints, new shared @the platform/subscribe-react lib (FlipCard primitive, SubscribeFront/Back, EmbeddedSubscribeFlow, useSubscriptionIntent hook), web client migration to lib, popup checkout removed</td>
      <td>24.0h</td>
      <td>24m</td>
      <td>6m</td>
      <td>60.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Cloud-cert lab Batch 5 wave 1: a cloud cert exam cluster shared root cause diagnosis (stale sidebarTarget bug) lifted all 19 a cloud cert exam labs in one shot, plus partial progress on a cloud cert exam/a cloud cert exam/a cloud cert exam. 26 newly strict-pass; 32 improved-but-still-partial. Sub-agent across 1 wave. 931 -&gt; 957 ship-ready.</td>
      <td>52.0h</td>
      <td>120m</td>
      <td>3m</td>
      <td>26.0x</td>
      <td>1040.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Operator-managed banners across admin dashboard/API gateway/web client with markdown CRUD, semantic color variants, audience targeting from purchase state, push-to-all-clients SSE broadcast, dismissal tracking, and CTA actions (subscribe modal + URL)</td>
      <td>28.0h</td>
      <td>65m</td>
      <td>6m</td>
      <td>25.9x</td>
      <td>280.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Diagnose hard hang from disk-full + memory exhaustion (Docker VM + TM + Spotlight + Maestral); archive 123 GB training chunks to new S3 bucket with byte-exact verification</td>
      <td>3.0h</td>
      <td>7m</td>
      <td>4m</td>
      <td>25.7x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Cloud-cert lab Batch 3: lifted 100 closest-to-passing labs (gap 5-30) to strict-pass via sub-agent across 11 waves. Service-cluster fixes on a cloud cert exam, a cloud cert exam, a cloud cert exam, a cloud cert exam, a cloud cert exam, plus per-lab fixes. Dashboard testIds added (bedrock onConfirm, apigateway Deploy modal, vpc CreateSgModal, cloud-spanner instance select, ResourceLocks). 706 -&gt; 806 ship-ready.</td>
      <td>100.0h</td>
      <td>293m</td>
      <td>5m</td>
      <td>20.5x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Add purge + bulk-purge for revoked comps across billing service, admin-service WS, and admin dashboard UI with tests</td>
      <td>4.0h</td>
      <td>12m</td>
      <td>3m</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cloud-cert lab Batch 4: harder set of 100 partials (gap 20-40, AWS 28 / Azure 24 / GCP 48) lifted to strict-pass via sub-agent across 7 waves. Heavy dashboard work to add testIds for missing modal flows. 810 -&gt; 931 ship-ready (+104 with incidental wins from dashboard changes).</td>
      <td>150.0h</td>
      <td>577m</td>
      <td>5m</td>
      <td>15.6x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Refactor API gateway gateway to contextvar-scoped JWT forwarding (durable, multi-instance safe, opt-in per upstream); engine + purchase now propagate user JWT; defect tracker stays service-only; regression tests both directions; fix 2 pre-existing ruff failures</td>
      <td>5.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>10.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Diagnose amplifier KeyError engine bug (a content generator returns pairs as dict not list, KeyError: 0/slice) and fix with <em>coerce</em>pairs<em>list helper applied at 4 sites; build ISACA recovery batch orchestrator (run</em>isaca<em>recovery.sh, wipe-and-rerun semantics for 21 specs after engine fix); free-tier batch prep (7 Security depth</em>constraints normalization, 1 Insider Threat 7-dup-goal-id rename, 1 AP Micro proficiency<em>tier label backfill, 12 SecurityAwareness flipped to free</em>tier:true, 22 specs flipped to tribunal<em>verdicts:true); Tableau→Salesforce category merge (1 spec moved, 3 docs updated, activities</em>catalog.json updated); build free-tier batch orchestrator (run<em>free</em>tier_close.sh, 11 waves, full tribunal pipeline)</td>
      <td>12.0h</td>
      <td>90m</td>
      <td>12m</td>
      <td>8.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Fix the marketing site console errors: observability tool-rum.js schema mismatch (400), missing favicon (403), and tailwind CDN production warning. Rewrote observability tool-rum SDK to canonical backend schema, deployed via observability tool-frontend pipeline (verified live with 202 ingest). Added temp favicon to _shared-the product overlay. Replaced cdn.tailwindcss.com + inline config with a real Tailwind 3 compile pipeline (tailwind.config.js, build-tailwind.sh, compiled CSS) and rebuilt the marketing site dist locally.</td>
      <td>4.0h</td>
      <td>35m</td>
      <td>4m</td>
      <td>6.9x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Add Rime TTS as alternate provider; add voice/speed picker in Settings with Play audition; wire labs to user-selected voice; deploy backend + frontend + infra to production</td>
      <td>8.0h</td>
      <td>75m</td>
      <td>6m</td>
      <td>6.4x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Engine dual-auth: accept JWTs from authentication service JWKS alongside static a feature flag (jwt<em>auth module port of gateway core/jwt.py + middleware refactor in rest</em>gateway.py + tests)</td>
      <td>3.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>6.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Diagnose remaining engine 401s as a frontend bug (engine.ts had its own raw fetch() bypassing Authorization header), audit all api/*.ts callsites, fix engine.ts request()+lesson-audio+evidence-audio paths to use loadTokens(); flag competitive.ts and bugs.ts as same-pattern issues</td>
      <td>2.0h</td>
      <td>35m</td>
      <td>5m</td>
      <td>3.4x</td>
      <td>24.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>13</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>395.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1393</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>67</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,684,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>17.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>353.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 1 task cleared the 30x threshold; 1 task ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 2, 2026 the 60.0x ceiling came from Embedded subscribe flow: PaymentIntent backend + recompute + coupon validate endpoints, new shared @the platfo. The work fit cleanly into 24 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 3.4x floor on Diagnose remaining engine 401s as a frontend bug (engine.ts had its own raw fetch() bypassing Authorization he reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (354x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: May 1, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-05-01-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-05-01-leverage-record.html</id>
    <updated>2026-05-01T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-six tasks. May 1, 2026 weighted to 26.8x leverage across 521.5 human-equivalent hours in 1167 Claude-minutes. Testing dominated the day&#39;s volume. Supervisory leverage closed at 284.5x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 69.5x (44h human in 38 Claude-minutes) on Strategy phase 7: engine admin observability endpoints + observability tool SDK lifespan + admin dashboard Strategy Analytics page + WS RPCs + tests + pre-exist. The floor was 5.1x on URL cutover cleanup: fix admin-service engine-url SSM (api→engine.the marketing site) + redeploy; gateway Terraform fix (CORS admin.the product.com→.ai, notific. Median Claude-minutes per task: 35; median human-equivalent hours per task: 12.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Strategy phase 7: engine admin observability endpoints + observability tool SDK lifespan + admin dashboard Strategy Analytics page + WS RPCs + tests + pre-existing /admin/flush test fix</td>
      <td>44.0h</td>
      <td>38m</td>
      <td>4m</td>
      <td>69.5x</td>
      <td>660.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>background worker fleet: scaffold 2 containerized Lambda repos (data-export + account-deletion) + new terraform stack (ECR + Lambda + EventBridge bus + rules + S3 + IAM + CodePipeline x2)</td>
      <td>24.0h</td>
      <td>22m</td>
      <td>3m</td>
      <td>65.5x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Migration phases 3+4+5+6 across 4 repos: API gateway full upstream proxy surface (engine, auth, defect tracker, a TTS service) with 15 new tests; authentication service emits profile/account/enrollment events to /internal/events; engine emits proficiency.updated + elo.updated + session.completed AND drops bug proxy + generic TTS + dead /events stubs; web client getApiBase helper + SSE-driven SubscribeModal completion (polling preserved as fallback). All test suites green: API gateway 60/62, engine 93/93 on touched API tests, billing service 151/151, web client 181/184.</td>
      <td>80.0h</td>
      <td>75m</td>
      <td>3m</td>
      <td>64.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>the marketing site site-wide updates: hide social proof + recruiter marketplace, merge comparison table from /certs/ to home, rewrite pricing copy, link accessibility bubbles, restructure courses page, filter labs to live-only, update breadcrumbs, merge website FAQ with web client (added side nav), write 4 blog posts, rename Other Products page, swap CTAs to Coming Soon, update press email, fix How It Works subtitle line break, remove Certs Subscription from footer, recruiter marketplace menu hidden</td>
      <td>18.0h</td>
      <td>22m</td>
      <td>8m</td>
      <td>49.1x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Build API gateway Phase 0 + Phase 1 + first proxy slice + frontend EventBus + billing service event emission. New core/API gateway repo with FastAPI app, JWT/JWKS, Valkey pub/sub, SSE endpoint with Last-Event-ID replay, /internal/events callback, full event taxonomy in named constants, billing service proxy routes, 47 tests at 81% coverage. New infra/terraform stack repo with first ECS Fargate stack. web client EventBusProvider + useEvent hook + EventBusInvalidator behind VITE<em>API</em>URL feature flag. billing service webhooks emit subscription.activated/canceled/payment.recorded/entitlements.changed to API gateway. Refactor of event-type strings into named constants across all three repos. All tests green: API gateway 45/47, web client 181/184, billing service 151/151.</td>
      <td>120.0h</td>
      <td>165m</td>
      <td>15m</td>
      <td>43.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Outstanding cleanup post-cutover: trim api.<em> from engine listener rule (engine.</em> only), backport ECS update IAM policy from CLI into terraform stack with terraform import, move subscription<em>groups.json data into authentication service package and rewrite domain</em>catalog.py to read locally (eliminates engine HTTP per enrollment check), delete /admin/sync-domains from engine and retarget admin-auth tests to /admin/flush, document deferred Phase 6 items (auth_client.py write-through replacement and admin session stats — both need substantial design + cross-service work). Tests green: API gateway 60/62, engine 92/92 API tests. Engine API surface dropped from 70 to 62 routes.</td>
      <td>12.0h</td>
      <td>22m</td>
      <td>1m</td>
      <td>32.7x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>background worker fleet end-to-end deploy: 2 GitHub repos created and pushed, terraform stack applied (ECR + Lambda x2 + EventBridge bus/rules + S3 + IAM + CodePipeline x2), warm-invoke asyncpg pool bug found and fixed mid-deploy, full smoke + authentication service PutEvents wiring</td>
      <td>16.0h</td>
      <td>30m</td>
      <td>3m</td>
      <td>32.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Built competitive multiplayer feature on engine: full state machine (lobby/countdown/question/reveal/complete), in-memory CompetitiveStore, FFA + teams modes, scoring with point decay, REST endpoints (create/get/join), WebSocket gameplay handler (handle<em>player</em>connection + run_game orchestrator), 15 unit tests; gateway proxy route for join; web client client method joinCompetitiveSession; retired Lambda@Edge API gateway-proxy from app.the marketing site CloudFront</td>
      <td>24.0h</td>
      <td>50m</td>
      <td>1m</td>
      <td>28.8x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>authentication service emails: welcome on first verify + welcome on first social login + account-closed at close + new account-deleted template + APP_URL setting + 4 tests</td>
      <td>4.0h</td>
      <td>9m</td>
      <td>1m</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>the marketing site polish round 2: courses page 3-wide with bulleted clean_titles for live+coming, drop Test Prep group, hide pricing testimonials, rename Other Products to the product AI - X (Certs first), rewrite main.js (theme toggle + countdown + accordions + carousel) to wire immediately and re-wire on DOMContentLoaded, blog cards put category bubble inline left-aligned with title, hide Available In bubble strip on feature pages</td>
      <td>6.0h</td>
      <td>14m</td>
      <td>4m</td>
      <td>25.7x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>the platform Code Sandbox Phases 1-2-3: VirtualFileSystem, IDB cache, Zustand store, EditorHost (Monaco multi-tab), TerminalHost (xterm.js + 5 command resolvers: shell/git/npm/pip/validators-stub), ActivityBar, FileExplorer, StatusBar, CommandPalette, resource-types TERMINAL::Output + EDITOR::File, 57 VFS unit tests, pre-existing a cloud cert exam test fix</td>
      <td>35.0h</td>
      <td>90m</td>
      <td>15m</td>
      <td>23.3x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Phase 4 the platform Code Sandbox: S3 persistence — Sign-URL Lambda (JWT auth, quota, ETag conflict), expiry-warning Lambda, S3 bucket + Terraform, S3SyncEngine (debounce, hydrate, retry, conflict), IDB schema v2 (git state), SandboxShell wiring, 18 tests passing at 86% coverage</td>
      <td>24.0h</td>
      <td>62m</td>
      <td>7m</td>
      <td>23.2x</td>
      <td>205.7x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>API gateway LIVE CUTOVER: terraform apply (25 AWS resources, ECS Fargate cluster + task + service + ALB tg + Route 53 + SSM + CodePipeline + IAM); 3 pipeline iterations to debug ruff config + coverage gate + IAM ECS perms; lesson-audio split (API gateway fetches text from engine, synthesizes via a TTS service); engine moved to engine.the marketing site while API gateway claimed api.the marketing site at listener priority 4 over engine priority 5; global engine-URL replace across admin dashboard, infrastructure repo, the marketing site marketing site; SSM values updated for upstream services to emit events to API gateway. Two endpoints verified live: api.the marketing site returns API gateway 200/redis-ok, engine.the marketing site returns engine 200/healthy.</td>
      <td>24.0h</td>
      <td>65m</td>
      <td>8m</td>
      <td>22.1x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>API gateway side-effects dispatcher: bounded retry with exponential backoff + Redis dead-letter queue + ops inspection route + 6 unit tests; unblocks Item 4 Phase B</td>
      <td>7.0h</td>
      <td>25m</td>
      <td>1m</td>
      <td>16.8x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Batch 2 lab strict-pass: closed out 76-lab Top-100 push (resume after crash). 62 free wins from prior dashboard fixes; 14 hand-tuned (status case drift, prop-key filter mismatches, missing select testIds, unclicked confirms, made-up resource types).</td>
      <td>28.0h</td>
      <td>110m</td>
      <td>4m</td>
      <td>15.3x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Strategy phase 7 prod deploy: monitor CodePipeline build to completion, smoke-test admin endpoints over public engine domain, SSM port-forward to RDS, verify alembic head=005 includes 003<em>strategy</em>observations, dry-run backfill, detect existing real observations and skip apply, smoke-test fingerprint + verify endpoint counters, patch runbook with correct RDS id + backfill skip-condition</td>
      <td>3.0h</td>
      <td>13m</td>
      <td>1m</td>
      <td>13.8x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Fix Anthropic API temperature-deprecation 400 in Origin LLM client (catch + drop param + latch for run); normalize 30 ISACA spec schemas (cost<em>usd dict→float, passing</em>score string→int with type, depth<em>constraints list→string, tau</em>cov misuse 0.8→8); build CompTIA/ISACA close-out batch orchestrator (run<em>isaca</em>comptia<em>close.sh, 16 waves, 2-wide parallel, full pipeline); flip content</em>profile on 6 stub ISACA Cert specs</td>
      <td>8.0h</td>
      <td>40m</td>
      <td>5m</td>
      <td>12.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Item 4 Phase B (retire engine direct PATCH; gateway delta=0-&gt;1; delete dead auth<em>client module + tests; trim authentication service </em>ALLOWED_CALLERS) + competitive multiplayer wired through gateway (REST proxy via routes/competitive.py, WS stays direct to engine, client REST goes through getApiBase) + JWT kid signing fix in authentication service</td>
      <td>12.0h</td>
      <td>60m</td>
      <td>2m</td>
      <td>12.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Cross-repo doc sweep: rename stale RDS identifier the product-production-pg → prod-ascloud-pg across 14 files in 9 repos (billing service, infrastructure tool, email proxy, team chat tool, team wiki, relationship tracker, CRM tool, newsletter platform, calendar app) plus root the platform/CLAUDE.md and tools/CLAUDE.md, plus ssm-tunnel.sh fix in infrastructure repo</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>1m</td>
      <td>11.2x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>wire CohortAnalytics By Plan + By Activity Level via cross-service in-process aggregation in admin-service (joins the product-auth users + billing service subs); shared retention math</td>
      <td>4.0h</td>
      <td>25m</td>
      <td>2m</td>
      <td>9.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Three-repo cleanup sweep: platform engine (delete tts.py + 5 test classes + legacy evidence route, tighten engine_context exception logging, README revert + count refresh, root-files allowlist), web client (delete 3 dead modules: courses/competitive-mock/UserNotRegistered, fail-loud engineQuestions placeholder, ExamTipsTab dead code, TestModeProvider dead comparison, full CLAUDE.md+README rewrite, vite-env.d.ts expansion), activities-react (4 half-finished features: SelfAssessment+PracticeExam+CollaborativeProblemSolving+ConfidenceSlider, vitest-axe type augmentation, TimedRecall→RecallSprint doc rename across README/design/requirements/testing-strategy)</td>
      <td>10.0h</td>
      <td>70m</td>
      <td>3m</td>
      <td>8.6x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Fix API gateway gateway dropping user JWT on authentication service proxy calls (forward_auth plumbing through UpstreamClient + 19 client methods + 2 route files + regression test)</td>
      <td>3.5h</td>
      <td>25m</td>
      <td>6m</td>
      <td>8.4x</td>
      <td>35.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Wire prod REDIS_URL across admin/auth/purchase/notification services: 4 SSM params + 4 buildspec patches + 4 pipeline redeploys; root-cause for silently-dead events.* fan-out (publishers + admin-service subscriber were all defaulting to localhost:6380)</td>
      <td>4.0h</td>
      <td>30m</td>
      <td>1m</td>
      <td>8.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Rewrite web client CLAUDE.md and README.md to reflect current React Router 7 + gateway architecture</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>5m</td>
      <td>7.5x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>fix Users tab (renkara-auth alembic up to head), Portfolio tab (admin-service ENGINE<em>ADMIN</em>KEY), Logins-by-Method dedupe; wire CohortAnalytics signup-month with new endpoint; revealed engine routes to engine.the marketing site</td>
      <td>5.0h</td>
      <td>50m</td>
      <td>4m</td>
      <td>6.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>URL cutover cleanup: fix admin-service engine-url SSM (api→engine.the marketing site) + redeploy; gateway Terraform fix (CORS admin.the product.com→.ai, notifications-api→notification-api) + ECS roll to v3; health monitor engine URL correction + new gateway site; competitive.ts empty-string fallback fix</td>
      <td>3.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>5.1x</td>
      <td>90.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>26</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>521.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1167</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>110</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,978,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>284.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 7 tasks cleared the 30x threshold; 0 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On May 1, 2026 the 69.5x ceiling came from Strategy phase 7: engine admin observability endpoints + observability tool SDK lifespan + admin dashboard Str. The work fit cleanly into 38 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 5.1x floor on URL cutover cleanup: fix admin-service engine-url SSM (api→engine.the marketing site) + redeploy; gateway Terr reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (284x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 30, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-30-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-30-leverage-record.html</id>
    <updated>2026-04-30T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-one tasks. April 30, 2026 weighted to 12.1x leverage across 222.0 human-equivalent hours in 1099 Claude-minutes. Testing dominated the day&#39;s volume. Supervisory leverage closed at 208.1x.</p>
<p class="mb-4 font-light font-serif">The day&#39;s ceiling was 26.7x (40h human in 90 Claude-minutes) on web client fixes: testimonial modal a content generator streaming generator + ToS deep link, in-dashboard subscription purchase modal with monthly/annual toggle. The floor was 4.3x on cloud-fidelity all-deferred sweep: Tabs+ConsoleTable for AWS/Azure/GCP via ThemedConsoleTable shared impl + custom-div Tabs (3 vendors) + ServiceIcon component . Median Claude-minutes per task: 18; median human-equivalent hours per task: 4.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Sup.</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>web client fixes: testimonial modal a content generator streaming generator + ToS deep link, in-dashboard subscription purchase modal with monthly/annual toggle and Stripe popup checkout, comp/lifetime subscription display + payment-history grant entry, profile first/last name editing, Help Center scroll reset, mobile guide modal redesign, proper-cased modal/confirm titles. Backend: billing service entitlement granted<em>at</em>by<em>group + comp</em>reason; authentication service streaming a third-party API provider testimonial suggestion endpoint.</td>
      <td>40.0h</td>
      <td>90m</td>
      <td>6m</td>
      <td>26.7x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>authentication service: build full email verification flow (table + migration + service + 2 endpoints + register/login wiring + frontend resend UX + email template + 15 tests)</td>
      <td>8.0h</td>
      <td>18m</td>
      <td>2m</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Retire cloud CI/CD for all marketing websites: delete 9 CodePipelines + 9 CodeBuild projects + 6 CloudWatch log groups; terraform state-rm 4 modules to preserve live S3/CloudFront/Route53; delete 9 website modules and 12 boto3 site YAMLs from infra; rename rendered/ to dist/ across 16 websites; remove 12 obsolete buildspec.yml files; update website READMEs and infra CLAUDE.md to reflect local-build-and-sync workflow</td>
      <td>16.0h</td>
      <td>40m</td>
      <td>8m</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>authentication service: magic-link auto sign-in on email verification (issue tokens at verify time, frontend hash redirect into app); post-register success box copy + centering</td>
      <td>2.5h</td>
      <td>8m</td>
      <td>1m</td>
      <td>18.8x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Drive all 56 target cloud labs to 100% strict-pass; fix labs+dashboards across SAP, Azure, GCP, AWS exam tracks</td>
      <td>80.0h</td>
      <td>270m</td>
      <td>12m</td>
      <td>17.8x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>web client Account tab: surface pending-deletion state from /users/me (deletion<em>scheduled</em>for + deletion<em>requested</em>at), show days-left pill + cancel-deletion CTA wired to existing useCancelAccountClosure mutation; fixed pre-existing bugs.test.ts assertion mismatch.</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Audit and update GitHub descriptions for 74 monorepo repos: gh CLI fetch + identify 36 missing/poor descriptions, write canonical one-liners drawn from CLAUDE.md inventory, batch-update via gh repo edit, verify all updates landed</td>
      <td>3.0h</td>
      <td>12m</td>
      <td>1m</td>
      <td>15.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Fix Subscribe→Enroll race: billing service notifies authentication service to drop in-process entitlements LRU after webhook commit; new POST /api/v1/internal/entitlements/{user_id}/invalidate endpoint on authentication service; client-side backoff retry as safety net.</td>
      <td>5.0h</td>
      <td>22m</td>
      <td>2m</td>
      <td>13.6x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Recall Sprint overhaul: bump activity-ui to pick up headstart fix, streak label + per-item DOM reset + fade rescale + mobile 2x2 fit + dark-mode contrast in lib; activity intro modal + hide hero on mobile + suppress 1/1 chrome + title-case Competitive Mode in web</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>4m</td>
      <td>13.3x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>web client enroll-flow polish: enrollment store marks optimistic inserts pending so the UI no longer flickers through enrolled-state on NEEDS_UPGRADE; SubscribeModal defaults to monthly and surfaces the $29/mo-for-life launch special until June 1st (banner + discounted price + reg-price subtitle).</td>
      <td>4.0h</td>
      <td>18m</td>
      <td>1m</td>
      <td>13.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Backfill leverage CSV from cloud (30 records across 2 days) and write 2 sanitized leverage record blog posts (Apr 28: 11 tasks 33.4x, Apr 29: 19 tasks 7.6x) with task tables, aggregates, and analysis sections; build and deploy to staging and production; about-page count incremented</td>
      <td>6.0h</td>
      <td>35m</td>
      <td>2m</td>
      <td>10.3x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>recent payments + cashflow forecast (committed + projected w/ growth/churn knobs); backfill payment row; explain MRR mechanics + Stripe live/test plan</td>
      <td>5.0h</td>
      <td>30m</td>
      <td>5m</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Convoy card mobile fix: pin InfoButton to top-right (no wrap) + deep-link Learn-how-Convoy-works to the dedicated Convoy guide doc</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>1m</td>
      <td>10.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Fix CORS on marketing platform and observability tool to allow all renkara/the product umbrella properties via allow<em>origin</em>regex; deploy and verify preflight in production</td>
      <td>2.0h</td>
      <td>13m</td>
      <td>2m</td>
      <td>9.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Make marketing platform /analytics/events public with per-IP rate limiting; fix static site generator-injected tracking script (page<em>viewed, visitor</em>id in properties); deploy marketing platform and verify end-to-end ingest from public origin</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>1m</td>
      <td>7.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>wire admin Subscriptions + Revenue to real RPCs; register Stripe webhook + rotate placeholder secret; fix StripeObject-&gt;dict and price_cents bugs; backfill missing subscription</td>
      <td>6.0h</td>
      <td>50m</td>
      <td>3m</td>
      <td>7.2x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Audit velvet-rope gating across 16 staging stages, fix 2 sites missing Message field; update the marketing site early-adopter promo expiration from May 1 to May 31 (countdown JS in 2 places + FAQ wording in shared overlay); build + sync to staging and production</td>
      <td>1.5h</td>
      <td>13m</td>
      <td>2m</td>
      <td>6.9x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Verify Pulse analytics wired into all 16 websites: audit per-site Pulse config blocks, create 2 missing Pulse sites for the product.com (staging + production), add Pulse block to site.yml, rebuild and verify tracking script injection in dist/index.html</td>
      <td>1.0h</td>
      <td>10m</td>
      <td>1m</td>
      <td>6.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Add About AI Leverage section to a personal site leverage page: intro paragraphs explaining the leverage concept, list of 7 related articles with material-symbols icon, multiple polish iterations (proper-case headings, indentation, tighter row spacing, accent-colored icon); SCSS + redesign template + build + sync to staging and production</td>
      <td>3.0h</td>
      <td>30m</td>
      <td>4m</td>
      <td>6.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>lab strict-pass uplift: 174 dashboards bulk-augmented with sidebar testIds (493 added) + auto-derive script with sub-component support (354 lab files, 1209 sidebar nav steps inserted) + Azure/GCP Modal auto-close-on-confirm + waitForText empty-text safety + per-cloud type contamination detected; cloud strict-pass 437→508 (+71), GCP biggest gainer 89→136 (+47)</td>
      <td>16.0h</td>
      <td>200m</td>
      <td>2m</td>
      <td>4.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>cloud-fidelity all-deferred sweep: Tabs+ConsoleTable for AWS/Azure/GCP via ThemedConsoleTable shared impl + custom-div Tabs (3 vendors) + ServiceIcon component with auto-derived category glyphs + sidebar augmentation + per-cloud empty states + cloud-tinted lab cards + bundle splitting (Cloudscape 270KB / Fluent 98KB / MUI 255KB chunks) + a cloud cert exam worker tune (16→12, expect 10s→15s) + visual regression scaffold (16 cases) + audit<em>lab</em>testids.py + fix<em>lab</em>testids.py + 161 broken testId references fixed across 24 lab files + 4 dashboard testId additions</td>
      <td>14.0h</td>
      <td>195m</td>
      <td>3m</td>
      <td>4.3x</td>
      <td>280.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>21</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>222.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1099</td>
    </tr>
    <tr>
      <td>Total supervisory minutes</td>
      <td>64</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,334,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>12.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>208.1x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage distribution is the part that matters more than the headline figure. 0 tasks cleared the 30x threshold; 2 tasks ran below 5x. The 30x+ tier is what produces the impression that AI changes the time-cost curve; the sub-5x tier is what reminds anyone watching that some work is still gated by human review and cannot speed up arbitrarily.</p>
<p class="mb-4 font-light font-serif">Top-of-distribution tasks tend to share a shape: tightly-scoped, well-specified, with no integration ambiguity. On April 30, 2026 the 26.7x ceiling came from web client fixes: testimonial modal a content generator streaming generator + ToS deep link, in-dashboard subs. The work fit cleanly into 90 Claude-minutes because the inputs and the success criterion were both explicit; the AI was not required to discover anything new. That shape is repeatable; tasks like it post 30x to 60x consistently across the recent log.</p>
<p class="mb-4 font-light font-serif">Bottom-of-distribution work runs differently. The 4.3x floor on cloud-fidelity all-deferred sweep: Tabs+ConsoleTable for AWS/Azure/GCP via ThemedConsoleTable shared impl + cu reflects real human review per checkpoint, often serial because each step depends on the previous one. The supervisory ratio (208x weighted today) tracks differently: it captures how much human prompt-writing time the day&#39;s output consumed, and it stays high even on lower-leverage days because supervisory minutes scale roughly with task count, not with human-equivalent hours.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 29, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-29-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-29-leverage-record.html</id>
    <updated>2026-04-29T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nineteen tasks. April 29 was dominated by a multi-phase cloud-fidelity initiative on the cloud lab simulator: five distinct phases (0, 1.a, 1.b, 2, and a 3+4-lite pairing) that installed native vendor UI primitives (AWS, Azure, GCP) behind a runtime dispatch shim, brought all 2,134 labs through a regression-free watch sweep, and patched a Modal stacking bug in the AWS vendor&#39;s design system. Those five phases consumed 568 of the day&#39;s 917 Claude-minutes (62%) and produced 47 of 116.2 human-equivalent hours (40%), at an average leverage of roughly 5x because the work was deeply UI-primitive shimming with careful per-component testing rather than the kind of parallel-fan-out work that dominated April 27. The day also closed Apple sign-in end-to-end (server-to-server notification endpoint, developer-domain-association well-known endpoint, full Docker/build/SSM wiring), shipped a flashcard synthesis stage in the platform engine, added admin-side hard-delete and login-method reporting, fixed a third-party task app importer regression, and completed the static site generator output directory rename (&quot;rendered&quot; to &quot;dist&quot;) across the codebase. Total for the day: 116.2 human-equivalent hours in 917 Claude-minutes. Weighted leverage was 7.6x, weighted supervisory leverage 122.4x.</p>
<p class="mb-4 font-light font-serif">April 28 posted 33.4x weighted leverage on 203.5 equivalent hours; April 29 produced 116.2 equivalent hours at 7.6x. The drop is structural, not anomalous: April 28 had two compliance-and-coverage tasks at 60x+ leverage that drove the average; April 29 had nineteen tasks of which the top single task (an authentication service notification endpoint) sat at 45x but produced only 6 human-equivalent hours, while the bulk of the day&#39;s volume came from cloud-fidelity UI work that consistently sits in the 3.7x to 8.6x range. Token consumption (2,577,000) is essentially flat against April 28 (2,445,000); the lower leverage reflects more AI-time per task, not more reasoning per token. The day&#39;s median task ran 35 Claude-minutes with 5 human-equivalent hours and 7.2x leverage — a useful baseline for what implementation-heavy fleet work looks like on a normal day.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Authentication service: Apple sign-in server-to-server notification endpoint (verify signed JWT, handle email-disabled and email-enabled toggles, consent-revoked, and account-delete with session revocation)</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Authentication service: wire Apple and Google social login through Dockerfile, buildspec, and seven Systems Manager parameters including a multiline private key; full test suite green (391 tests)</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Add flashcard synthesis stage to the learning platform engine: generator, writer, loop integration, REST endpoint, regression tests, standalone runner</td>
      <td>6h</td>
      <td>22m</td>
      <td>0.15w</td>
      <td>16.4x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Admin dashboard: hard-delete students, login-method column, reports tab and login-methods report (changes spanning authentication service, admin service, and frontend)</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Multi-piece overhaul: scenario engine 500 error fix; cross-device user state store; activity preferences (model, UI, filter); settings page tabbed redesign; documentation and guide content; flashcard activity polish</td>
      <td>18h</td>
      <td>92m</td>
      <td>0.45w</td>
      <td>11.7x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Authentication service: Apple developer-domain-association well-known endpoint, placeholder file, test</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>0.013w</td>
      <td>10.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Diagnose and fix third-party task app importer 401 in the daily task tracker web app; redeploy</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Diagnose and fix broken learning platform web client production CI and multiple-choice activity (root cause: empty activity-component library publishes); add cross-course recommendation UI (card, info button, modal); two new documentation entries</td>
      <td>9h</td>
      <td>60m</td>
      <td>0.23w</td>
      <td>9.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Admin dashboard: students plan and access bubbles, edit modal, bulk entitlements endpoint; learning platform engine Postgres durability fix (asyncpg + ssl + Systems Manager loaded credentials)</td>
      <td>5h</td>
      <td>35m</td>
      <td>0.13w</td>
      <td>8.6x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Cloud lab simulator vendor-fidelity phase 1.a: AWS vendor UI primitives — install plus Button, Alert, StatusIndicator, KeyValuePairs wrappers and a runtime dispatch shim; 290 AWS labs through zero-regression sweep</td>
      <td>7h</td>
      <td>55m</td>
      <td>0.18w</td>
      <td>7.6x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Learning platform engine: spot to on-demand cutover (clone instance, target group swap, drain, terminate spot); confirmation modal replacing window.confirm</td>
      <td>3h</td>
      <td>25m</td>
      <td>0.075w</td>
      <td>7.2x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Cloud lab simulator: fix audit-script glob bug (missed 86 type-B labs); update canonical inventory and five documentation files for 2,048→2,134 total and 935→1,021 strict-pass; reconcile lab manifest with disk</td>
      <td>3h</td>
      <td>25m</td>
      <td>0.075w</td>
      <td>7.2x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Cloud lab simulator: triage and fix all 7 watch-sweep failures (3 dashboard runtime crashes, 3 initialResources schema bugs, 1 score-zero placeholder); bring 2,134-lab corpus to strict-pass green</td>
      <td>6h</td>
      <td>50m</td>
      <td>0.15w</td>
      <td>7.2x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Cloud lab simulator post-crash recovery: cleanup and commit 1,508 in-flight changes (testId sweep, multi-checkpoint executor, sidebar nav, 90 type-B labs); fix all 9 remaining cloud-certification regressions</td>
      <td>4h</td>
      <td>35m</td>
      <td>0.10w</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Cloud lab simulator vendor-fidelity phase 3 (GCP vendor primitives) + phase 4 lite (favicon, title, licensing); Modal for Azure and GCP via custom-div with vendor tokens (skip vendor Dialog entirely); 304 GCP labs through zero-regression sweep</td>
      <td>14h</td>
      <td>145m</td>
      <td>0.35w</td>
      <td>5.8x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Static site generator output directory rename (&quot;rendered&quot; to &quot;dist&quot;): update all references across library, CLI, build service, docs, and project documentation</td>
      <td>0.75h</td>
      <td>8m</td>
      <td>0.019w</td>
      <td>5.6x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Cloud lab simulator vendor-fidelity phase 1.b: AWS Modal plus lab-runner z-index escalation (50 to 9000, above the vendor&#39;s 5000) and force-unmount on visible-false; root-caused via the vendor&#39;s display:none on dialog body</td>
      <td>6h</td>
      <td>65m</td>
      <td>0.15w</td>
      <td>5.5x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Cloud lab simulator vendor-fidelity phase 0: primitive shim, cloud detection, test-ID baseline, bulk import refactor (267 view files); full 2,134-lab watch sweep regression-free; preliminary type fixes</td>
      <td>10h</td>
      <td>120m</td>
      <td>0.25w</td>
      <td>5.0x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Cloud lab simulator vendor-fidelity phase 2: Azure vendor primitives — install plus Button, Alert, StatusIndicator, KeyValuePairs wrappers, vendor provider mount, runtime dispatch; Modal deferred (vendor Dialog incompatibility documented)</td>
      <td>8h</td>
      <td>130m</td>
      <td>0.20w</td>
      <td>3.7x</td>
      <td>480.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>116.2</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>917</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>2.9</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,577,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>7.6x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>122.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s leverage ceiling and floor are both worth examining. The ceiling — 45x on the Apple sign-in server-to-server notification endpoint (task 1) — is a typical shape for tightly-scoped backend work: one endpoint, one signed-JWT verification path, four event types (email-disabled, email-enabled, consent-revoked, account-delete), and a session-revocation side effect. Six human-equivalent hours fit cleanly into 8 Claude-minutes because the work has clear inputs, a well-defined output contract (Apple&#39;s specification), and no integration ambiguity. The 30x leverage on the social-login wiring (task 2) is similar: Dockerfile, buildspec, seven Systems Manager parameters (one of which is a multiline private key requiring careful escaping), and a verification step against a 391-test suite. Both tasks closed Apple sign-in end-to-end and were limited only by the surface area of the change; the AI did not need to discover or research anything novel.</p>
<p class="mb-4 font-light font-serif">The floor — 3.7x on Azure vendor-UI phase 2 (task 19) — is also typical, for a different reason. Cloud lab simulator vendor-fidelity work involves taking a third-party design system (Microsoft&#39;s, Google&#39;s, Amazon&#39;s) and shimming its primitives into an existing component layer that previously used a generic UI kit. The work is mechanically straightforward — install package, wrap Button, wrap Alert, wrap StatusIndicator, wrap KeyValuePairs, mount the vendor&#39;s provider — but each wrapper requires reading the vendor&#39;s API surface, mapping its props to the existing component&#39;s props, handling the vendor&#39;s idiosyncrasies (Microsoft&#39;s <code>FluentProvider</code> mount requirements, Microsoft&#39;s Dialog being incompatible with the existing Modal architecture, requiring the modal to be deferred), and verifying that the change does not regress any of the cloud lab simulator&#39;s labs against that cloud. Eight human-equivalent hours fit into 130 Claude-minutes for a 3.7x ratio because the AI is mostly working in serial: one wrapper at a time, one regression check at a time, no opportunity for parallel-agent fan-out because each phase is its own dependency-ordered chain.</p>
<p class="mb-4 font-light font-serif">The five cloud-fidelity phases together (tasks 10, 15, 17, 18, 19) are worth treating as a single composite. They consumed 568 Claude-minutes (9 hours 28 minutes of AI-time) and produced 47 human-equivalent hours at an average of 5.0x leverage. A senior frontend engineer doing equivalent vendor-primitive shimming across three vendor design systems would typically take 5-7 working days to reach the same level of completion, and would spend a non-trivial fraction of that time discovering vendor-specific gotchas (the AWS Modal z-index issue, the Azure Dialog incompatibility, the GCP Material-3 token availability). The AI did the same discovery in real-time during each phase. The 5.0x leverage is lower than the day&#39;s average but the absolute output is large: roughly a sprint&#39;s worth of cloud-vendor design-system integration completed in a single day with full regression coverage.</p>
<p class="mb-4 font-light font-serif">The middle tier (tasks 3 through 9, 16.4x to 8.6x) is where the day&#39;s product engineering lives. A flashcard synthesis stage in the platform engine (task 3, 16.4x), an admin-side hard-delete plus login-methods report touching three services (task 4, 16.0x), a multi-piece overhaul including a scenario-engine fix and a cross-device user-state store (task 5, 11.7x), a third-party task app importer fix (task 7, 10.0x), a production CI failure root-caused to an empty package publish plus a new cross-course recommendation UI (task 8, 9.0x), and an admin students-plan-and-access plumbing change with an asyncpg-over-SSL durability fix (task 9, 8.6x). These are the kinds of tasks that benchmark leverage on a realistic implementation day: a good but not exceptional 10x average across genuinely heterogeneous work, with each task requiring meaningful design decisions and multi-file edits but bounded scope.</p>
<p class="mb-4 font-light font-serif">Supervisory leverage (122.4x weighted) is the lowest figure in the recent log by a margin, and the cause is the cloud-fidelity work. Each phase required real human review at multiple checkpoints (the AWS Modal z-index investigation in particular consumed three minutes of supervisory time alone, sitting at the bottom of phase 1.b&#39;s 360x ratio because the underlying problem was non-obvious). The vendor-fidelity work at 5x leverage produces three-digit supervisory ratios when the supervisory minutes are 1-3, but the cumulative supervisory minutes across five phases (10 minutes total) against 47 human-equivalent hours produces an average phase supervisory ratio of roughly 282x, well below the day&#39;s overall 122.4x weighted average because the smaller tasks pulled the supervisory denominator up faster than the human-hour numerator. April 30 should rebound: the cloud-fidelity work is now structurally complete, and the next pass will be feature-and-fix work where the high-leverage shape returns.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 28, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-28-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-28-leverage-record.html</id>
    <updated>2026-04-28T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eleven tasks. April 28 was dominated by two pieces of high-density work: a compliance and audit remediation wave (80h, 75 minutes, 64.0x) covering structured audit logging middleware, data export and deletion workers, a database encryption runbook, and parity sweeps across multiple services; and a coverage expansion authoring 86 lab definitions across 10 cloud certifications (80h, 77 minutes, 62.3x). Those two tasks alone account for 160 of the day&#39;s 203.5 human-equivalent hours and 152 of the 366 Claude-minutes. The remaining 9 tasks span social sign-in frontend wiring, a service-token cross-tenant routing fix, an activity-component fallback removal, an internal issue-tracker confirm-modal and version-checker pair, a cloud infrastructure provisioner cross-account scan plus IAM filtering, and a route-level error boundary with automatic bug-filing. Total for the day: 203.5 human-equivalent hours in 366 Claude-minutes. Weighted leverage was 33.4x, weighted supervisory leverage 297.8x.</p>
<p class="mb-4 font-light font-serif">April 27 posted 28.0x weighted leverage on 619.5 equivalent hours in 1,329 Claude-minutes; April 28 produced about a third the volume in roughly a quarter the time at slightly higher weighted leverage. The compression is real but expected: April 27 had three large parallel-agent lab migrations driving most of the volume, while April 28 had two compliance-and-coverage tasks that produced equivalent per-task leverage without needing the same parallel-agent fan-out. Token consumption (2,445,000) is roughly one-tenth of April 27&#39;s 24,120,000, consistent with the lower task count and the absence of multi-agent fan-out.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Compliance and audit remediation wave: structured audit logging middleware (SOC 2 control alignment), data export and deletion workers (data-protection regulation alignment), database encryption runbook, parity sweeps across multiple internal services</td>
      <td>80h</td>
      <td>75m</td>
      <td>2.0w</td>
      <td>64.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Author 86 coverage labs across 10 cloud certifications (Azure data and AI tracks, Azure networking and architect tracks, GCP networking, security, data engineering, and machine learning, AWS associate-level data engineer); strict-pass DOM-driven assertions, SDK type registry additions, audit script clean</td>
      <td>80h</td>
      <td>77m</td>
      <td>2.0w</td>
      <td>62.3x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Authentication service: social sign-in frontend buttons (Apple and Google), auth-context wiring, email-link verification flow polish, end-to-end smoke test</td>
      <td>6h</td>
      <td>11m</td>
      <td>0.15w</td>
      <td>32.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Authentication service: fix pre-existing legal-content directory build failure via predev and prebuild sync script, gitignore hygiene, verified across consumer apps</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.038w</td>
      <td>22.5x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Admin dashboard student and customer plumbing: cross-tenant service-token path between admin service and authentication service, broadened token-issuer trust list, new admin endpoints for cross-tenant lookups, smoke-tested both tenants</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Learning platform web client: fix flashcards fake fallback path (static activity-library import, remove fallback module), add sidebar tooltip and minor accessibility polish</td>
      <td>4h</td>
      <td>17m</td>
      <td>0.10w</td>
      <td>14.1x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Modal centering fix across the design system, missing IAM policy in cloud lab simulator entry-level cert lab 9, new instruction-vs-UI audit script (two passes, six catalog scrapers), package version verification across the fleet</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Cloud infrastructure provisioner: management-account scan via dedicated automation role, AWS-managed IAM policy filter, search clear, cost page shape fix, advisor parity, inventory page polish</td>
      <td>10h</td>
      <td>60m</td>
      <td>0.25w</td>
      <td>10.0x</td>
      <td>85.7x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Internal issue-tracker portal: ConfirmModal to fix delete-confirm flicker</td>
      <td>0.5h</td>
      <td>4m</td>
      <td>0.013w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Internal issue-tracker: real git SHA in build artifact, no-cache version manifest for the version checker</td>
      <td>0.5h</td>
      <td>4m</td>
      <td>0.013w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Learning platform web client round 3: route-level error boundary with automatic bug-filing into the internal issue tracker, apology UI, restore activity-library connection after Vite chunking edge case</td>
      <td>5h</td>
      <td>49m</td>
      <td>0.13w</td>
      <td>6.1x</td>
      <td>50.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>203.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>366</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>5.1</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,445,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>33.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>297.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The two top tasks (compliance remediation at 64.0x and cloud lab coverage expansion at 62.3x) drove the day&#39;s weighted leverage. Both share a common shape: the human-equivalent estimate is high (80h each, the equivalent of two full work-weeks for a senior engineer) because the underlying surface area is genuinely large, but the AI-time stays compact (75 and 77 minutes respectively) because the work is structurally repetitive once the pattern is established. Compliance remediation across multiple services hits the same audit-logging middleware shape, the same data-export job pattern, and the same encryption runbook checklist; once one service&#39;s remediation is done, the rest are mechanical translations of the same template. The lab authoring task is similar: 86 labs across 10 certifications share assertion patterns, SDK registry types, and audit-script expectations, which means the per-lab marginal cost falls sharply after the first lab in each certification.</p>
<p class="mb-4 font-light font-serif">The middle tier (32.7x to 13.7x, tasks 3 through 7) is where the day&#39;s polish work lives. Social sign-in frontend wiring, a build-failure fix in the authentication service, a cross-tenant service-token plumbing change, a fallback-removal in the activity component, and a cross-cutting modal centering plus audit script are all classic 10x-30x work: each involves real engineering decisions and multi-file edits, but the surface area per task is bounded enough that the AI completes in 4-35 minutes. The supervisory leverage on these middle-tier tasks (45x to 160x) is lower than the top tier&#39;s 600x-2,400x because each requires more direct human guidance: the prompt has to specify which files to touch, what behavior to preserve, and what to verify after the change.</p>
<p class="mb-4 font-light font-serif">The bottom three tasks (10.0x to 6.1x, tasks 8 through 11) illustrate two distinct low-leverage shapes. The cloud infrastructure provisioner work (task 8, 10.0x, 60 minutes) is breadth-without-depth: six small features stitched together across a single tool. Each feature is straightforward but the wall-clock cost adds up. The internal issue-tracker tasks (9 and 10, both 7.5x, 4 minutes each) are tiny-and-precise: 30 minutes of human-equivalent work in 4 minutes of AI-time, but the leverage looks low because the human estimate floor is also low. Tasks like these demonstrate that leverage factor is sensitive to estimate granularity: a 30-minute human estimate cannot produce a high factor against a 4-minute AI-time, even when the AI is 7.5x more efficient. The route-level error boundary (task 11, 6.1x, 49 minutes) is at the bottom because the work involved real debugging of a Vite chunking edge case alongside the boundary implementation, and debugging always slows the AI down: each iteration requires reading actual error output, reasoning about the chunking graph, and producing a fix that survives the next build.</p>
<p class="mb-4 font-light font-serif">Supervisory leverage averaged 297.8x for the day, which is the third-highest weighted figure in the recent log. The two top tasks (2,400x and 600x supervisory leverage) drive the average. Both were launched from short directives (&quot;remediate compliance findings wave 2&quot; and &quot;author the type-B coverage labs across these 10 certs&quot;) and the AI then planned the work, broke it into sub-tasks, executed across multiple files, and verified outcomes with audit scripts and test runs. The human supervisory cost on each was 2 minutes and 8 minutes respectively, against 80 human-equivalent hours per task. The middle and bottom tier tasks pulled the weighted average down because their supervisory ratios are bounded by the smaller human estimates. A 30-minute human estimate, however efficiently delivered, cannot produce four-digit supervisory leverage; the math does not allow it.</p>
<p class="mb-4 font-light font-serif">Token consumption (2,445,000) tracks closely with task volume rather than task complexity. The two large tasks consumed 930,000 tokens combined (38% of the day&#39;s total), proportional to their share of Claude-minutes (152 of 366, or 42%). This is consistent with prior observations that token cost scales primarily with AI-time rather than with task complexity, because the dominant cost is context-window maintenance during multi-file edits, not the reasoning density per token. The three Docket and admin polish tasks (tasks 7, 9, 10) consumed 248,000 tokens combined in 43 minutes of AI-time, a per-minute rate similar to the larger tasks. Token efficiency is mostly invariant to task type at this scale; the leverage variation comes from the human-estimate side of the ratio.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 27, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-27-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-27-leverage-record.html</id>
    <updated>2026-04-27T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-one tasks. April 27 had a single defining event: three parallel strict-pass migrations completed the entire provider lab corpus in one day. The GCP migration covered all 13 GCP certifications (275 labs) in 60 minutes; the Azure migration covered all 19 Azure certifications (370 labs) in 80 minutes; the AWS batch covered 7 additional certifications (155 labs) in 100 minutes. Combined with the CLF-C02 and SCS-C02 work from prior days, the entire 935-lab provider corpus now passes the strict-pass audit with zero issues. Those three tasks account for 260 of the day&#39;s 619.5 human-equivalent hours at factors of 80x, 75x, and 48x respectively. The remaining 28 tasks span the daily-task-tracker app backend refactor (full ListNode hierarchy), the internal cloud-infrastructure provisioning tool (cross-account scanning, live-scan WebSocket events, inventory polish), three new structured content specs synthesized end-to-end, a full 72-repo ecosystem audit and readiness sweep, an Apple Sign In backend implementation, the adaptive engine completion mode, authentication route hardening, and a production deployment collision that consumed 105 minutes on a 6-hour task. Total for the day: 619.5 human-equivalent hours in 1,329 Claude-minutes. Weighted leverage was 28.0x, weighted supervisory leverage 290.4x.</p>
<p class="mb-4 font-light font-serif">April 26 posted 26.9x weighted leverage on 899 equivalent hours. April 27 is similar in leverage (28.0x) but lower in total output (619.5h vs 899h), driven primarily by the daily-task-tracker backend refactor (75 minutes, 28.8x), the AWS fleet semantic-drift and testId-gap closure (145 minutes, 24.8x), the inventory polish work (70 minutes, 13.7x), and the activity component work (75 minutes + 95 minutes across two tasks). The three large lab migrations were individually high-leverage but consumed only 240 combined Claude-minutes, producing 260 equivalent hours. The rest of the day&#39;s 1,089 Claude-minutes produced 359.5 equivalent hours at roughly 19.8x average leverage, consistent with the pattern for implementation-heavy days where work spans multiple different codebases and domains.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cloud lab simulator: all 13 GCP certifications (CDL, ACE, PCA, PCD, PCDE, PCDOpsE, PCSE, PCNE, PDE, PMLE, PCDB, PGWA, GAI-L) = 275 labs migrated to DOM-driven strict-pass format. 13 parallel sub-agents over 25 minutes wall-clock. Replaced ~300 legacy GCP type strings with real SDK-emitted googleapis.com types. Cross-cloud type leakage (AWS/Azure types in GCP labs) cleaned. Fake/unmapped types remapped to nearest real SDK type. ~80 checkpoint descriptions softened. Dashboard testId backfill on 8 dashboards. Two commits totaling ~14K LOC delta. Vite build green. Combined with the AWS strict-pass (290 labs), all provider labs now zero-issue</td>
      <td>80h</td>
      <td>60m</td>
      <td>2.0w</td>
      <td>80.0x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Cloud lab simulator: all 19 Azure certifications (AZ-900/104/120/140/204/305/400/500/700, DP-100/203/300/420/700/900, SC-300/900, AI-102/900) = 370 labs migrated to DOM-driven strict-pass format. Three waves of parallel sub-agents (5+5+9 = 19 agents) over ~80 minutes after recovery from org-level API usage cap. Replaced ~400 legacy Azure type strings with real Microsoft.* SDK-emitted types. Cross-cloud type leakage (~250 checkpoints) removed. ~80 checkpoint descriptions softened. Dashboard testId backfill on Synapse/ADLS/Data Factory/Databricks/Event Hubs/Stream Analytics/Purview/Fabric (8 dashboards). Fabric SDK updated. Three commits totaling ~75K LOC delta. Combined with AWS (290) and GCP (275), entire 935-lab provider corpus is strict-pass clean</td>
      <td>100h</td>
      <td>80m</td>
      <td>2.5w</td>
      <td>75.0x</td>
      <td>6000.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Daily-task-tracker app iOS documentation rewrite: 4 docs (requirements, design, plan, testing strategy) updated to reflect current backend architecture -- ListNode model, WebSocket, contact-integration project shares, issue-tracker sync, third-party app import, Smart Views</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cloud lab simulator: 7 AWS certification batch (DOP-C02, SAP-C02, DEA-C01, ANS-C01, MLS-C01, MLA-C01, AIP-C01) = 155 labs migrated to DOM-driven strict-pass format. 21 parallel sub-agent runs (3 per cert) over ~100 min wall-clock. Fixed ~80 bogus resource types across the batch (SageMaker remappings, GCP/Azure types in AWS labs removed, NetworkFirewall/VPN/NAT remapped, IAM ManagedPolicy to Policy, Inspector2 to Inspector). Added AWS::OpenSearchServerless encryption/network/data-access policy types and EC2 FlowLog/NetworkInterface to SDK registry. Reported ~80 dashboard testId gaps for follow-up. All 13 AWS certs now strict-pass complete. Vite build green</td>
      <td>80h</td>
      <td>100m</td>
      <td>2.0w</td>
      <td>48.0x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Three new structured content specs authored, synthesized end-to-end through the validation pipeline and repair stage, packages propagated, S3 sync to both backup buckets</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Content audit: validated 919 specs, 218 packages, 1.03M questions, 2,048 labs; refreshed canonical and documentation</td>
      <td>6h</td>
      <td>8.25m</td>
      <td>0.15w</td>
      <td>43.6x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cloud lab simulator: SCS-C02 strict-pass migration -- 25/25 AWS Security Specialty labs migrated to DOM-driven format. Fixed 21 bogus resource types (Inspector2, Lambda Alias, NetworkFirewall, AccessAnalyzer, Shield ProactiveEngagement, IAM ManagedPolicy, S3 BucketPolicy). Lab-10 remapped from Network Firewall to WAF and VPC route tables. Reported 18 dashboard testId gaps. Three parallel sub-agents with one watchdog timeout requiring re-launch. Audit clean for all 25 labs. Vite build green</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Full ecosystem audit across 72 repos: readiness, compliance, security, documentation audits; regenerated ecosystem inventory</td>
      <td>24h</td>
      <td>38m</td>
      <td>0.60w</td>
      <td>37.9x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Auth service: Apple Sign In backend -- config variables, ES256 client_secret JWT, auth-code exchange, schema, API wiring, unit tests</td>
      <td>4h</td>
      <td>7m</td>
      <td>0.10w</td>
      <td>34.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Content audit follow-up: 555 specs backfilled with corrected metadata, 62 manifests synthesized, 9 lessons composed, 67 cert exams researched and applied; zero findings remaining (except hero images, deferred)</td>
      <td>18h</td>
      <td>32m</td>
      <td>0.45w</td>
      <td>33.8x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Daily-task-tracker app: full backend reshape -- collapse master<em>lists/list</em>instances/containers/collaborators into polymorphic ListNode hierarchy with areas/projects/lists structure; issue-tracker bidirectional sync; third-party app importer rebuild; profile fix; migration transaction fix; connection pool cap</td>
      <td>36h</td>
      <td>75m</td>
      <td>0.90w</td>
      <td>28.8x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Learning platform: adaptive engine completion-target mode -- database migration, completion math, ETA calculation, ranker branch, 17 unit tests; learning platform web client Activate Autopilot mode toggle and CompletionCard with mastery dial and dual threshold bars</td>
      <td>16h</td>
      <td>38m</td>
      <td>0.40w</td>
      <td>25.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Cloud lab simulator AWS fleet semantic-drift and testId-gap closure: built 5 missing AWS services (Network Firewall, AWS VPN, NAT Gateway, X-Ray, Application Auto Scaling -- each with SDK client, dashboard, ~5 testIds per modal); extended SageMaker SDK with 3 new types, 9 methods, 3 dashboard sections; backfilled ~280 testIds across 50 dashboards; re-migrated 9 drift labs; final strict-pass on DVA-C02 (24 labs) plus assertion-quality fixes across CLF/AIF/SAA/SOA (24 labs); patched audit script to recognize propertiesContain/propertiesPresent; 3 commits totaling 286 files / 12K LOC delta. Vite build green. All 290 AWS labs audit-clean</td>
      <td>60h</td>
      <td>145m</td>
      <td>1.5w</td>
      <td>24.8x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Learning platform web client: add RequireAuth guard into router to close unauthenticated route access</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Internal issue-tracker: merge Issues board into Web App board; update bug-reporter config, fix-skill integration, and fix manifest</td>
      <td>3h</td>
      <td>9m</td>
      <td>0.075w</td>
      <td>20.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Internal issue-tracker: tools-board descriptions, IaC tool board creation, cross-board card drag in sidebar</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Learning platform: remove static credit awards, add training-mass gate using cosine-similarity prior, per-goal confidence scoring, best-section endpoint, wrong-answer review modal, recalibration banner, autopilot single-radio fix, fingerprint card width fix, help docs update</td>
      <td>24h</td>
      <td>75m</td>
      <td>0.60w</td>
      <td>19.2x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Admin dashboard: configurable S3 snapshot bucket with graceful unconfigured state, structured disabled response for portfolio health, durable Postgres audit log backend (write-behind writer, ORM model, Alembic migration, hydrate-on-restart), UI status driven from API</td>
      <td>12h</td>
      <td>40m</td>
      <td>0.30w</td>
      <td>18.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Learning platform web client and shared UI library: real TTS error reporting (replace 400ms fake-loading timer), rename Mark Lesson as Read button, collapsible course-outline sidebar replacing horizontal section scroller</td>
      <td>6h</td>
      <td>22m</td>
      <td>0.15w</td>
      <td>16.4x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Daily-task-tracker app backend: rewrite 7 test files against ListNode model</td>
      <td>4h</td>
      <td>18m</td>
      <td>0.10w</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>IaC tool cross-account scanning: backend assume-role plumbing, 9 unit tests, deploy CloudFormation StackSet org-wide (management account plus 5 member accounts), wired ExternalId via SSM, smoke-tested two-hop assume-role</td>
      <td>7h</td>
      <td>35m</td>
      <td>0.17w</td>
      <td>12.0x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Learning platform: additional proficiency inflation fixes -- autopilot completion endpoint, readiness endpoint, catalog-proficiency, ELO mapping; CloudFront frame-ancestors self for lab embedding</td>
      <td>6h</td>
      <td>30m</td>
      <td>0.15w</td>
      <td>12.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>IaC tool live-scan: per-resource WebSocket events from inventory upsert/tombstone, scan lifecycle events, async scan_org op, animated inventory page with Framer Motion (insert/update/remove), scan progress bar, two-hop assume-role wired via deploy script, EC2 and task-role trust</td>
      <td>9h</td>
      <td>50m</td>
      <td>0.23w</td>
      <td>10.8x</td>
      <td>67.5x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Service health monitoring tool: add frontend site kind field, add Frontend Apps group, move fleet health to right sidebar (two-column layout)</td>
      <td>2.5h</td>
      <td>15m</td>
      <td>0.062w</td>
      <td>10.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Cloud lab simulator crash recovery: commit SOA-C02 strict re-pass (15/25), resync 22 cloud packages to S3 backup buckets (east and west regions), migrate remaining 10 SOA-C02 labs to strict format (4 bogus resource type fixes, 2 SDK registry additions). Vite build green, audit clean for all 25 SOA-C02 labs</td>
      <td>8h</td>
      <td>50m</td>
      <td>0.20w</td>
      <td>9.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Security audit remediation: CloudFront security-headers policy on 3 production domains; auth-service and engine middleware hardening; JWT library replaced (python-jose to PyJWT); buildspec updates; CLAUDE.md repo documentation updates; corporate site localhost reference purge</td>
      <td>5h</td>
      <td>32m</td>
      <td>0.12w</td>
      <td>9.4x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>IaC tool inventory polish: pagination, sort, resize, real-data dropdowns, resource detail page with EC2/VPC/SG/S3/IAM/Lambda/ACM specializations plus RelatedResources cross-references; IP Space crash fix (vpc_summary CIDR); inventory get/related/facets ops</td>
      <td>16h</td>
      <td>70m</td>
      <td>0.40w</td>
      <td>13.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Fix two stale strategy-endpoint tests asserting old broken behavior -- align with current 200-always contract</td>
      <td>0.5h</td>
      <td>4m</td>
      <td>0.013w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Adaptive engine: drive fast test suite to 100% green -- catalog count bump, scenario seed-path test rewrite (was 25 vs 27; scenario_engine=None no longer triggers 503)</td>
      <td>0.5h</td>
      <td>5m</td>
      <td>0.013w</td>
      <td>6.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Daily-task-tracker app backend refactor: collapse master<em>lists/list</em>instances/containers/collaborators into ListNode hierarchy; rewrite all API routes, services, schemas, Alembic migration, and full test suite (148 passing)</td>
      <td>24h</td>
      <td>95m</td>
      <td>0.60w</td>
      <td>15.2x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Admin dashboard persistence page: end-to-end production deploy -- local schema test, prod RDS migration via SSM tunnel, recovery from cross-team migration collision (renamed table to avoid naming clash with another service), prod DB rollback after a stray migration from another author broke the deploy, engine and admin pushes verified live</td>
      <td>6h</td>
      <td>105m</td>
      <td>0.15w</td>
      <td>3.4x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>31</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>619.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,329</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>15.5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>24,120,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>28.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>290.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The three large lab migrations (tasks 1, 2, and 4) are the defining work of April 27. Together they processed 625 labs across 39 certifications spanning AWS, Azure, and GCP in 240 combined Claude-minutes at an average of roughly 66x leverage. The GCP migration (task 1) was the most efficient per lab: 275 labs in 60 minutes at 80x leverage, driven by 13 parallel sub-agents running simultaneously, each handling one certification&#39;s labs in full. The Azure migration (task 2) hit a mid-run org-level API usage cap and had to wait for the reset, which added wall-clock time without adding Claude-time; the 80-minute figure reflects actual compute time. The 75x leverage on 370 Azure labs represents approximately 4.6 labs per Claude-minute. The AWS batch (task 4) covered the 7 remaining AWS certifications not yet migrated, reaching 48x leverage across 155 labs. Across all three tasks, the work required replacing hundreds of legacy resource type strings with real SDK-emitted types, cleaning cross-cloud type leakage (Azure types appearing in GCP labs, for example), and backfilling testId attributes on dashboards that lacked them. The entire provider corpus of 935 labs now passes the strict-pass audit with zero issues.</p>
<p class="mb-4 font-light font-serif">The daily-task-tracker app backend refactor appears twice in the task log (tasks 11 and 30) because it was logged as two separate sessions: task 11 (36h, 75m, 28.8x) covers the full architectural reshape of the ListNode hierarchy, third-party app importer rebuild, and integration work; task 30 (24h, 95m, 15.2x) covers the associated API route rewrites, schemas, Alembic migration, and full test suite (148 passing). The 15.2x leverage on task 30 is lower than task 11 because test suite rewrites are more AI-time-intensive than implementation: each test needs to be read, understood in context of the new schema, and rewritten to match the new API contracts. The two tasks together represent 60 human-equivalent hours produced in 170 minutes (2h 50m) for a combined leverage of approximately 21.2x. A human engineer doing a similarly scoped backend refactor with full test coverage would typically spend 1-2 weeks on the same work.</p>
<p class="mb-4 font-light font-serif">The admin dashboard persistence page deploy (task 31, 3.4x, 105 minutes) is the bottom item in the leverage table and illustrates a class of work that will always produce low leverage: production database migrations with external dependencies and mid-deploy collisions. The fix itself was straightforward (rename the Alembic migration target table to avoid a naming conflict with a different service&#39;s migration). But when the prod database is involved, every step requires verification via SSM tunnel, and when a stray migration from another author applies itself during the deployment window, the rollback and re-sequence procedure takes real time. The 105-minute session produced 6 human-equivalent hours at 3.4x. The work was necessary and the outcome was correct (the admin and engine services are live and verified), but this is a good example of why deployment work consistently sits at the bottom of leverage tables: the AI is mostly waiting for remote operations, reading logs, and executing one sequential step at a time.</p>
<p class="mb-4 font-light font-serif">Token consumption on April 27 (24,120,000) is the highest single-day figure in the log by a factor of roughly 2.4x over April 26 (9,919,000) and nearly 6x over April 25 (4,109,000). The spike is almost entirely explained by the three lab migrations: the GCP migration (4,500,000 tokens), the Azure migration (5,500,000 tokens), and the AWS fleet semantic-drift closure (4,500,000 tokens) together account for 14,500,000 tokens across three tasks. The high token counts on these tasks reflect the parallel sub-agent architecture: each sub-agent runs a full context window with the lab definitions, SDK registry, audit script output, and prior migration examples. Running 13 simultaneous GCP sub-agents produces 13 simultaneous context loads. The actual information density per token is high (lab JSON is structurally rich), which means the token cost per task is largely unavoidable at this scale. The remaining 28 tasks consumed approximately 9,620,000 tokens, consistent with prior days.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage on the lab migration tasks deserves specific attention. All three migrations have supervisory leverage above 4,800x (tasks 1 and 4) or 6,000x (task 2). Each was launched from a one-minute directive: &quot;migrate all GCP labs,&quot; &quot;migrate all Azure labs,&quot; &quot;migrate these 7 AWS certifications.&quot; The AI then planned and executed the parallel sub-agent strategy, handled the API usage cap recovery, merged the sub-agent outputs, ran the audit verification, and produced a green Vite build in a single session with no further human input. The 6,000x supervisory leverage on the Azure migration means the human invested roughly 0.01% of the equivalent human work time in supervision. The 290.4x weighted supervisory leverage for the full day, while lower than April 25&#39;s 1,373.1x, is still an order of magnitude above what a traditional software team could achieve with the same supervisory investment.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 26, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-26-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-26-leverage-record.html</id>
    <updated>2026-04-26T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seventy-four tasks. April 26 is the highest task count in this log, and the structure was fundamentally different from the previous two days. Instead of a small number of massive parallel-execution phases, the day spread across three distinct workstreams running concurrently: the internal cloud-infrastructure provisioning tool received a major feature push (tag governance, FinOps pipeline, frontend redesign, Playwright tests, cross-account scanning, live-scan WebSocket events, inventory polish); an internal daily-task-tracker app was reshaped from the ground up with a new data model, smart views, subtasks, drag-and-drop, photo attachments, web notifications, and bidirectional project-share collaboration; and the cloud lab simulator finished its SAA-C03 strict-pass migration (29 remaining labs, one per session) while the cloud certification feature set expanded from 125 to 268 services across AWS, Azure, and GCP. Forty additional tasks covered a VersionChecker fleet rollout across 19 tool frontends, bug reporter wiring, activity component work, the learning platform web client, diagnostic fixes, the auth service, and individual lab migrations for other certification tracks. Total for the day: 899.0 human-equivalent hours in 2,006 Claude-minutes. Weighted leverage was 26.9x, weighted supervisory leverage 245.7x.</p>
<p class="mb-4 font-light font-serif">April 25 posted 136.0x weighted leverage on 2,288.5 equivalent hours. April 26 is lower on both dimensions: more hours of AI time, fewer human-equivalent hours produced, and roughly one-fifth the leverage. The reason is structural. The tier-promotion campaign that dominated April 24 and 25 was an extremely high-leverage pattern: the architecture was locked, the AI was executing a known transformation across successive service groups, and human involvement was minimal. April 26 shifted to a wider variety of work at lower average leverage: individual lab migrations (each requiring its own testId sweeps and SDK extensions), iterative feature work on two applications simultaneously, a VersionChecker rollout across 19 separate tool repos, and the kind of low-level debugging work (CORS regressions, TS build errors, pipeline failures) that bottoms out at single-digit leverage. The 74-task breadth shows in the weighted average.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>IaC tool Phase 11 end-to-end: tag governance and FinOps module. Alembic migrations for taxonomy and finops tables, governance validator/auto-inject/stack-builder, FinOps CUR/Athena rollup and cost-allocation pipeline, 14 ops handlers, 14 MCP tools, 14 WebSocket ops, frontend pages (taxonomy, tag compliance, chargeback, enforcement, inventory); planner/applier integration with hard-block enforcement. Three sub-agents delivered 18 missing resource types, 14 governance plumbing types, and 6 Lambda Config-rule sources plus conformance pack JSON</td>
      <td>240h</td>
      <td>58m</td>
      <td>6.0w</td>
      <td>248.3x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>IaC tool: implement 18 missing Tier-1 AWS resource types (20 files including unit tests)</td>
      <td>24h</td>
      <td>22m</td>
      <td>0.60w</td>
      <td>65.5x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Cloud lab simulator: CLF-C02 -- 15/15 labs strict-pass via 7 parallel sub-agents migrating to DOM-driven format; paved Billing, Budgets, Trusted Advisor, Well-Architected, SNS, Lambda detail tabs, S3 block-public-access; full audit sweep clean in 60 seconds</td>
      <td>30h</td>
      <td>35m</td>
      <td>0.75w</td>
      <td>51.4x</td>
      <td>225.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Daily-task-tracker app: native Q&amp;A Phase B -- bidirectional item-thread WebSocket round-trip, ItemThread/ItemMessage/ItemThreadRead schema, thread service with rate limiting, owner and guest WebSocket handlers for message post/read, thread frontend components, 13 backend and 4 frontend tests</td>
      <td>20h</td>
      <td>24m</td>
      <td>0.50w</td>
      <td>50.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Daily-task-tracker app: full remediation -- audit docs vs implementation, build Inbox, Today/Upcoming/Anytime/Someday/Logbook smart views, Quick Add with natural-language date parser, recurring task generator (daily/weekly/monthly), Areas, standalone lists; 18 backend tests and updated frontend tests</td>
      <td>30h</td>
      <td>36m</td>
      <td>0.75w</td>
      <td>50.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Daily-task-tracker app: native Q&amp;A Phase A -- contact-anchored project shares, Copy Link UX, per-task assignment, guest scoped view and WebSocket frame, 15 backend and 4 frontend tests; all docs updated</td>
      <td>24h</td>
      <td>32m</td>
      <td>0.60w</td>
      <td>45.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>IaC tool: frontend redesign -- translate 9 HTML mockups into TSX pages wired to WebSocket backend; ForgeLayout, StatusChip, LogViewer, DiffViewer, 14 pages, Tailwind config, CSS helpers</td>
      <td>60h</td>
      <td>80m</td>
      <td>1.5w</td>
      <td>45.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Daily-task-tracker app: native Q&amp;A Phases C and D -- photo attachments (S3 and local backends, Pillow thumbnails, HEIC-to-JPEG, magic-byte MIME sniffing, signed URLs, per-share daily quota) and Web Notifications with Web Audio synthesized chimes, permission banner, localStorage prefs; 10 backend and 8 frontend tests</td>
      <td>22h</td>
      <td>30m</td>
      <td>0.55w</td>
      <td>44.0x</td>
      <td>1320.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Daily-task-tracker app: subtasks UI (nested rendering, add-subtask composer, parent progress bar) plus drag-and-drop reorder via @dnd-kit (within and across containers) and cross-list Move-to menu; 4 new backend tests</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>IaC tool: audit (built vs. designed) plus tag governance and FinOps design corpus -- new governance.md, updated requirements, plan (Phase 11A-E added), testing strategy; defines 9-key taxonomy, three-layer enforcement (apply-time validator, SCPs/Tag Policies, Config rules), CUR 2.0 and showback/chargeback pipeline, 14 new resource types, WebSocket and MCP surface, frontend routes</td>
      <td>14h</td>
      <td>22m</td>
      <td>0.35w</td>
      <td>38.2x</td>
      <td>280.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>IaC tool: redesign integration sweep -- orchestrated 3 sub-agents (UI conversion of 9 mockups to React, scan-and-import-by-project-tag feature, Playwright e2e suite); integration commit reconciling 5 pages with real backend response shapes</td>
      <td>24h</td>
      <td>40m</td>
      <td>0.60w</td>
      <td>36.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Personal site: generate hero image for the leverage page using Flux 1.1 Pro via Replicate; restructure leverage hero into two-column layout with floating multiplier stat overlay matching redesign mockup</td>
      <td>1.5h</td>
      <td>3m</td>
      <td>0.037w</td>
      <td>30.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Cloud lab simulator: migrate SAA-C03 lab 02 (NACLs) to DOM-driven format end-to-end -- NACL SDK, dashboard CRUD, uiSteps spec, Vitest unit tests, Playwright watch 50/50</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>IaC tool: implement 14 AWS resource types for tag-governance plumbing (Organizations Policy/PolicyAttachment, AWS Config recorder/delivery channel/rules/conformance packs, CUR report definition, Cost Explorer cost category, Athena workgroup/named query, Glue database/table)</td>
      <td>14h</td>
      <td>28m</td>
      <td>0.35w</td>
      <td>30.0x</td>
      <td>168.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Cloud certification platform: case-study generator stage from scenario seeds (320 cases across 40 cloud-cert domains, 8 per cert, deterministic transform with no LLM cost); case-studies API endpoint; client prefers per-cert engine pool over catalog with graceful fallback; 15 additional services across AWS/Azure/GCP (268 total); manifold dirty-vector bug fix; DEV-C01 renamed to AIP-C01 to unblock AWS Generative AI Pro cert</td>
      <td>36h</td>
      <td>75m</td>
      <td>0.90w</td>
      <td>28.8x</td>
      <td>432.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Cloud lab simulator: ELB testId sweep (foreground after sub-agent stall) plus AutoScaling and RDS testId sweeps; SAA-C03 lab 06 migration (multi-service: launch template, target group, ALB, ASG, scaling policy)</td>
      <td>12h</td>
      <td>28m</td>
      <td>0.30w</td>
      <td>25.7x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Cloud certification platform: content-coverage tracker (generator, manifest, 39/40 ready report); AWS/Azure/GCP service catalog rewrites (47/41/37 to 80/77/64 services with comprehensive cert tagging); 12 new hand-authored procedures and 8 error drills across networking/DevOps/data-eng/ML; simulation activity dispatcher; help center polish; deploy verification</td>
      <td>40h</td>
      <td>95m</td>
      <td>1.0w</td>
      <td>25.3x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Cloud lab simulator: fix 4 failing SDK unit tests plus ARN-collision bug for GCP/Azure resource types</td>
      <td>2.5h</td>
      <td>6m</td>
      <td>0.062w</td>
      <td>25.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Cloud lab simulator: SAA-C03 lab 21 (EFS mount target) migrated to DOM-driven format -- EFS dashboard testId sweep (sidebar, create filesystem, mount-target/lifecycle buttons, modals); 4-step multi-service lab; Watch 100% strict on first try; 15/29 SAA-C03</td>
      <td>2.5h</td>
      <td>6m</td>
      <td>0.062w</td>
      <td>25.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Cloud lab simulator: SAA-C03 lab 10 (Serverless API: DynamoDB + Lambda + API Gateway) migrated to DOM-driven format -- Lambda and API Gateway dashboard testId sweeps (sidebar, REST API row, 3 detail tabs, per-resource buttons, 4 modal prefixes); SAA-C03 100% (29/29)</td>
      <td>5h</td>
      <td>12m</td>
      <td>0.12w</td>
      <td>25.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Cloud lab simulator: ElastiCache, CloudFront, and Route 53 testId sweeps; SAA-C03 labs 12 (Redis) and 13 (CloudFront/S3) migrated to DOM-driven format</td>
      <td>10h</td>
      <td>25m</td>
      <td>0.25w</td>
      <td>24.0x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Cloud lab simulator: parallel testId sweeps (EC2 43 IDs, IAM 105 IDs, S3 10 IDs) plus Tabs testIdPrefix; SAA-C03 lab 03 migration; IAM trust-policy validator fix; EC2 launch-modal IAM profile selector</td>
      <td>14h</td>
      <td>35m</td>
      <td>0.35w</td>
      <td>24.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Cloud lab simulator: SAA-C03 lab 20 (EBS volumes) migrated to DOM-driven format -- EC2 SDK additions (createVolume, attachVolume, createSnapshot), EC2 Volumes and Snapshots dashboard panels, assertion repairs; 25/29 SAA-C03</td>
      <td>4h</td>
      <td>10m</td>
      <td>0.10w</td>
      <td>24.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Cloud lab simulator: SAA-C03 lab 18 (CloudFormation) migrated to DOM-driven format -- CFN dashboard testId sweep; template materialization SDK (creates VPC/Subnet/SG/Bucket from JSON template, resolves Refs, tracks logical-id-to-ARN for updateStack diff); 27/29 SAA-C03</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Cloud lab simulator: SAA-C03 lab 07 (Multi-AZ RDS) migrated to DOM-driven format end-to-end</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Cloud lab simulator: SAA-C03 lab 23 (SQS dead-letter queue) migrated to DOM-driven format -- SQS dashboard testId sweep (sidebar, create button, per-row Edit/Send buttons, three modal prefixes); Watch 100% strict on first try; 11/29 SAA-C03</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Cloud lab simulator: SAA-C03 lab 11 (S3 Transfer Acceleration and lifecycle) migrated to DOM-driven format; two assertion repairs (transferAcceleration boolean-to-string, lifecycleConfiguration-to-lifecycleRules); 19/29 SAA-C03</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Cloud lab simulator: SAA-C03 lab 08 (Aurora Global Database) migrated to DOM-driven format -- RDS SDK fix (createDBCluster auto-creates writer DBInstance with cluster identifier as name, dbClusterMembers array populated); regression-clean on lab 07; 28/29 SAA-C03</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Cloud lab simulator: SAA-C03 lab 16 (VPC endpoint for S3) migrated to DOM-driven format -- VPC SDK additions (createVpcEndpoint, modifyVpcEndpoint), Endpoints dashboard panel; SAA-C03 truly 30/30</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Cloud lab simulator: SAA-C03 lab 14 (Route 53 failover) migrated to DOM-driven format; 4 assertion repairs (trailing-dot mismatches, broken tag:Name filter, unrecognized property names); Watch 100% strict on first try; 12/29 SAA-C03</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Cloud lab simulator: KMS testId sweep, S3 encryption and policy editor; SAA-C03 lab 05 migration with broken-assertion repairs</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Cloud lab simulator: SAA-C03 lab 30 (Secrets Manager) migrated to DOM-driven format -- Secrets Manager dashboard testId sweep (sidebar, store-secret, secret rows, 5 detail tabs, rotation/policy buttons and modal prefixes); reworked from 0-point auto-pass to 50-point real scoring; 2 assertion repairs; 21/29 SAA-C03</td>
      <td>2.5h</td>
      <td>7m</td>
      <td>0.062w</td>
      <td>21.4x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Cloud certification platform: replaced placeholder case study stubs with proper per-provider catalog; authored 15 real-world incident cases (5 per cloud) tagged by certification code; built loader and picker; added 3 Azure error drills (AKS misconfiguration, App Service config exposure, Azure Pipelines secret leak); engine receives case-studies catalog mirror and endpoint extension</td>
      <td>12h</td>
      <td>35m</td>
      <td>0.30w</td>
      <td>20.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>IaC tool Phase 11C: six AWS Config custom-rule Lambda handlers, tag-governance conformance pack, 48-test suite</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Personal site search Lambda: containerize and migrate to staging environment -- rebuild Docker image with Lambda-compatible manifest, push to ECR, recreate Lambda as container image type, recreate API Gateway HTTP API with explicit POST route (CORS preflight 204 fix), tag every resource for cost tracking, delete legacy resources, redeploy site</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Cloud lab simulator: SAA-C03 lab 27 (WAF) migrated to DOM-driven format -- WAF dashboard testId sweep (sidebar, ACL row, modals for create/add-rule/logging); reworked from 0-point auto-pass to 50-point real scoring; 22/29 SAA-C03</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Learning platform web client: flashcard activity -- inline rendering, course-aware picker, concept catalog as primary source</td>
      <td>5h</td>
      <td>15m</td>
      <td>0.12w</td>
      <td>20.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Cloud lab simulator: SAA-C03 lab 19 (S3 lifecycle) migrated to DOM-driven format; reworked from 0-point auto-pass to 50-point real scoring with 3 progressive lifecycleRules saves through Management tab JSON editor; 20/29 SAA-C03</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Cloud lab simulator: SAA-C03 lab 17 (Elastic Beanstalk) migrated to DOM-driven format -- Beanstalk dashboard testId sweep; reworked from 0-point to 50-point real scoring; 23/29 SAA-C03</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Cloud certification platform: 19 unit tests for builders and scorers; 3 GCP error drills (BigQuery cost, Cloud Run public access, VPC firewall); 9 high-value services across AWS/Azure/GCP (AppFlow, IoT Core, Q Developer, Durable Functions, Container Apps Jobs, IoT Hub, Dataform, Cloud Composer, Anthos); engine-side providers tree and GET endpoint; live engine health verification; 254 cloud services total (up from 125 at start of day)</td>
      <td>16h</td>
      <td>50m</td>
      <td>0.40w</td>
      <td>19.2x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Cloud lab simulator: SAA-C03 lab 29 (DynamoDB Global Tables) migrated to DOM-driven format -- DynamoDB dashboard testId sweep (sidebar, create button, table row, 6 tabs, 3 action buttons, 3 modal prefixes); Watch 100% strict on first try; 13/29 SAA-C03</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Cloud lab simulator: SAA-C03 lab 26 (AWS Config) migrated to DOM-driven format -- Config dashboard testId sweep (sidebar, add-rule button and modal); cross-service navigate step; Watch 100% strict on first try; 17/29 SAA-C03</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Cloud lab simulator: SAA-C03 lab 15 (VPC peering) migrated to DOM-driven format -- VPC SDK additions (createVpcPeeringConnection, acceptVpcPeeringConnection, addRoute), Peering Connections and Add Route panels; assertion repairs (drop bogus API Gateway route type, fix routes:present string-vs-array); regression-clean on labs 01/02/21/22; 26/29 SAA-C03</td>
      <td>4.5h</td>
      <td>15m</td>
      <td>0.11w</td>
      <td>18.0x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Cloud lab simulator: SAA-C03 lab 24 (EventBridge and Lambda) migrated to DOM-driven format -- EventBridge dashboard testId sweep; reworked from 0-point to 50-point real scoring; 24/29 SAA-C03</td>
      <td>2h</td>
      <td>7m</td>
      <td>0.050w</td>
      <td>17.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Cloud lab simulator: SAA-C03 lab 04 (cross-account IAM roles) migrated to DOM-driven format -- AttachPolicyModal flow, IAM row-click navigation fix, broken-assertion repairs</td>
      <td>5h</td>
      <td>18m</td>
      <td>0.12w</td>
      <td>16.7x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>IaC tool: scan and bulk-import AWS resources by Project tag -- discovery module, 3 WebSocket ops, 3 MCP tools, ResourceImportPlanner helper, 55 unit tests</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Cloud lab simulator: SAA-C03 lab 09 (S3 cross-region replication) migrated to DOM-driven format -- S3 SDK additions (setBucketReplication, setBucketAccelerateConfiguration, putBucketLifecycleConfiguration), S3 Management tab; bucket modal versioning state reset bug fix; 18/29 SAA-C03</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>48</td>
      <td>IaC tool: full Playwright end-to-end suite -- 12 spec files, data-testid instrumentation across all 14 pages, playwright config, auth and seed fixtures, README, package.json scripts</td>
      <td>14h</td>
      <td>55m</td>
      <td>0.35w</td>
      <td>15.3x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>49</td>
      <td>Personal site: three article-page polish fixes -- TOC anchor scroll-margin-top so headings clear the fixed header; smaller table font with tighter cells; category pill made clickable with topic-anchor or tag-page targets; articles index gets id attribute per topic group</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>50</td>
      <td>Personal site: search widget markdown rendering and SSE parsing; tags template rebuild; Lambda upgraded to FastAPI/Lambda Web Adapter streaming container; APIGW HTTP API path retained with LWA buffered mode (CloudFront Function URL OAC blocked by SigV4 body-signing limitation)</td>
      <td>10h</td>
      <td>40m</td>
      <td>0.25w</td>
      <td>15.0x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>51</td>
      <td>Cloud lab simulator: SAA-C03 lab 28 (Athena with S3) migrated to DOM-driven format -- Athena dashboard testId sweep (sidebar, create workgroup and database modals); Watch 100% strict on first try; 14/29 SAA-C03</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>52</td>
      <td>Cloud lab simulator: SAA-C03 lab 22 (FSx for Windows) migrated to DOM-driven format -- FSx dashboard testId sweep; case-fix follow-up commit; Watch 100% strict; 16/29 SAA-C03</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>53</td>
      <td>Learning platform activity library Phase 1: Recall Sprint activity (decay and fade), Case Study dedicated page with sample content, session plan dispatcher fixes, help center reset with Service Match added and deprecated activities removed</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>54</td>
      <td>Cloud lab simulator: SAA-C03 lab 25 (CloudTrail) migrated to DOM-driven format -- CloudTrail dashboard testId sweep; SDK fix (isLogging defaults true); assertion repair (propertiesContain to properties); Watch 100% strict; 10/29 SAA-C03</td>
      <td>2h</td>
      <td>9m</td>
      <td>0.050w</td>
      <td>13.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>55</td>
      <td>Learning platform activity library Phases 2 and 3: Service Match (3 modes), Flashcards, Recall Sprint, Procedural, Error Detection -- all end-to-end for AWS/Azure/GCP with hand-authored content (~125 services, 12 procedures, 12 error drills); engine fix for 2-3s MCQ grader regression (backgrounded 6 durable writes); ranker and canonical catalog registration</td>
      <td>24h</td>
      <td>110m</td>
      <td>0.60w</td>
      <td>13.1x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>56</td>
      <td>Diagnose CORS regression breaking bug reporter across entire tool fleet; replace brittle SSM allowlist with regex covering all production domains and localhost; add lock-in test suite; deploy and verify 36 origins live in prod</td>
      <td>3h</td>
      <td>14m</td>
      <td>0.075w</td>
      <td>12.9x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>57</td>
      <td>VersionChecker reload modal rollout across 4 internal tools: versionPlugin, CSS module, TSX component, App.tsx mount, commit and push per tool</td>
      <td>2h</td>
      <td>10m</td>
      <td>0.050w</td>
      <td>12.0x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>58</td>
      <td>Reprioritize validation pipeline to cloud-certification-first queue (22 packages: AWS, GCP, Azure); build per-package auto-snapshot wrapper; kill current run and restart</td>
      <td>1h</td>
      <td>5m</td>
      <td>0.025w</td>
      <td>12.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>59</td>
      <td>VersionChecker reload modal rollout: patent browser, CRM tool, leverage tracker, newsletter tool -- versionPlugin in vite.config, VersionChecker component and CSS, mount in App.tsx, verify builds, commit and push all four</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.3x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>60</td>
      <td>Fix internal issue-tracker frontend TypeScript errors blocking CodePipeline: Sidebar ProjectBoardSummary/Board type mismatch and BoardContext BOARD_LOADED dispatch cast drift</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.3x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>61</td>
      <td>Cloud lab simulator: DOM-driven lab executor pilot -- schema, driver, ACM dashboard testIds; migrate SCS-C02 lab 22; full Watch verification (50/50)</td>
      <td>14h</td>
      <td>75m</td>
      <td>0.35w</td>
      <td>11.2x</td>
      <td>168.0x</td>
    </tr>
    <tr>
      <td>62</td>
      <td>Learning platform web client: UX pass -- hero palette, profile tabs (Resume and Schedule), comp plan rendering, AWS cert naming corrections, activity gating, Exam Info section, Labs sort, course-card Activities link, streak alignment</td>
      <td>14h</td>
      <td>75m</td>
      <td>0.35w</td>
      <td>11.2x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>63</td>
      <td>VersionChecker fleet rollout: integration repair and static site generator emergency triage. Diagnosed 4 broken CodePipelines via state and log analysis; dispatched 4 parallel fix agents; self-handled static site generator through 5 rounds of pre-existing breakage (vendored 2 legal markdown files, restored missing markdownToHtml util, added missing design system dependency, pinned lucide-react to peer-required version, added tailwindcss-animate); all 19 tool frontends deployed clean</td>
      <td>6h</td>
      <td>35m</td>
      <td>0.15w</td>
      <td>10.3x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>64</td>
      <td>Learning platform: format-aware activity chrome, fallback safety, enrollment race fix</td>
      <td>4h</td>
      <td>25m</td>
      <td>0.10w</td>
      <td>9.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>65</td>
      <td>Learning platform web client: vite build onwarn filter to fix CI build failure (UNRESOLVED_IMPORT from activity UI library escalated to error by plugin-react)</td>
      <td>1h</td>
      <td>8m</td>
      <td>0.025w</td>
      <td>7.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>66</td>
      <td>VersionChecker rollout: wiki tool, local RAG tool, email client, issue tracker -- versionPlugin in vite.config, VersionChecker component created, mounted in App.tsx, built and pushed all 4 tools</td>
      <td>1.5h</td>
      <td>14m</td>
      <td>0.037w</td>
      <td>6.4x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>67</td>
      <td>Bug reporter end-to-end: capture reporter identity in learning platform web client; send confirmation email via notification-service template and migration; wire issue-tracker service client, test, environment variables across SSM and ECS deploy</td>
      <td>6h</td>
      <td>60m</td>
      <td>0.15w</td>
      <td>6.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>68</td>
      <td>VersionChecker rollout: time tracker, static site generator, list template app, analytics tool (3 of 4 succeeded; static site generator skipped due to dirty working tree)</td>
      <td>1.5h</td>
      <td>15m</td>
      <td>0.037w</td>
      <td>6.0x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>69</td>
      <td>Fix time-tracker frontend CodePipeline TypeScript build error: replace global with globalThis in accessibility test</td>
      <td>0.5h</td>
      <td>5m</td>
      <td>0.013w</td>
      <td>6.0x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>70</td>
      <td>Cloud lab simulator Phase 0 (translator, extended audit, SDK registry, analyzer, baseline) and Phase 1A (VPC dashboard testIds via sub-agent); SAA-C03 lab 01 100% strict</td>
      <td>16h</td>
      <td>180m</td>
      <td>0.40w</td>
      <td>5.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>71</td>
      <td>Cloud lab simulator: zero-stubs rule, lab-authoring requirements documented; deleted animateCheckpoint stub-resource fallback (~520 lines); added Watch sweep result analyzer; ran full 2,048-lab Watch baseline (75 min, 9.4% strict pass / 14.6% aggregate score / 80% zero -- schema-clean labs are runtime-broken)</td>
      <td>8h</td>
      <td>90m</td>
      <td>0.20w</td>
      <td>5.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>72</td>
      <td>VersionChecker rollout: daily-task-tracker, accounting tool, contact/relationship tool, service health monitor -- 4 repos, component, CSS, vite plugin, App.tsx mount each</td>
      <td>2h</td>
      <td>25m</td>
      <td>0.050w</td>
      <td>4.8x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>73</td>
      <td>Newsletter tool frontend: migrate toast library to shared design-system useToast hook; unblock CodePipeline</td>
      <td>0.5h</td>
      <td>18m</td>
      <td>0.013w</td>
      <td>1.7x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>74</td>
      <td>Cloud lab simulator: fix DOP-C02 lab 14 (Config rules and remediation) -- add uiSteps, fix propertiesContain-to-properties assertions, sync public copy</td>
      <td>0.5h</td>
      <td>18m</td>
      <td>0.013w</td>
      <td>1.7x</td>
      <td>10.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>74</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>899.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>2,006</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>22.5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>9,919,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>245.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The top item on April 26 is the IaC tool&#39;s Phase 11 end-to-end implementation: 240 human-equivalent hours in 58 minutes at 248.3x leverage. The scope covers a complete tag governance and FinOps module: database migrations for taxonomy and FinOps tables, a governance module with a three-layer enforcement chain (apply-time validator, hard-block planner integration, Config rule sources), a FinOps pipeline pulling from CUR/Athena, 14 WebSocket ops, 14 MCP tools, and a set of frontend pages covering taxonomy management, tag compliance dashboards, chargeback reporting, and enforcement views. Three parallel sub-agents handled sub-components (resource types, governance plumbing, Lambda Config-rule sources) during the session. The 248.3x leverage reflects a pattern that has appeared consistently in this log: when a large module is well-specified in advance and has a clear internal architecture to follow, the AI can execute it end-to-end in a single session at high autonomy with minimal back-and-forth.</p>
<p class="mb-4 font-light font-serif">The daily-task-tracker app work (tasks 4-9) spans Phases A through D of a Q&amp;A collaboration feature set plus a full task-model remediation. Phase B (bidirectional WebSocket item threads, 50x) was the highest-leverage phase because the architecture was straightforward and the pattern (WebSocket service layer, schema, handlers, React hooks, tests) was well-established from prior phases. Phase C and D together (photo attachments plus web notifications with synthesized audio chimes, 44x) involved more novel implementation: Pillow thumbnail generation with HEIC-to-JPEG conversion, magic-byte MIME sniffing, S3 signed URL generation with per-share daily quotas, and Web Audio API synthesis for notification sounds without relying on MP3 binaries. The 44x leverage on that task reflects the increased AI time required for genuinely novel implementation work versus execution of a familiar pattern. The remediation task (smart views, recurring tasks, Quick Add natural-language date parser, 50x) was high-leverage despite its breadth because the changes were architecturally independent and could be implemented in parallel.</p>
<p class="mb-4 font-light font-serif">The SAA-C03 lab migration sequence (tasks 13 and 15-29, 31-32, 36-39, 41-47, 51-52, 54) accounts for 29 individual tasks, each migrating one lab from a legacy format to the DOM-driven strict-pass format. The leverage on these ranges from 13.3x to 25.0x, with most clustering in the 15-25x band. The variation correlates directly with lab complexity: labs requiring new SDK methods (SAA-C03 lab 15 adding VPC peering methods, SAA-C03 lab 09 adding S3 replication methods) required more AI time per lab but are counted at higher equivalent-hour estimates because the SDK extensions benefit every other lab that touches the same services. Labs that were simple migrations of existing, well-specified patterns (SAA-C03 lab 23 at 22.5x, SAA-C03 lab 26 at 18x) ran faster. The progression from 0% to 100% SAA-C03 strict-pass completion through 29 sequential sessions over the course of a day is also a good illustration of how the DOM-driven migration pattern scales: each session is self-contained, auditable, and produces a verified commit.</p>
<p class="mb-4 font-light font-serif">The VersionChecker rollout (tasks 57, 59, 66, 68, 72) and the static site generator emergency triage (task 63) together account for 10 tasks and roughly 18 human-equivalent hours across 133 Claude-minutes at leverage ranging from 4.8x to 12x. This is the lowest-leverage cluster in the day&#39;s log, and the reasons are the same as always for fleet-wide rollout work: each repo requires its own edit cycle, build verification, and commit, and the AI cannot parallelize across 19 repos in a single session the way it can parallelize sub-agents within a single large implementation task. The static site generator triage in particular took 35 minutes because it hit five layers of pre-existing breakage that had to be diagnosed and fixed sequentially before the build would pass. The 10.3x leverage on that task is adequate, but it underscores that legacy breakage discovered mid-rollout is a leverage sink.</p>
<p class="mb-4 font-light font-serif">The two bottom-of-table items (tasks 73-74, 1.7x leverage, 18 minutes each) both represent cases where the fix was straightforward but the AI time was high relative to the output. The newsletter-tool toast migration (0.5h estimated, 18 minutes actual) involved a one-for-one component swap that should have taken 4-5 minutes; the session ran long due to exploratory dependency analysis. The Config lab fix (0.5h estimated, 18 minutes actual) hit a similar pattern: the fix was simple (assertion type correction plus uiSteps addition), but the session spent time on context-loading and verification. These are honest low-leverage tasks in any work week. The 1.7x factor means the AI took slightly over half the estimated human time, which is better than 1x but unremarkable. The bulk of the day&#39;s leverage came from the opposite end of the table.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 25, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-25-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-25-leverage-record.html</id>
    <updated>2026-04-25T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-seven tasks. April 25 was defined by a single dominant campaign: pushing the cloud lab simulator through eleven more tier-promotion phases (Phases 11 through 22) covering Azure identity, networking, compute, data, analytics/AI, DevOps, security, GCP identity, GCP networking/storage, GCP analytics/AI, and a final GCP security/DevOps sweep. Together those phases account for roughly 1,930 of the day&#39;s 2,288.5 human-equivalent hours. The remaining tasks filled in around the edges: backfill sweeps to normalize expected-action names across hundreds of labs, guided end-to-end spec authoring, component test coverage groups, a semantic search Lambda deployed end-to-end from embedding index to API Gateway, site template redesign work, adaptive engine shipping, and a fleet-wide pipeline emergency that discovered five production sites had a staging overlay incorrectly deployed. Total for the day: 2,288.5 human-equivalent hours in 1,010 Claude-minutes. Weighted leverage was 136.0x, weighted supervisory leverage 1,373.1x.</p>
<p class="mb-4 font-light font-serif">April 24 posted 76.4x weighted leverage and 986.7x supervisory leverage against a 1,513-hour day. April 25 nearly doubles both the output (2,288.5h) and the leverage (136.0x), driven by the same structural dynamic that made April 24 extraordinary: a long-running phase campaign where each phase follows a locked architecture and the AI can operate at high autonomy with minimal back-and-forth. By Phase 18 (GCP identity and compute, 15 services, 342.9x leverage), the pattern has been exercised so many times that a 3-minute directive prompt yields 160 human-equivalent hours of dashboards, SDKs, animators, and tests. The supervisory leverage numbers on the cloud lab phases (2,800x to 4,400x) reflect that reality directly.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cloud lab simulator Phase 18: GCP identity and compute (15 services including IAM policy analysis, org policy, workload identity federation, Compute Engine, App Engine, Cloud Functions, Cloud Run, GKE, autoscaling, instance groups) promoted to full tier</td>
      <td>160h</td>
      <td>28m</td>
      <td>4.0w</td>
      <td>342.9x</td>
      <td>3200.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Cloud lab simulator Phase 14: Azure data and storage (Azure SQL, Cosmos DB, PostgreSQL, MySQL, Redis, Blob, Files, ADLS Gen2, Queue, Managed Disks -- 10 services) promoted to full tier</td>
      <td>140h</td>
      <td>30m</td>
      <td>3m</td>
      <td>280.0x</td>
      <td>2800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Cloud lab simulator Phase 17: Azure security and management (Defender, Sentinel, Key Vault, Policy, Resource Locks, Management Groups, Monitor, Log Analytics, App Insights, Cost Management -- 13 services) promoted to full tier</td>
      <td>140h</td>
      <td>30m</td>
      <td>3.5w</td>
      <td>280.0x</td>
      <td>2800.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cloud lab simulator Phase 12: Azure networking (VNet, NSG, Load Balancer, Application Gateway, Front Door, VPN, ExpressRoute, Firewall, DDoS, Traffic Manager, DNS, Bastion, Virtual WAN, Private Endpoint, NAT, Network Watcher -- 17 services) promoted to full tier</td>
      <td>160h</td>
      <td>35m</td>
      <td>4.0w</td>
      <td>274.3x</td>
      <td>3200.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Cloud lab simulator Phase 16: Azure DevOps and app platform (Azure DevOps Pipelines, Repos, Artifacts, GitHub Actions, App Config, App Service, Azure Functions, Logic Apps, API Management, SignalR, Event Grid, Event Hubs, Service Bus, Azure CDN -- 16 services) promoted to full tier</td>
      <td>140h</td>
      <td>32m</td>
      <td>3.5w</td>
      <td>262.5x</td>
      <td>2800.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Cloud lab simulator Phase 21: GCP security, DevOps, and ops (Cloud KMS, Secret Manager, Cloud Build, Cloud Deploy, Artifact Registry, Firebase Auth, Anthos, Cloud Monitoring, Cloud Logging, Cloud Trace, Error Reporting, Cloud Scheduler -- 26 services) promoted to full tier</td>
      <td>200h</td>
      <td>46m</td>
      <td>5.0w</td>
      <td>260.9x</td>
      <td>4000.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cloud lab simulator Phase 22: Google Workspace and IaC final pass (Drive, Gmail, Google Vault, Alert Center, Admin Console, Firebase, Marketplace -- 7 services) promoted to full tier; final audit clean</td>
      <td>80h</td>
      <td>19m</td>
      <td>2.0w</td>
      <td>252.6x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Cloud lab simulator Phase 13: Azure compute and containers (VMs, VMSS, AKS, ACR, Container Instances, Container Apps, Site Recovery, Azure Backup, Migrate -- 9 services) promoted to full tier</td>
      <td>90h</td>
      <td>25m</td>
      <td>2.2w</td>
      <td>216.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Cloud lab simulator Phase 11: Azure identity and access (Entra ID, Conditional Access, PIM, RBAC, Managed Identities, MFA, SSPR, MS Graph, Microsoft 365 Defender -- 9 services) promoted to full tier</td>
      <td>120h</td>
      <td>35m</td>
      <td>3.0w</td>
      <td>205.7x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Cloud lab simulator Phase 19: GCP networking and storage (VPC, Firewall, Peering, Shared VPC, Cloud Armor, CDN, Load Balancing, DNS, NAT, VPN, Interconnect, Cloud Storage, Cloud SQL, AlloyDB, Spanner, Bigtable, Firestore, Memorystore -- 33 slugs across 19 dashboards) promoted to full tier</td>
      <td>200h</td>
      <td>60m</td>
      <td>5.0w</td>
      <td>200.0x</td>
      <td>4000.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Cloud lab simulator Phase 20: GCP analytics and AI (BigQuery, BigQuery ML, Dataflow, Dataproc, Cloud Composer, Pub/Sub, Looker Studio, Vertex AI, NL AI, Vision AI -- 13 dashboards covering 27 slugs) promoted to full tier</td>
      <td>180h</td>
      <td>57m</td>
      <td>4.5w</td>
      <td>189.5x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Cloud lab simulator Phase 15: Azure analytics and AI (Synapse, Data Factory, Stream Analytics, Purview, Microsoft Fabric, Databricks, Power BI, Azure ML, Azure OpenAI, AI Language, Speech, Vision, AI Search, Document Intelligence, Bot Service -- 21 services) promoted to full tier</td>
      <td>220h</td>
      <td>75m</td>
      <td>5.5w</td>
      <td>176.0x</td>
      <td>4400.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Residual sweep: 137 lab step description rewrites across 102 cloud labs for AWS certifications (CLF, SAA, SAP, SCS, ANS, DEA, and others) to neutralize checkpoint descriptions that over-claimed asserted behavior; desc_claims count to zero</td>
      <td>36h</td>
      <td>13m</td>
      <td>0.90w</td>
      <td>166.2x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Residual sweep: 83 lab step description rewrites across 54 cloud labs for GCP and Azure certifications to neutralize checkpoint descriptions that over-claimed asserted behavior; desc_claims count to zero</td>
      <td>22h</td>
      <td>9m</td>
      <td>0.55w</td>
      <td>146.7x</td>
      <td>660.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>224 guided end-to-end specs across full-tier services: 4 parallel agents writing per-service guided spec files covering create/list/detail/action flows</td>
      <td>18h</td>
      <td>14m</td>
      <td>0.45w</td>
      <td>77.1x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Cloud lab simulator component and SDK test coverage Group Y: approximately 150 component tests and 7 SDK tests across 50 dashboards</td>
      <td>16h</td>
      <td>13m</td>
      <td>0.40w</td>
      <td>73.9x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Cloud lab simulator lab backfill Group A (ACE, PCD, PDE certifications): 80 labs normalized, expected-action names aligned to canonical registry, missing-checkpoint count driven from 294 to zero</td>
      <td>60h</td>
      <td>50m</td>
      <td>1.5w</td>
      <td>72.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Cloud lab simulator lab backfill Group B (PCDE, PCSE, PCA certifications): 74 labs normalized plus 30 register handlers added; missing-checkpoint count driven from 375 to zero</td>
      <td>55h</td>
      <td>48m</td>
      <td>1.4w</td>
      <td>68.8x</td>
      <td>1100.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Cloud lab simulator lab backfill Group C (PMLE, PCDB, PCNE certifications): 60 labs normalized, 54 register handlers added, Vertex AI/BigQuery ML/KMS codemod blocks applied; missing-checkpoint count driven from 555 to zero</td>
      <td>55h</td>
      <td>53m</td>
      <td>1.4w</td>
      <td>62.3x</td>
      <td>1100.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Backfill four daily leverage blog posts (April 21-24, 118 tasks across 4 days, 4 parallel sub-agents with sanitization rules); refresh local CSV backup from cloud API (1,639 records); fix stale about-page links on personal site; deploy to staging and production</td>
      <td>14h</td>
      <td>14m</td>
      <td>0.35w</td>
      <td>60.0x</td>
      <td>420.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Cloud lab simulator lab backfill Group D (PGWA, CDL, and miscellaneous Azure/AWS certifications): 67 labs normalized, 111 register handlers added; missing-checkpoint count driven from 139 to zero</td>
      <td>40h</td>
      <td>43m</td>
      <td>1.0w</td>
      <td>55.8x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Cloud lab simulator component and SDK test coverage Group X: approximately 155 component tests and 10 SDK tests across 50 dashboards</td>
      <td>18h</td>
      <td>21m</td>
      <td>0.45w</td>
      <td>51.4x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Cloud lab simulator residual sweep: 81 mechanical issues resolved -- extended SDK action derivation and simulation action registry; mutation<em>without</em>property, action<em>assertion</em>gap, and empty_assertions all driven to zero</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Full content audit across structured content specs, synthesized packages, and cloud labs: 919 specs, 218 packages, 1.03M questions, 2,048 labs verified; 701-spec synthesis backlog and 79 low-quality packages identified</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Cloud lab simulator: final 4 remaining lab step description fixes across SAA-C03, GitHub Foundations, and SnowPro certs; total audit at 0 desc_claims issues across all 2,048 labs</td>
      <td>2h</td>
      <td>3m</td>
      <td>0.050w</td>
      <td>40.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Corporate site: rewrite internal cloud-infrastructure provisioning tool page from placeholder copy to accurate product description (boto3 IaC engine, plan/apply/destroy, stack import and versioning, org-wide inventory across 130 resource types, 120 AWS Config conformance packs, full Trusted Advisor parity, AWS Pricing rollups, single-WebSocket fabric, ~60 MCP tools); 7 feature groups, 26 cards, 4 flowchart steps; commit and push</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Build and deploy personal site semantic search Lambda end-to-end: generate 668-chunk embedding index, package Python Lambda zip (17 MB, numpy + requests + handler + index), deploy to Lambda, pivot from blocked Function URL to API Gateway HTTP API, wire semantic search endpoint into site config, redeploy; Cmd+K search widget live and answering with a Claude model</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Cloud lab simulator component and SDK test coverage Group Z: approximately 150 component tests and 7 SDK tests across 50 dashboards</td>
      <td>16h</td>
      <td>24m</td>
      <td>0.40w</td>
      <td>40.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Cloud lab simulator component and SDK test coverage Group W: approximately 150 component tests and 5 SDK tests across 50 dashboards</td>
      <td>16h</td>
      <td>28m</td>
      <td>0.40w</td>
      <td>34.3x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Adaptive engine: ship strategy dimensions, drift detection, forecast model, and recommendation pipeline (1,700-line WIP); wire behavioral persistence; verify fingerprint endpoint deploy (was returning 404, now 200)</td>
      <td>16h</td>
      <td>30m</td>
      <td>0.40w</td>
      <td>32.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Personal site template second pass: about page layout from mockup, article/post split into full-width header plus 8/4 body/TOC grid, blog template with sidebar, right-column TOC rendered from page metadata with inline TOC hidden via CSS; approximately 700 lines added to redesign stylesheet; deploy to staging</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Cloud lab simulator test infrastructure: 4-shard coverage config, JSDOM stubs, strict watch sweep, CodeBuild buildspec for test stage</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Cloud lab simulator test infrastructure: JSDOM mocks for canvas, matchMedia, and ResizeObserver; coverage config; strict watch sweep</td>
      <td>3h</td>
      <td>10m</td>
      <td>0.075w</td>
      <td>18.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Personal site: convert redesign mockups into a new static site template (10 page templates, 7 partials, approximately 1,000 lines of dark-mode glassmorphism SCSS); deploy to staging</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Learning platform web client: Study Plan tab rename, per-day collapse, activity card wrap fix; deploy and verify</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Snapshot in-flight validation pipeline repair work: promote 7 finished packages to canonical, sync to 2 S3 backup buckets, write tarball plus resume runbook and skip-aware resume wrapper script</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Fleet pipeline emergency: diagnosed production CodePipeline pointed at renamed repo (stalled since April 20); fixed via update-pipeline; discovered 5 marketing sites had staging overlay deployed to production; rebuilt all 5 with production flag; emergency S3 sync and CloudFront invalidation; fixed gitignore excluding rendered output and causing build failures; manually deployed 4 sites with no CodePipeline; recovered legacy domain after sync misfire deleted 95 historical objects via versioning restore; cleaned 234 wrongly-uploaded root files</td>
      <td>6h</td>
      <td>35m</td>
      <td>0.15w</td>
      <td>10.3x</td>
      <td>90.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>37</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>2,288.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,010</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>57.2</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,109,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>136.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>1,373.1x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The cloud lab simulator tier-promotion campaign that began on April 24 continued through April 25 with Phases 11 through 22, expanding from AWS-only coverage to the full Azure and GCP service catalogs. Phase 15 is the largest single task in the log to date: 220 human-equivalent hours in 75 minutes covering 21 Azure analytics and AI services (Synapse, Data Factory, Stream Analytics, Purview, Microsoft Fabric, Databricks, Power BI, Azure ML, Azure OpenAI, and the full AI services suite). The 176x leverage on that task is the product of a well-established pattern: locked dashboard architecture, known SDK method signatures, standard animator templates, and a codemod format the AI has applied dozens of times. Phase 19 (GCP networking and storage, 33 slugs across 19 dashboards) took 60 minutes and produced 200 human-equivalent hours at 200x leverage. Phase 21 (26 GCP security and DevOps services) produced 200 equivalent hours in 46 minutes at 260.9x. The ceiling on these phases is now set by the number of services in scope, not by any architectural ambiguity.</p>
<p class="mb-4 font-light font-serif">The backfill sweeps (Groups A through D) tell a different but related story. Each group targeted a specific set of cloud certification labs where expected-action names had drifted from the canonical registry: labs that would fail the audit script because their checkpoint expectations referenced action strings that the simulator&#39;s SDK no longer produced. Group A addressed 80 labs across ACE, PCD, and PDE certifications, driving the missing-checkpoint count from 294 to zero in 50 minutes. Group C was the most complex, requiring both normalization and the addition of 54 register handlers for Vertex AI, BigQuery ML, and KMS actions that had no prior handler registrations. The four backfill groups together account for 210 human-equivalent hours of normalization work produced in 194 minutes across four sessions. A human engineer doing this work would face a tedious and error-prone find/replace campaign across hundreds of JSON files with no guarantee of catching every case. The AI applied a systematic codemod with no misses.</p>
<p class="mb-4 font-light font-serif">The four component and SDK test coverage groups (W, X, Y, Z) each produced approximately 150-155 component tests and 5-10 SDK tests across 50 dashboards in 13-28 minutes. The leverage on these ranges from 34.3x to 73.9x. The spread reflects real variation in how much work a &quot;group of 50 dashboards&quot; involves: Group X (155 tests, 21m) is more test-intensive than Group W (150 tests, 28m) in absolute output-per-minute terms, suggesting Group W&#39;s dashboards had more complex component hierarchies requiring longer individual test authoring. These groups collectively added hundreds of tests to a corpus that would otherwise have required weeks of manual test authoring to build out at this coverage level.</p>
<p class="mb-4 font-light font-serif">The semantic search Lambda deployment (task 27, 40x) is worth noting for a different reason. Building an embedding index over a static site, packaging it into a Lambda-compatible Python zip, deploying through API Gateway, and wiring the endpoint into the site&#39;s configuration normally takes a full day for a backend engineer working alone: there are dependency issues in the Lambda packaging step, a false path through Function URLs blocked by SigV4 signing, and API Gateway route configuration that requires careful attention to CORS and request forwarding. The full path from embedding generation to a live answering widget took 18 minutes. The semantic search endpoint is now in production and handles natural-language queries against site content, routing answers through a Claude model.</p>
<p class="mb-4 font-light font-serif">The fleet pipeline emergency (task 37, 10.3x, 35 minutes) is the lowest-leverage item in the task log and the most logistically complex. The root cause was a CodePipeline Source stage still pointing at an old GitHub repository name after the repo was renamed. That alone was straightforward. What followed was not: investigating the pipeline state revealed that five production marketing sites had been built in staging mode (with a VelvetRope lockout overlay) and the resulting rendered output committed to the repo, causing the production sites to display a staging gate to all visitors. Rebuilding each site in production mode, running emergency deployments via direct S3 sync and CloudFront invalidation outside of the normal pipeline path, and then recovering a legacy domain&#39;s S3 versioning history after a sync command deleted 95 objects took 35 minutes of coordinated diagnosis and remediation. The 10.3x leverage is below average, but the work prevented a production outage from persisting and recovered historical content that would otherwise have been permanently lost.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 24, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-24-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-24-leverage-record.html</id>
    <updated>2026-04-24T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty tasks. April 24 was the biggest single day in this log by nearly every measure, and it had one unmistakable shape: the first half of the day was dominated by a sustained, ten-phase campaign to promote an entire cloud lab simulator to a higher fidelity tier, and the second half spread across behavioral analytics, a new RAG-based codebase search tool, cross-domain proficiency features, and a long tail of client fixes and diagnostics. The console simulator work alone accounts for more than 1,000 human-equivalent hours across ten phases, each phase promoting a service group (networking, databases, security, identity, messaging, containers, DevOps, AI/ML) to full tier with new service SDKs, dashboards, action animators, codemod upgrades, unit tests, and end-to-end specs. On top of that came seven phases of behavioral analytics work adding persistent observation storage, a learning-style fingerprint classifier, goal-drift detection, a 7-day readiness forecaster, a recommendation aggregator, and a weakness-first candidate generator -- plus a fresh local RAG index and MCP server built from scratch in a single session. Total for the day: 1,513 human-equivalent hours in 1,188 Claude-minutes. Weighted leverage was 76.4x, weighted supervisory leverage 986.7x.</p>
<p class="mb-4 font-light font-serif">The comparison to April 23 (20.7x weighted leverage, 174.3x supervisory leverage) is stark, and the reason is structural rather than lucky. April 23 was a diagnostic and integration day with a high proportion of human decision content per AI-minute. April 24 was a batched-construction day where multiple large, well-specified modules ran in parallel under directive prompts. When the prompt is essentially &quot;promote these 12 security services to full tier with the same architecture as the previous phase,&quot; the AI can execute a large surface area with high autonomy and low back-and-forth. The supervisory leverage approaching 1,000x reflects that dynamic directly: most of the ten console-sim phases were launched from prompts written in one to three minutes, and each produced 30 to 220 human-equivalent hours of output. That is the shape of maximum-leverage work -- large batched jobs with clear patterns and high AI autonomy.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cloud lab simulator Phase 10: promote 8 AI/ML services to full tier -- new service SDKs, dashboards, and lab step upgrades</td>
      <td>140h</td>
      <td>35m</td>
      <td>3.5w</td>
      <td>240.0x</td>
      <td>2800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Cloud lab simulator Phase 08: promote 11 management and operations services to full tier -- cost management, backup, governance, and resource tagging services with new SDKs and dashboards</td>
      <td>120h</td>
      <td>35m</td>
      <td>3.0w</td>
      <td>205.7x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Cloud lab simulator Phase 02: promote 6 database services to full tier -- 4 new service SDKs, 2 SDK extensions, 6 dashboards, 40 action animators, automated codemod across 131 labs</td>
      <td>90h</td>
      <td>27m</td>
      <td>2.2w</td>
      <td>200.0x</td>
      <td>2700.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cloud lab simulator Phase 05: promote 9 identity and governance services to full tier -- 8 new SDKs, 1 SDK extension, 9 dashboards, 55+ animators, 45+ codemod branches, 37 unit tests, 9 guided end-to-end specs, 6 context-disambiguated shared actions</td>
      <td>160h</td>
      <td>50m</td>
      <td>4.0w</td>
      <td>192.0x</td>
      <td>9600.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Cloud lab simulator Phase 09: promote 10 DevOps and analytics services to full tier -- new SDKs, dashboards, and lab step upgrades across pipeline, build, deploy, and data processing services</td>
      <td>100h</td>
      <td>33m</td>
      <td>2.5w</td>
      <td>181.8x</td>
      <td>2000.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Cloud lab simulator Phase 04: promote 12 security and cryptography services to full tier -- 6 new SDKs, 6 SDK extensions, 12 dashboards, 80+ animators, 50+ codemod branches, 67 unit tests, 12 guided end-to-end specs, 6 context-disambiguated shared actions</td>
      <td>220h</td>
      <td>75m</td>
      <td>5.5w</td>
      <td>176.0x</td>
      <td>13200.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cloud lab simulator Phase 03: promote 7 networking services to full tier -- 4 new SDKs, 2 SDK extensions, 7 dashboards, 55+ animators, 40+ codemod branches, 49 unit tests, 7 guided end-to-end specs, slug normalization; earlier phase commits also pushed</td>
      <td>135h</td>
      <td>48m</td>
      <td>3.4w</td>
      <td>168.8x</td>
      <td>4050.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Cloud lab simulator Phase 06: promote 8 messaging and event streaming services to full tier -- 4 new SDKs, 8 dashboards, 22 animators, 53 codemod assertions across 36 labs</td>
      <td>40h</td>
      <td>17m</td>
      <td>1.0w</td>
      <td>141.2x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Cloud lab simulator Phase 07: promote 8 container and storage services to full tier -- 6 new SDKs, 2 SDK extensions, 8 dashboards, 30+ animators, 49 codemod assertions across 38 labs</td>
      <td>45h</td>
      <td>25m</td>
      <td>1.1w</td>
      <td>108.0x</td>
      <td>1350.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Behavioral analytics Phases 2-7: learning-style fingerprint dimensions with dominant-style classifier, goal-drift analyzer with severity bands and per-goal windows, 7-day OLS readiness forecaster with confidence intervals, 4-producer recommendation aggregator, weakness-first candidate generator replacing random placeholder; updated REST and gRPC handlers, frontend analytics panel enhancements, structured log emissions, admin pipeline endpoints, backfill script; 71 new tests passing</td>
      <td>120h</td>
      <td>85m</td>
      <td>3.0w</td>
      <td>84.7x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Cloud lab simulator Phase 01: build 3 service dashboards from existing SDKs, extend SDKs with 25 new methods, write 3 dashboards (~1500 LOC) with full sidebar/list/detail/modal UX, add 35 action animators, 20+ codemod mappings, lab test harness, 30 SDK unit tests, 3 guided end-to-end specs; promote 131 lab steps from lower tiers to full</td>
      <td>50h</td>
      <td>40m</td>
      <td>1.2w</td>
      <td>75.0x</td>
      <td>1000.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Behavioral analytics Phase 0 + Phase 1: architecture design document, SQLAlchemy persistence model, database migration, observation repository (Postgres + cache, append/recent/per-goal/daily-accuracy queries), analytics engine persistence attachment, latency/confidence/hint tracking wired into answer submission handlers; 6 new unit tests, 101 existing tests green</td>
      <td>38h</td>
      <td>35m</td>
      <td>0.95w</td>
      <td>65.1x</td>
      <td>570.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Template consolidation: collapse 19 per-tool page templates across 16 sites into a single shared template with frontmatter schema covering tool name, tagline, accent color, screenshots, feature groups, flowchart steps, and specs; extract 18 content files via parallel agents; rebuild all 16 sites clean; commit and push 12 site repos</td>
      <td>32h</td>
      <td>30m</td>
      <td>0.80w</td>
      <td>64.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Scenario seed pipeline: database schema, AI-driven generator, runtime wiring, UI fixes, and 205 scenario seeds generated across 3 certification domains</td>
      <td>14h</td>
      <td>18m</td>
      <td>0.35w</td>
      <td>46.7x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Cloud lab simulator foundation audit: audit all 2,048 labs, rewire lab executor to drive demos from declared expected actions, add two new validator matchers with fail-closed empty assertion behavior, extend identity service SDK with MFA and access key management, build out identity dashboard with full create/detail/policy editor/MFA/group/access-key UX, automated codemod upgrading checkpoints in 223 labs, hand-craft one lab as gold reference, fix JSX escape bug in hint component</td>
      <td>40h</td>
      <td>65m</td>
      <td>1.0w</td>
      <td>36.9x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Local RAG and MCP server v1 containerized: dockerized backend and frontend, integrated into shared dev services compose stack with bind-mount and persistent state volume, added to dev services dashboard, private repo created and pushed, both containers running healthy against live vector database</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Cross-domain proficiency display: engine projection service, blend helper, catalog-proficiency endpoint, readiness blend flag, cache invalidation hooks, proficiency store, dashboard attribution UI, 20 unit tests</td>
      <td>50h</td>
      <td>110m</td>
      <td>1.2w</td>
      <td>27.3x</td>
      <td>500.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Local RAG index and MCP server initial build: vector search over entire codebase using embeddings and a locally-running LLM for answering, streaming response with markdown rendering, citation tokens as styled inline pills, patent content exclusion with multiple defense layers, Docker Compose configuration, frontend lock regeneration</td>
      <td>40h</td>
      <td>90m</td>
      <td>1.0w</td>
      <td>26.7x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Admin persistence page Phases 4-7: engine API endpoints exposing row counts, last-updated timestamps, and key metrics across 14 database tables and in-memory audit logger; three new admin tabs (learner state, autopilot with SVG donut chart, operations with status pills); transient tab wired to live engine data</td>
      <td>7h</td>
      <td>18m</td>
      <td>0.17w</td>
      <td>23.3x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Learning platform web client onboarding fixes: remove button spinner, rewrite resume analysis result messaging to surface skills/years/certifications, credit enrollments from domain assessments, add resume review section to user profile</td>
      <td>4h</td>
      <td>11m</td>
      <td>0.10w</td>
      <td>21.8x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Scenario assessment end-to-end: seed-driven assessment flow, AI-graded responses with keyword-coverage fallback, build and environment wiring for production, scenario UI overhaul (related lessons, reference docs, I-don&#39;t-know option, thinking state, tiered celebration, markdown rendering throughout, left-aligned feedback, reference answer surfacing, auto-file bug on load failure with retry, back navigation, honest empty state)</td>
      <td>25h</td>
      <td>75m</td>
      <td>0.62w</td>
      <td>20.0x</td>
      <td>750.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Learning platform web client adaptive session fixes: plan-size wiring, real proficiency delta calculation, session review hand-off, early-end flow, skipped-rail differentiation, FAQ</td>
      <td>4h</td>
      <td>20m</td>
      <td>0.10w</td>
      <td>12.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Repository audit and leverage reconciliation: scan 60+ repos for commits since April 20, reconcile against leverage ledger, identify 14 unlogged work buckets totaling 283 human-hours, backfill with individual records</td>
      <td>2h</td>
      <td>10m</td>
      <td>0.050w</td>
      <td>12.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Learning platform web client dashboard: sort enrolled courses by most recently studied, add recency indicator chip to the relevant course card</td>
      <td>0.75h</td>
      <td>4m</td>
      <td>0.019w</td>
      <td>11.3x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Cherry-pick two service-group phases (10 DevOps/analytics services and 8 AI/ML services) onto main branch in the lab simulator repo, resolving merge conflicts across 7 files per phase</td>
      <td>4h</td>
      <td>22m</td>
      <td>0.10w</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Three-phase adaptation fix: engine pair-selection goal-level recency penalty and tuning, client fallback mix interleaving lessons and scenario launches into plan-less batches, per-course autopilot nudge button with setup/practice/dismiss paths</td>
      <td>4h</td>
      <td>24m</td>
      <td>0.10w</td>
      <td>10.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Admin dashboard: port version-checker UX (modal and chime), write 7-phase persistence page implementation plan, implement Phases 0-3 (tab shell, manifold polish, snapshots tab with S3 integration, portfolio tab with health cards and contradictions table)</td>
      <td>9h</td>
      <td>55m</td>
      <td>0.23w</td>
      <td>9.8x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Admin diagnostics: diagnose engine 502 and domain catalog issue, add engine to monitoring tool, fix notification service JWT issuer to accept both auth issuers, trim admin system health scope to core services, make engine manifold persistence recovery timeout configurable</td>
      <td>2.5h</td>
      <td>22m</td>
      <td>0.062w</td>
      <td>6.8x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Cross-domain projection Phases 4-5: drift snapshot test, blend lift telemetry, admin portfolio simulator with RPC proxy and UI, shipped to production</td>
      <td>10h</td>
      <td>90m</td>
      <td>0.25w</td>
      <td>6.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Diagnose proficiency saturation bug (subdomain reaching 100% after 6 correct answers): root cause traced to sigmoid geometry and prior strength weighting; simulated parameter alternatives, reverted alpha to safe value, retained goal-recency change</td>
      <td>0.75h</td>
      <td>7m</td>
      <td>0.019w</td>
      <td>6.4x</td>
      <td>22.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>30</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1,513.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,188</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>37.8</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>7,246,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>76.4x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>986.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The cloud lab simulator campaign is the dominant story of the day and probably the single most concentrated batch of high-leverage AI work in this log to date. Ten phases, each promoting a service group to full tier with real dashboards, working SDKs, action animators, codemod upgrades, and test coverage. Phase 4 alone -- 12 security and cryptography services promoted to full tier with 6 new SDKs, 6 SDK extensions, 12 dashboards, 80+ animators, 50+ codemod branches, 67 unit tests, and 12 guided end-to-end specs -- represents 220 human-equivalent hours produced in 75 minutes at 176x leverage. The supervisory leverage on that task was 13,200x: 220 hours of output from a 1-minute directive prompt. Phase 5, covering 9 identity and governance services, reached 192x task leverage and 9,600x supervisory leverage on a 1-minute prompt. These are not rounding errors. They reflect a specific condition where the pattern is fully established, the architecture is locked, and the AI can execute a large parallel surface area with near-zero ambiguity.</p>
<p class="mb-4 font-light font-serif">The pattern that drives these numbers is worth naming. By Phase 4 or 5 of a ten-phase campaign following a fixed architecture, the model knows exactly what a &quot;full tier promotion&quot; means: specific SDK method signatures, dashboard component structure, animator patterns, codemod assertion format, test harness shape. Each subsequent phase is essentially the same transformation applied to a new service group. The human work at that point is listing the services to promote and pressing enter. The AI produces dozens of files across multiple layers in a single session. This is why the supervisory leverage climbs so high on the later phases while the task leverage stays in the 100-200x range: the human is barely involved once the pattern is running.</p>
<p class="mb-4 font-light font-serif">The behavioral analytics work (Phases 0-7, 10 total tasks logged across the day) tells a different story. Phase 0 and Phase 1 together took 35 minutes at 65x leverage to produce a full architecture design document, a new database model and migration, an observation repository with four distinct query patterns, and persistence wiring into the engine&#39;s answer submission handlers. That is a significant amount of architectural decision-making compressed into one session. Phases 2 through 7 took 85 minutes at 84.7x leverage to add a five-dimensional learning-style fingerprint, a dominant-style classifier, goal-drift detection with severity bands, a 7-day OLS readiness forecaster with confidence intervals, a four-producer recommendation aggregator, and a weakness-first candidate generator that replaced a random-selection placeholder. The end result is a behavioral analytics system that knows what kind of learner you are, whether your goals are drifting, where your weaknesses concentrate, and what you should study next. That took under 2 hours of AI time and fewer than 10 minutes of supervisory time across eight phases.</p>
<p class="mb-4 font-light font-serif">The local RAG index and MCP server (tasks 16 and 18) appeared as two distinct records because the work split across sessions: the initial build (90 minutes, 26.7x) produced the full application -- vector search, streaming answers, markdown rendering, citation pills, patent exclusion, Docker Compose -- and a follow-on session (12 minutes, 30x) containerized and integrated it into the dev services stack. The initial build leverage of 26.7x is lower than the surrounding work because building a new application from scratch has higher AI-time requirements than executing a known pattern. But 40 human-equivalent hours in 90 minutes to produce a complete, containerized, streaming RAG application with a working frontend is still a substantial output rate. The patent content exclusion logic -- multiple defense layers including repo-level, path-level, and token-sweep filtering -- is the kind of nuanced requirement that would require careful thought and testing from a human engineer. Here it was specified in the prompt and implemented correctly in one pass.</p>
<p class="mb-4 font-light font-serif">The proficiency saturation diagnostic (task 30, 6.4x, 7 minutes) sits at the bottom of the leverage table but is worth noting as the kind of work that often consumes hours of human debugging time. The symptom was a subdomain reaching 100% proficiency after just 6 correct answers. The root cause was a combination of a narrow sigmoid scale parameter producing a near-step-function response and a prior strength weighting that amplified early empirical evidence too aggressively. Identifying that required reading the proficiency calculation code, understanding the mathematical behavior of the sigmoid at that parameterization, and simulating parameter alternatives to confirm none of them helped with the current clip geometry. That analysis ran in 7 minutes. A human debugging the same issue would likely spend time ruling out data issues, logging intermediate values, and reasoning through the math manually before converging on the same root cause. 6.4x is about right for that class of diagnostic work -- it is lower-leverage than greenfield construction, but it is still 45 minutes of equivalent human debugging time condensed into 7 minutes of AI time.</p>
<p class="mb-4 font-light font-serif">The cross-domain projection work (tasks 17 and 29) is the day&#39;s most protracted sequence at 200 combined minutes across two sessions, landing at 27.3x and 6.7x leverage respectively. The first session (110 minutes) designed and built the full feature: engine projection service, blend helper, endpoint, cache hooks, frontend store, and dashboard UI with 20 tests. The second session (90 minutes) added drift testing, telemetry, and an admin simulator, then shipped to production. The leverage drop between sessions reflects the law of diminishing marginal returns on a feature: the first session established the architecture and produced the bulk of the user-visible behavior; the second session was adding observability and tooling around an existing system, which tends to require more back-and-forth and slower iteration. Together the two sessions produced 60 human-equivalent hours of work. That is still a meaningful output rate for a feature that required genuine algorithmic reasoning about how to blend proficiency signals across domain boundaries.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 23, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-23-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-23-leverage-record.html</id>
    <updated>2026-04-23T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-three tasks. April 23 had three overlapping themes: wiring deep engine subsystems, hardening the entire legal and compliance surface across the platform, and shipping user-facing features. The day opened before 6 AM with a pair-selection benchmark harness and a CORS fix, then accelerated into a continuous stream of engine work: a 15-table persistence schema with dual-write repositories across multiple subsystem stores, NLI inference wiring, cross-domain intelligence calibration, autopilot ranker integration, and several phases of a large engine wiring plan covering replay mining, hardware drift detection, multi-agent safety, actor-critic policy training, and fragment embedding injection. In parallel, a greenfield local RAG and MCP server tool was built from scratch -- docs, backend, vector store, git-aware incremental indexer, React frontend, 6 MCP tools, and 21 passing tests -- in 19 minutes. A legal single-source-of-truth architecture was established across 3 brand canonicals with a propagation script, drift checking, and 10 consumers regenerated across 6 repositories. The admin dashboard completed a full REST-to-WebSocket migration with 87 new tests. The weighted average leverage factor was 20.7x with a supervisory leverage of 174.3x, representing 435.75 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The 20.7x weighted average is higher than April 22 (16.1x / 143.6x) for a clear structural reason: April 23 had a much larger share of greenfield and large-scope refactor work mixed in with the remediation and bug-fixing tasks. The top leverage tasks were genuinely new systems being constructed from a specification -- a local RAG tool at 151.6x, a legal propagation architecture at 53.3x, compliance finding remediation at 48.0x -- rather than the diagnostic and repair work that dominated lower-leverage days. The engine wiring tasks, while large in absolute AI time (43, 50, and 67 minutes respectively), were executing against a detailed multi-phase plan, which kept the per-minute decision density low and the leverage factors in the 28-56x range. The supervisory leverage improvement from 143.6x to 174.3x reflects the same dynamic: several of April 23&#39;s largest tasks required only 1-2 supervisory minutes because the specifications were already written. Telling an AI to implement phases 6, 7, and 9 of an existing wiring plan costs 1 supervisory minute and yields 32 human-equivalent hours of output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Local-only RAG and MCP server over a large monorepo: docs, backend (FastAPI + vector store + embedding models + LLM integration), git-aware incremental indexer, React frontend, 6-tool MCP server, 21 passing tests, end-to-end smoke test</td>
      <td>48h</td>
      <td>19m</td>
      <td>1.2w</td>
      <td>151.6x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Learning engine wiring plan Phase 4 + Phase 8: catalog-projections client UI, self-report and seed-from-mastery endpoints, mapper wiring, prior cap lifted, study-hours fallback fix, ELO forwarding via session factory</td>
      <td>40h</td>
      <td>43m</td>
      <td>1.0w</td>
      <td>55.8x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Legal doc single-source architecture: 3 brand canonical documents (versioned), propagation script with drift-check, 10 consumers regenerated across 6 repositories, 4 legacy duplicates deleted, CI drift checks wired</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Compliance LOW findings remediation: 3 gap analysis documents, terms and privacy date updates, 18 deferred documentation audit findings resolved (12 design docs expanded, 3 Mermaid diagrams added, 3 structural doc issues fixed across 3 repositories)</td>
      <td>12h</td>
      <td>15m</td>
      <td>0.30w</td>
      <td>48.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Compliance MEDIUM findings: add AI API subprocessors to Privacy Policy; add data processing action tracker to vendor register</td>
      <td>2h</td>
      <td>4m</td>
      <td>0.050w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Engine persistence foundation: 15-table schema, write-through migration, session manager dual-store, portfolio fragment loader and repository, cross-domain cluster delegation, catalog projections, content rewriter LLM wiring, NLI entailment in equivalence class engine, Phase 0 tests, cascade re-embedding, contradiction detection, health and plan endpoints, synthesis seeder centroid fidelity</td>
      <td>60h</td>
      <td>120m</td>
      <td>1.5w</td>
      <td>30.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Engine wiring plan Phase 3.5: cluster delegation, cross-domain-transfer rewrite, catalog-projections endpoint, content rewriter LLM wiring, cascade re-embedding, contradiction detection endpoint, portfolio health endpoints, synthesis planning optimizer endpoint; 8 tasks across engine, gateway, and persistence with 30 new unit tests</td>
      <td>24h</td>
      <td>50m</td>
      <td>0.60w</td>
      <td>28.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Engine wiring plan Phases 6-7-9: replay miner, hardware drift detection, simulation-real bridge, safety subsystem, multi-agent coordination, operations health, delta replication, actor-critic policy trainer, two-step tier opt-in, capabilities endpoint, fragment embedder injection</td>
      <td>32h</td>
      <td>67m</td>
      <td>0.80w</td>
      <td>28.7x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Web client user profile: profile, subscription, and account tabs; testimonial backend; avatar in navigation; sign-out relocation; terms of service testimonial license</td>
      <td>12h</td>
      <td>32m</td>
      <td>0.30w</td>
      <td>22.5x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Activity-to-domain-group master mapping: relabeled matrix to 9 spec-directory groups by 22 activities, JSON projection, sync script, typed resolver, cross-system spec in architecture-client, fixed stale activity count across documentation, tests, and index header</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Autopilot Phase 8: engine-side catalog reconciliation -- activities catalog loader with path-search and graceful degradation, autopilot ranker category key threading and category applicability scoring, startup parity assertion with allow-listed divergence, catalog-aware maintenance backstop, AutopilotGoal category key and compute-next-actions plumbing, 15-test catalog parity suite, 8 ranker gating tests, 4 per-group journey tests</td>
      <td>10h</td>
      <td>28m</td>
      <td>0.25w</td>
      <td>21.4x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Activity library docs overhaul: reconciled design doc as authoritative (20 sections, all 22 activities, hooks, primitives, providers, exam sim, demo, data flow, offline, accessibility), rewrote requirements as FR/NFR superset with shipped/partial/planned status markers, rewrote testing strategy as ideal-state test surface with gap inventory and 8-phase remediation plan, trimmed README to overview and activity index, deleted 22 superseded docs</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fix autopilot 422 error (missing session ID) and add info button to autopilot card; diagnose resume upload 404</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Convert help page to full help center with FAQ, documentation, and legal tabs</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Engine Phase 4: self-report and seed-from-mastery endpoints, ELO and entity ID forwarding via session factory, catalog projections client UI, strategy readiness expansion with per-domain panel data, autopilot Postgres persistence with entity-domain uniqueness, drift fresh-user guard, entity-delete endpoint for account reset and compliance</td>
      <td>15h</td>
      <td>45m</td>
      <td>0.38w</td>
      <td>20.0x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Merge rogue design document into canonical docs directory in desktop client repository; delete the root copy</td>
      <td>1.25h</td>
      <td>4m</td>
      <td>0.031w</td>
      <td>18.75x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Vendor resume parser to unblock container build (fixes resume upload 404); practice exam: skip intro modal, disable next button until answered, color-coded question navigator (answered, skipped, pending)</td>
      <td>4h</td>
      <td>14m</td>
      <td>0.10w</td>
      <td>17.1x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Reconcile activity metadata across three sources into a single canonical catalog: extended catalog to v2 with runtime source per activity, fixed field names, rewrote expression for miscellaneous categories, retired parallel mapping in activity library, added catalog-backed TypeScript reader and sync script with invariant check, rewrote library documentation, architecture-client activity domain mapping, and autopilot activity coverage docs</td>
      <td>7h</td>
      <td>25m</td>
      <td>0.17w</td>
      <td>16.8x</td>
      <td>52.5x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Admin dashboard Phase 5 zero-REST WebSocket migration: multiplexed WebSocket replaces direct REST, JWT and JWKS auth handling for kid-less tokens, comps table names-first with UUID leak fix, markdown preview email, Redis dependencies for container builds, test suite revival (45 backend + 42 frontend tests), second-pass audit reconciliation, documentation sync</td>
      <td>25h</td>
      <td>90m</td>
      <td>0.62w</td>
      <td>16.7x</td>
      <td>750.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Update architecture documentation (data model, system architecture, testing strategy) to reflect 15-table Postgres persistence schema</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Fix practice exam intro modal skip, answer persistence (refetch race condition), radio auto-select, navigator colors</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Admin dashboard docs audit pass 2: dashboard reality status (wired, partial, placeholder, not built) inline in requirements, plus path and import audit across design, requirements, testing strategy, and project instructions</td>
      <td>4.5h</td>
      <td>18m</td>
      <td>0.11w</td>
      <td>15.0x</td>
      <td>135.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Wire real NLI model into equivalence class engine: new NLI gate module, dependency injection into engine, replaced similarity placeholder with batched NLI inference, 30 new unit tests</td>
      <td>4h</td>
      <td>18m</td>
      <td>0.10w</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Patent portfolio browser: design system adoption and Mermaid rendering hardening; design system providers with private registry Docker build, package resolution from registry (not local path), theme token resolution to concrete CSS values before Mermaid render, HSL value wrapping for SVG paint, node fill vs. container distinction, client-side Mermaid fallback for figures without pre-generated SVG</td>
      <td>10h</td>
      <td>45m</td>
      <td>0.25w</td>
      <td>13.3x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Replace synthesis seeder fidelity magic constant with centroid cosine similarity; implement real threshold calibration with F1 grid-sweep in cross-domain intelligence engine</td>
      <td>4h</td>
      <td>20m</td>
      <td>0.10w</td>
      <td>12.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Auth service hardening: canonical legal document refactor, testimonial model and CRUD API, auth methods in profile, avatar object storage wiring for both deployments, Redis dependencies and user lifecycle event publishing, write-through internal enrollment progress endpoint, admin bulk user lookup for display joins, LLM subprocessor privacy disclosure, terms and privacy effective dates, enrollment caching in Postgres, markdown welcome email with preview endpoint, frontend dependency regen, privacy and terms build restore</td>
      <td>12h</td>
      <td>60m</td>
      <td>0.30w</td>
      <td>12.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Write 85 unit tests for 9 dual-write learner repositories covering entity embeddings, node stats, pair stats, entity ELO, learner fingerprint, hardware drift, adversarial fingerprint, credit schedule, and autopilot ranker; 98% coverage on learner repository module</td>
      <td>4h</td>
      <td>22m</td>
      <td>0.10w</td>
      <td>10.9x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Legal SSOT refactor coordinated across the full fleet: establish single-source-of-truth architecture for all legal documents in planning repository, switch static site generator, auth service, and marketing sites to canonical legal documents, DPA action tracker in vendor register, compliance finding marked structurally resolved</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Pair selector benchmark harness: synthetic learner against real pair selection logic, 7 tuning arms by 50 seeds, identified goal-level recency as the specific fix for hot-goal streaks (max streak reduced, coverage improved)</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Admin dashboard docs audit: fix 16 discrepancies -- React version, delete all references to retired REST clients, rename WebSocket client classes throughout, rewrite directory tree and file inventory to match reality, appendix switched from REST endpoints to RPC methods, ASCII diagrams converted to Mermaid</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Revive admin dashboard test suite: bump test framework, fix accessibility test after REST retirement, add 45 backend tests (WebSocket protocol, connection manager, event forwarder, RPC dispatcher) and 42 frontend tests (WebSocket client, hooks, stores, anomaly panel); rewrite testing strategy; convert architecture diagram to Mermaid</td>
      <td>5h</td>
      <td>33m</td>
      <td>0.12w</td>
      <td>9.1x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Merge student profile career editor into Profile tab; fix navigation avatar to route to profile; add redirect; wire bio field to backend</td>
      <td>1.5h</td>
      <td>10m</td>
      <td>0.037w</td>
      <td>9.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Admin dashboard Phase 5 WebSocket migration completion: migrate account, billing, system health, and notifications pages off REST to multiplexed WebSocket RPC; add health current, history, and subscription RPC methods; broadcast health updates on poll cycles; consolidate notification types; delete 6 retired REST client modules; TypeScript and build clean</td>
      <td>6h</td>
      <td>42m</td>
      <td>0.15w</td>
      <td>8.6x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Lesson system architecture doc (storage, personalization, delivery, rendering, 8 extensibility subsections); global Mermaid-first diagram standard established; converted all ASCII diagrams across architecture documentation to Mermaid (multiple protocol, training pipeline, recalibration pipeline, and learner flow diagrams); replaced ASCII pseudo-diagram with proper tables</td>
      <td>3h</td>
      <td>22m</td>
      <td>0.075w</td>
      <td>8.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Wire Postgres and cache dual-write persistence for 5 subsystem stores (learner fingerprint store, hardware drift detector, adversarial detector, credit schedule store, autopilot ranker repository)</td>
      <td>6h</td>
      <td>45m</td>
      <td>0.15w</td>
      <td>8.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Fix onboarding service JWKS auth and resume upload CORS chain</td>
      <td>2h</td>
      <td>15m</td>
      <td>0.050w</td>
      <td>8.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Create object storage user-content bucket and wire avatar upload; fix latent legal SSOT build break and package registry lockfile poisoning</td>
      <td>3h</td>
      <td>25m</td>
      <td>0.075w</td>
      <td>7.2x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Add comprehensive adaptive-lessons FAQ (14 Q&amp;As and viewer mechanics) to help documentation; commit and deploy</td>
      <td>2h</td>
      <td>18m</td>
      <td>0.050w</td>
      <td>6.7x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Fix 7 pre-existing TypeScript strict-mode errors in web client (button variant, unchecked indexed access fallbacks, ambient module declarations, JSX key spread, unused import, null guards); commit and deploy</td>
      <td>1h</td>
      <td>9m</td>
      <td>0.025w</td>
      <td>6.7x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Continue-studying button and explainer modal, drop adaptive tile, breadcrumb correction, study-time fractional minutes with flush-on-unmount and cap, onboarding service CORS via parameter store with in-place container restart and build config persistence</td>
      <td>2h</td>
      <td>20m</td>
      <td>0.050w</td>
      <td>6.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Deploy profile tabs across auth service variants and web client; diagnose and manually run database migrations after build pipeline skipped them</td>
      <td>2h</td>
      <td>20m</td>
      <td>0.050w</td>
      <td>6.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Onboarding resume upload fix chain: JWKS auth, missing package data, UX spinner, friendly error messages, auto-bug report</td>
      <td>4h</td>
      <td>45m</td>
      <td>0.10w</td>
      <td>5.3x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Commit, push, and verify CI/CD deployment of help center and practice exam changes</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.75x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>43</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>435.75</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,261</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>10.9</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>6,695,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>20.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>174.3x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The highest-leverage task of the day also had the shortest runtime. A local-only RAG server with a 6-tool MCP surface, a git-aware incremental indexer, a vector store backend, a React frontend, and 21 passing tests was built in 19 minutes at 151.6x leverage. That translates to 48 human-equivalent hours of system construction in under 20 minutes of AI time. The architectural choices made during that session -- local-only operation, incremental indexing keyed to git state, MCP as the query interface -- reflect a coherent design that a human architect would spend time deliberating over before writing a line of code. Here the deliberation happened inside the AI&#39;s context window, invisibly, during the 19 minutes. The end-to-end smoke test passing on first run is the tell: the design was worked out before implementation started.</p>
<p class="mb-4 font-light font-serif">The legal and compliance surface work, distributed across several tasks (tasks 3, 4, 5, 28), is worth reading as a single coherent effort. The core problem was that legal documents existed as duplicates across many repositories, each copy drifting independently. The solution was a single-source-of-truth architecture: three brand canonical documents with version numbers, a propagation script with drift detection, CI checks to prevent future drift, and 10 consumer files regenerated from the canonical source across 6 repositories. Four legacy duplicates were deleted. On the compliance side, gap analysis documents were written, subprocessor disclosures were added to the privacy policy, and a DPA action tracker was established in the vendor register. The aggregate AI time for this body of work was roughly 82 minutes. The human-equivalent estimate across those tasks is 38 hours -- legal document architecture decisions, cross-repository coordination, compliance framework mapping, and the actual writing of privacy policy sections are not tasks that accelerate easily. They require careful reading and careful writing. Here the AI compressed them into a morning.</p>
<p class="mb-4 font-light font-serif">The engine persistence work (tasks 6, 7, 8, 15) was the day&#39;s largest single body of work by AI time: 275 minutes spread across 4 tasks representing 131 human-equivalent hours. Task 6 alone was a 15-table schema, a write-through migration, dual-store session management, fragment loading, cross-domain cluster delegation, catalog projections, a content rewriter LLM integration, NLI entailment inside the equivalence class engine, Phase 0 test suite, cascade re-embedding, contradiction detection, portfolio health endpoints, and synthesis planning optimization -- all in 120 minutes at 30x leverage. The 30x factor on a 120-minute task is correct: a senior engineer implementing that surface end-to-end, including the database schema design, the migration, the dual-write repository pattern, and the NLI plumbing, would take the better part of two weeks. The AI got it done in two hours. Tasks 7 and 8 continued the same plan across additional phases, adding 30 more unit tests, replay mining, hardware drift detection, multi-agent safety subsystems, and actor-critic policy training. Two supervisory minutes each.</p>
<p class="mb-4 font-light font-serif">The admin dashboard REST-to-WebSocket migration (tasks 19, 33) is a useful case study in what &quot;refactor&quot; looks like at high leverage. The problem was a large frontend that communicated with multiple backend services via individual REST clients. The solution was a single multiplexed WebSocket connection with an RPC dispatcher, JWT handling hardened for production edge cases, and 87 new tests. Across both tasks, the AI spent 132 minutes on it against a human estimate of 31 hours. The 87 tests are not a trivial artifact -- they cover WebSocket protocol behavior, connection management, event forwarding, and RPC dispatch on the backend, and WebSocket client lifecycle, hooks, stores, and UI components on the frontend. Writing tests for async, bidirectional network communication requires thinking carefully about timing, reconnection, and message ordering. At 9.1x for the test revival task, the factor correctly reflects that test writing is more constrained work than greenfield implementation, but 5 hours of test writing compressed into 33 minutes is still worth noting.</p>
<p class="mb-4 font-light font-serif">The day&#39;s long tail (tasks 29-43) is a mix of benchmark harnesses, documentation audits, deployment plumbing, and bug fixes. These tasks cluster in the 6-10x range, which is the expected floor for work where the human decision content per AI-minute is highest: diagnosing a resume upload CORS chain across multiple services, running database migrations manually after a pipeline skip, fixing TypeScript strict-mode errors one by one. The pair selector benchmark (task 29) is the most interesting in this group: 7 tuning arms each running 50 random seeds against real pair selection logic, with the outcome being the specific identification of goal-level recency as the fix for hot-goal streaks. That is a proper ablation study, and it ran in 18 minutes. The supervisory leverage of 174.3x for the full day reflects that most of these tasks were specified in 1-3 sentences -- the AI carries the implementation context, not the human.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 22, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-22-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-22-leverage-record.html</id>
    <updated>2026-04-22T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-six tasks. April 22 had two structural themes running in parallel: a concentrated push to finish and ship a major client-side feature (server-backed enrollment and autopilot sync with full slug-to-UUID translation at every API boundary), and a broad documentation remediation sweep covering more than 100 repositories. Threaded through both were a WebSocket architecture implementation for the admin dashboard, a CDN migration for a simulation asset library, a handful of targeted bug fixes, and a production auth diagnosis that turned into a multi-service JWT compatibility repair. The weighted average leverage factor was 16.1x with a supervisory leverage of 143.6x, representing 189.1 human-equivalent hours compressed into 704 Claude minutes.</p>
<p class="mb-4 font-light font-serif">The 16.1x weighted average is lower than April 21&#39;s 18.1x / 129.2x, and the supervisory leverage of 143.6x is modestly higher than April 21&#39;s 129.2x, which reflects a different mix of work. The two highest-leverage tasks -- the compliance and documentation audit across 71 repositories (98.8x) and the server-backed enrollment implementation spanning three codebases (42.4x) -- were high-throughput, well-specified work where the AI could operate with minimal per-step supervision. But those two tasks together account for only 51 of the 704 Claude minutes. The remaining 653 minutes spread across 24 tasks that were heavier on diagnosis, multi-service coordination, and UI polishing -- work where the leverage ceiling is lower because more of the decision content sits with the human. The supervisory leverage being higher than the task leverage (143.6x vs 16.1x) is the expected pattern for days where most tasks are driven by tight prompts: short, precise instructions buy a lot of output even when each individual task&#39;s factor is modest.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Compliance and documentation audits across 71 repositories: SOC2/GDPR/CCPA compliance checks plus documentation remediation with 44 repositories committed and pushed</td>
      <td>28h</td>
      <td>17m</td>
      <td>0.70w</td>
      <td>98.8x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Server-backed enrollment and autopilot sync implementation: per-course individual autopilot goals persisted to database, server-backed enrollments with write-through cache, auto-managed composite goal, spanning three codebases (learning engine, auth service, web client)</td>
      <td>24h</td>
      <td>34m</td>
      <td>0.60w</td>
      <td>42.4x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Documentation remediation blast across 30+ repositories: coordinated audit timestamps, coverage targets, source file references, overview and tech stack and security sections, diagram conversions, design doc expansions, privacy statements, changelog backfills -- every tool, library, client, and service touched</td>
      <td>30h</td>
      <td>45m</td>
      <td>0.75w</td>
      <td>40.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Admin dashboard real-time architecture: all 5 phases -- WebSocket scaffolding in admin service, Redis event bus with publishers in auth/billing/notification services, event forwarder, SPA WebSocket client and hooks, migrate all dashboard pages and modals to live data</td>
      <td>12h</td>
      <td>20m</td>
      <td>0.30w</td>
      <td>36.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fix enrollment and proficiency not persisting in web client: root cause was a slug-to-UUID mismatch at the API boundary -- client posted catalog slugs, service called engine for entitlement check using UUIDs, causing silent fail-closed and optimistic local row surviving until hydrate wiped it; added translation helpers, enrollment store now resolves slug-UUID at every API call (create/patch/delete/archive plus engine enrichment); hydrate resolves server UUIDs back to slugs; migration flag bumped to retry affected accounts; 146 tests pass</td>
      <td>4h</td>
      <td>10m</td>
      <td>2m</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Fix lesson activity navigation: course detail component was calling taxonomy fetch with catalog slug instead of domain ID, causing 404 and fallback to synthesized modules with no goal IDs (non-clickable); added loading and error states with skeleton and guard for catalog-loaded but course-missing case</td>
      <td>2.5h</td>
      <td>7m</td>
      <td>0.062w</td>
      <td>21.4x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Architecture specification document: per-course individual autopilot goals with database persistence, enrollment tracking in auth service, auto-managed composite goal on top; full data model, API surface, lifecycle rules, sequencing across three repositories, migration plan</td>
      <td>3h</td>
      <td>9m</td>
      <td>0.075w</td>
      <td>20.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Web client improvements: lessons picker page, MCQ review card styling, heading content pools (100+100), bug reporter path fix, telemetry batcher removal, lab asset migration planning; five commits</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Remove all close buttons from every modal platform-wide: four surgical edits covering the modal shell, drawer shell, bug reporter dialog, and test mode modal; ESC and backdrop dismiss still work; removed unused icon imports; 146 tests pass</td>
      <td>1.25h</td>
      <td>5m</td>
      <td>0.031w</td>
      <td>15.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Surface enrollment error states in web client, deploy, and grant developer entitlement: client now rolls back optimistic rows and shows upgrade prompt instead of leaving ghost cards; archive and unenroll and session-record calls self-heal ghost rows on 404; diagnosed persistent auth errors as genuine entitlement gap, tunneled into production services container, granted all-access lifetime entitlement via billing admin API; verified entitlements endpoint returns all-access true</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Lab asset CDN migration: wire course detail to CDN, remove bundled manifest and prebuild scripts; add separate CI buildspec and upload script; Terraform CDN module plus separate pipeline; status document replacing plan document</td>
      <td>4h</td>
      <td>16m</td>
      <td>0.10w</td>
      <td>15.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Activity library improvements: flashcard auto-submit on recall (drop submit and hint buttons), lesson-link button wired via course slug, hide hint escalation level and escalation CTA in session hint panel; scoped server-side enrollment and autopilot sync plan</td>
      <td>3h</td>
      <td>13m</td>
      <td>0.075w</td>
      <td>13.9x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Autopilot sync plan completion: composite next-item rendering with cross-domain pills, shared-concept credits-every-listed-exam hint, 4-exam cap notice when 5 or more autopilots are active</td>
      <td>4h</td>
      <td>19m</td>
      <td>0.10w</td>
      <td>12.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Web client UI additions: hide close button in notification drawer, blank release notes drawer, cross-browser enrollment state diagnosis and documentation, CI-sequenced push to ensure web client picks up latest design system from artifact registry</td>
      <td>2h</td>
      <td>10m</td>
      <td>0.050w</td>
      <td>12.0x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Web client comprehensive push: auto-manage composite autopilot for 2+ active plans, composite next-item rendering with today plan and 4-exam cap notice, write-through enrollment and autopilot to server with login hydrate, self-heal ghost rows on 404, upgrade prompt on 403, slug-UUID translation at API boundary, lessons picker, labs-on-CDN migration, bug reporter fix, telemetry rip-out, data-loss migration fix, flashcard lesson-link and hints, accept-invite page, release notes blank, reset account, guided tour restore, activities bundle</td>
      <td>18h</td>
      <td>90m</td>
      <td>0.45w</td>
      <td>12.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Auth and billing service JWT compatibility diagnosis: verify JWTs via JWKS endpoint, accept OIDC issuer URL in claim, fall back to first JWKS key when token has no key ID, issuer-claim debug logging, accept both auth issuers, JWT decode-failure reason logging; billing service comp enrichments (names, email, computed status, notify flag handling, welcome extras); Redis dependencies plus comp/subscription/payment event publishing</td>
      <td>8h</td>
      <td>40m</td>
      <td>0.20w</td>
      <td>12.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Lab asset CDN infrastructure: Terraform module for CDN bucket and distribution plus publish pipeline, separate buildspec and upload script, build environment detection to skip named AWS profile, simulation library exposes extracted CSS via package exports, lab simulator suppresses selector flash during auto-start, web client drops bundled lab manifest and fetches from CDN, lab frame stylesheet import</td>
      <td>12h</td>
      <td>60m</td>
      <td>0.30w</td>
      <td>12.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Internal communication tool login flow fix: localStorage key mismatch causing login reload loop -- API client read from one key, auth library wrote to a different key</td>
      <td>2h</td>
      <td>15m</td>
      <td>0.050w</td>
      <td>8.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Make admin WebSocket live: inline subscriber into admin service, delete unused event library, remove old WebSocket files, migrate activity feed, fix accessibility test, run backend tests across 4 services, commit and push all 4 repositories</td>
      <td>2h</td>
      <td>15m</td>
      <td>0.050w</td>
      <td>8.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Lab runner UI improvements and guided tour restoration: friendly lab header with back navigation, dashboard guided tour retargeted to live test IDs with SEEN_KEY bumped, hide language picker on settings page</td>
      <td>1.5h</td>
      <td>14m</td>
      <td>0.037w</td>
      <td>6.4x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Lab CDN Terraform import and apply: import 9 existing resources, apply 2 new pipeline and build resources, debug first run credential issue, verify second run rewrites manifest</td>
      <td>1h</td>
      <td>10m</td>
      <td>0.025w</td>
      <td>6.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Lessons UI pass: breadcrumbs replace duplicate back navigation, curriculum tab restore via query param, body text color inheritance fix, TTS wired via secure parameter store with in-place container restart and startup script persistence</td>
      <td>2h</td>
      <td>22m</td>
      <td>0.050w</td>
      <td>5.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Simulation library CSS fix: expose component CSS via package exports, import in lab frame, sequence library publish before web client redeploy, verify library CSS classes present in deployed vendor bundle</td>
      <td>0.5h</td>
      <td>6m</td>
      <td>0.013w</td>
      <td>5.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Activities bundle pass: feature flag wiring, slug-to-domain-ID translation at scenario and micro-challenge and cross-domain activity boundaries, MCQ feedback block lesson link, course title hover affordance on dashboard</td>
      <td>1h</td>
      <td>12m</td>
      <td>0.025w</td>
      <td>5.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Admin email rendering and dashboard enrichments: email markdown rendering and branding plus preview UI; comps table enrichment with names and computed status and bulk user lookup; admin service JWT key-ID fix; WebSocket architecture plan document</td>
      <td>14h</td>
      <td>180m</td>
      <td>0.35w</td>
      <td>4.7x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Lab simulator auto-start flash fix: gate root route on initial lab ID to suppress selector flash during auto-start; republish library and trigger web client rebuild</td>
      <td>0.33h</td>
      <td>5m</td>
      <td>0.008w</td>
      <td>4.0x</td>
      <td>19.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>26</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>189.1</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>704</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>4.7</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,030,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>16.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>143.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The compliance and documentation audit task (98.8x, 17 minutes) was the day&#39;s standout by factor. Running SOC2, GDPR, and CCPA checks across 71 repositories and then remediating findings with 44 repositories committed and pushed in 17 minutes is the clearest example of why parallelism changes the economics of documentation work. A human engineer running the same audit sequentially -- checking each repository against each compliance framework, noting gaps, writing fixes, committing -- would need days just to get through the reading phase. The AI fans out across the full repository surface simultaneously, applies fixes, and pushes commits in the time it takes a human to open the second repository. The 98.8x factor is high but not unusual for well-structured audit-and-remediate work where the criteria are explicit and the changes are mechanical.</p>
<p class="mb-4 font-light font-serif">The server-backed enrollment implementation (42.4x, 34 minutes) tells a more interesting story. The task crossed three codebases -- learning engine, auth service, web client -- and required implementing a complete data model for per-course autopilot goals, write-through cache semantics for enrollments, an auto-managed composite goal that activates when two or more individual goals are active, and database persistence with correct lifecycle rules. That is the kind of feature that requires holding a lot of context simultaneously: the relationship between the three codebases, the enrollment state machine, the cache invalidation semantics, and the migration plan for existing accounts. At 34 minutes and 42.4x, the AI compressed what would typically be a multi-day implementation sprint into a single session.</p>
<p class="mb-4 font-light font-serif">The slug-to-UUID bug fix (task 5, 24.0x, 10 minutes) is a good example of a class of bug that is expensive for human engineers to find and cheap to fix once found. The symptom was enrollments silently failing and optimistic local rows surviving in the client until a full hydrate wiped them. The root cause was that the client was posting catalog slugs to the auth service, the auth service was calling the learning engine for entitlement checks using those slugs, and the engine only resolves UUIDs -- so the subscription group came back as None, the system failed closed to a restricted tier, and the client got a 403 it did not surface clearly. Connecting that chain across three services, identifying that the fix belongs at the API boundary in the client&#39;s enrollment store, and implementing translation helpers with correct behavior at every call site (create, patch, delete, archive, and engine enrichment) required understanding how all three services interact. The 10-minute runtime reflects that the diagnosis and fix were well-specified by the time the task was recorded; the actual debugging time was folded into adjacent sessions.</p>
<p class="mb-4 font-light font-serif">The admin WebSocket architecture (task 4, 36.0x, 20 minutes for scaffolding; task 19, 8.0x, 15 minutes to make it live) is worth examining as a two-phase implementation. Phase one covered the architecture: WebSocket scaffolding in the admin service, Redis event bus with publishers wired into auth, billing, and notification services, an event forwarder, and migration of all dashboard pages and modals to live data. Phase two completed the production cut-over: inlining the subscriber, deleting the unused event library, removing old WebSocket files, fixing an accessibility test regression, running backend tests across all four services, and pushing all four repositories. The split factor (36.0x versus 8.0x) is the expected pattern: greenfield architecture work that follows a clear design yields higher leverage than the cleanup and cut-over work that follows it, where the human judgment per minute is higher.</p>
<p class="mb-4 font-light font-serif">The admin email and dashboard task (task 25, 4.7x, 180 minutes) is the day&#39;s longest single AI session and the lowest factor among the non-trivial tasks. The 4.7x reflects genuine implementation complexity: getting email rendering right across different clients requires iteration, the comps table enrichment required understanding several service relationships, the JWT key-ID fix required careful diagnosis, and the WebSocket architecture document required synthesizing design decisions into a coherent specification. The 180-minute runtime is the honest cost of work that does not have a single clean specification at the start. The supervisory leverage of 70x is also the signal: 12 supervisory minutes means the prompt was detailed, which means the human spent more time specifying the work than on most other tasks. That is the tradeoff on complex multi-concern tasks: more specification time, higher output quality, lower apparent leverage factor.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 21, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-21-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-21-leverage-record.html</id>
    <updated>2026-04-21T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nineteen tasks. April 21 was a UI polish and infrastructure remediation day. The majority of AI time went into iterative web client work: retiring the side navigation, wiring analytics charts to real activity data, fixing a silent grading bug where engine-backed answers always scored wrong, repairing a NaN propagation in the readiness gauge, and sweeping 400+ accessibility fixes across 17 sites covering 2,400+ pages. The day also included infrastructure housekeeping: stopping 11 zombie containers, pruning 4.5GB of unused images, renaming cloud resources, and retagging approximately 234 AWS resources across 4 project buckets. The weighted average leverage factor was 18.1x with a supervisory leverage of 129.2x, representing 158.25 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The 18.1x weighted average is notably lower than April 20 (31.3x / 271.0x). The gap has a clear structural explanation. April 20 was anchored by two high-leverage tasks -- a cloud infrastructure tool&#39;s final build phase (165.0x) and its initial commit and integration (100.0x) -- that compressed enormous greenfield output into 52 minutes. April 21 had no equivalent spike. The highest single factor was 27.3x on the question-bank grading rewrite, and the next two tasks tied at 24.0x. The bulk of the day consisted of 11 web client tasks in the 12x to 18x range, each targeting well-defined but incremental UI changes. The template hygiene sweep (21.8x, 165 minutes) is the only large-block task and pulls the weighted average toward the mid-range by sheer AI-time volume. The supervisory leverage drop to 129.2x is partly because the UI sessions required more iterative specification -- each session addressed a list of specific visual and behavioral changes rather than a single high-level directive.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Learning platform question-bank session rewrite: submit each answer to the engine grader, render per-option inline feedback (selected explanation and full explanation), lock options after grading, colour navigator tiles by correctness, update proficiency per question via engine response; fixes silent local-only grading bug where every answer would have scored wrong once engine-backed</td>
      <td>5h</td>
      <td>11m</td>
      <td>0.12w</td>
      <td>27.3x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Analytics ledger and chart wiring: connect daily activity rings and this-week chart to real study activity via a new weekly study ledger; session summary and question-bank answer paths now record actual minutes; engine-generated study plan gains collapsible week sections with week-1-open default, activity count, total minutes, and completion pill</td>
      <td>4h</td>
      <td>10m</td>
      <td>0.10w</td>
      <td>24.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Leverage record CSV reconciliation with cloud database: deduplicated 2 true duplicates, confirmed local CSV is a strict subset, restructured CSV into full cloud-backup plus empty upload queue; generated and published 4 backfilled leverage blog posts (Feb 22 and Apr 18/19/20, 106 records sanitized across 3 parallel writing agents), deployed to staging and production</td>
      <td>18h</td>
      <td>45m</td>
      <td>0.45w</td>
      <td>24.0x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Dashboard greeting punctuation sweep (comma after greeting word, terminal punctuation on every variant, updated regression tests); relabel of course list header; engine readiness endpoint extended with per-domain panel data (overall proficiency, pass probability via Poisson-binomial, weak areas, estimated hours remaining, velocity) when domain filter supplied, keeping backward-compatible thin shape otherwise; 3 regression tests added</td>
      <td>7h</td>
      <td>18m</td>
      <td>0.17w</td>
      <td>23.3x</td>
      <td>84.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Website template hygiene sweep across 17 sites: purged 20 macOS metadata files and 5 build caches (146MB total); established global and site-level ignore rules; consolidated 25 per-page duplicate templates into 3 shared frontmatter-driven templates (industries -5, applications -12, features -8); fixed template variable access bug in existing industry template; WCAG 2.1 AA audit and fixes across all 214 remaining templates via 4 parallel sub-agents (400+ fixes: decorative SVG aria-hidden, icon-only button labels, form label pairing, breadcrumb aria-current, landmark aria-label, dialog roles, skip links, button type attributes); rewrote static site generator CLAUDE.md accessibility section as mandatory WCAG 2.1 AA checklist and template variable reference; all 16 sites built clean with 0 errors across 2,400+ pages</td>
      <td>60h</td>
      <td>165m</td>
      <td>1.5w</td>
      <td>21.8x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Fix readiness gauge NaN propagation and hardcoded pass probability: root cause was client type expecting rich engine fields that the engine does not return, so undefined values flowed through Monte Carlo as NaN; hardened readiness hook to detect thin engine responses and fall back to predictor seeded by entry proficiency; added safe-value guards throughout probability module; replaced hardcoded 35% pass probability with seeded Monte Carlo value; added assistant feature flag defaulting to off</td>
      <td>5h</td>
      <td>14m</td>
      <td>0.12w</td>
      <td>21.4x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Web client UI restructure: retire side navigation and mobile tab bar; set button primitive default to rounded rectangle; sweep 58 pill-style buttons across 26 files; add recruiter certifications dashboard section; prepend back-to-dashboard link on 13 off-dashboard pages; merge activity tabs (study modes removed, labs and assistant tiles added); add sign-out icon to top navigation; fix recommendations zero-state filter</td>
      <td>6h</td>
      <td>20m</td>
      <td>0.15w</td>
      <td>18.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Design system and web client polish: hide confirm dialog close button and match primary button style; branded date picker for autopilot setup; study plan day separators (today, tomorrow, day N) and info modal; feature flag recruiter section off by default; drop assistant from activities; colored lab difficulty pill with longer description and spacing; web audio chime and branded update-available modal replacing native browser confirm dialog</td>
      <td>5h</td>
      <td>17m</td>
      <td>0.12w</td>
      <td>17.6x</td>
      <td>42.9x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Web client minor UI fixes: course card vertical centering; move exam date CTA to course dashboard; add info buttons and modals to 4 behavioral analytics cards; add footer link matching main marketing site style</td>
      <td>2.5h</td>
      <td>9m</td>
      <td>0.062w</td>
      <td>16.7x</td>
      <td>25.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Web client: restore proficiency ring on no-plan course cards; drop main dashboard autopilot CTA banner; merge autopilot tab into renamed overview tab; move daily minutes and reminder settings to global schedule store; remove at-a-glance and per-course trademark cards; add trademarks page linked from help legal section</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Web client: fix test mode modal prop type crash; sign-out confirm dialog with real post-logout redirect to marketing site; exam info modal on course header; native date picker trigger with dark mode indicator CSS; remove labs from activities; rename multiple choice activity and drop stale counts; improve activity descriptions; add per-activity icons to study plan matching activities tab; recruiter dashboard section now shows any enrolled course</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>April 21 web client consolidated push: dashboard analytics parity and info modals on analytics cards; retire side nav and rounded-rect buttons; recruiter section on dashboard with feature flag; test mode, sign-out confirm, and real logout; exam info; activities polish; study plan day separators, icons, and week collapse; branded date picker; lab polish; brand rename sweep; greeting punctuation; readiness NaN fix; per-course calibration trigger; stale-tab auto-recover; bug reporter restricted to desktop; weakest-area text wrapping; daily rings and weekly chart wiring; engine-graded questions with inline explanations; labs promotion; simplified onboarding</td>
      <td>20h</td>
      <td>75m</td>
      <td>0.50w</td>
      <td>16.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fix billing service CORS error on admin page: JWT verification crashed because local public key file was absent; switched to JWKS HTTP endpoint for key resolution</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Team-messaging tool first-login sidebar race fix: await user profile fetch before listing workspaces</td>
      <td>1h</td>
      <td>5m</td>
      <td>0.025w</td>
      <td>12.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Web client branding sweep: hide info modal close button; beef up analytics empty states; add this-week info button; bar chart accent hover fade; course header cleanup (drop exam code, use long-form date); study plan tab split; trademark holder links; fix pre-dev and pre-build scripts for lab manifest generation</td>
      <td>5h</td>
      <td>25m</td>
      <td>0.12w</td>
      <td>12.0x</td>
      <td>37.5x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Identify and stop 11 zombie containers on production services host: verified via load balancer target group membership and deployment buildspec targets; 46% RAM reduction and 98% idle CPU freed</td>
      <td>1.5h</td>
      <td>10m</td>
      <td>0.037w</td>
      <td>9.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Remove 11 zombie containers and prune 13 unused images (4.5GB reclaimed); correct instance name drift in project reference documentation</td>
      <td>0.75h</td>
      <td>5m</td>
      <td>0.019w</td>
      <td>9.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Rename cloud compute instance, security group, target group, and log group with zero-downtime load balancer cutover; retag approximately 234 AWS resources into 4 project buckets; update infrastructure configuration across 22 service directories; document 5 deferred items</td>
      <td>6h</td>
      <td>45m</td>
      <td>0.15w</td>
      <td>8.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Team-messaging tool CORS fix: SSM parameter stored as JSON array; backend splits by comma; converted to comma-separated and redeployed</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.8x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>19</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>158.25</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>524</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>4.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,064,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>18.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>129.2x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The question-bank grading rewrite (task 1, 27.3x) is the day&#39;s sharpest example of the AI catching a systemic bug and fixing it completely. The root cause: every answer the user submitted was being evaluated locally rather than by the engine grader, meaning the correctness signal was always wrong once the engine was live. The fix required rewriting the session component to submit each answer to the engine, wire the per-option explanation response back to the UI, lock options post-submission, and update proficiency state from the graded response. That is a multi-component change touching network calls, state management, and UI rendering -- done in 11 minutes.</p>
<p class="mb-4 font-light font-serif">The readiness gauge NaN fix (task 6, 21.4x) is a related class of bug: a type contract mismatch between what the client expected from the engine and what the engine actually returned. When the rich fields were absent, the client performed arithmetic on undefined values, which propagated through Monte Carlo sampling as NaN and produced a 0% display. The fix required detecting the thin response shape, falling back to a seeded estimator, and adding guards throughout the probability module. The hardcoded 35% pass probability was a separate but adjacent issue resolved in the same session. Both bugs would have been difficult to diagnose in a traditional debugger because the failures were silent until the UI rendered.</p>
<p class="mb-4 font-light font-serif">The template hygiene sweep (task 5, 21.8x, 165 minutes) is the day&#39;s largest single block by AI time and the clearest demonstration of where parallelism earns its cost. Running 4 parallel sub-agents across 214 templates to apply 400+ accessibility fixes -- decorative SVG aria-hidden attributes, icon-only button labels, form label pairing, breadcrumb aria-current, landmark labels, dialog roles, skip links -- is work that scales linearly with template count for a human. A human accessibility reviewer spending 15 minutes per template across 214 templates would need 53 hours before writing a fix. At 165 minutes total AI time and 8 supervisory minutes, the cost is one focused session and a coffee.</p>
<p class="mb-4 font-light font-serif">The consolidated push record (task 12, 16.0x) is the day&#39;s highest AI-time task at 75 minutes, but it is also an accounting artifact: it captures the full session work as a single record alongside the individual granular records that describe the same changes. Taken at face value, 20 human-equivalent hours of web client work committed and pushed in a 75-minute AI session is consistent with the granular records that surround it, which collectively total 116 AI minutes for approximately 52 human-equivalent hours of web client work.</p>
<p class="mb-4 font-light font-serif">The infrastructure retagging task (task 18, 8.0x, 45 minutes) sits at the bottom of the non-housekeeping range for a predictable reason: retagging 234 AWS resources across 4 project buckets requires reading existing resource configurations, cross-referencing a tagging scheme, executing API calls one resource at a time, and updating Terraform state for 22 service directories. The work is highly mechanical but also highly sequential -- each resource must be identified, tagged correctly, and verified before moving to the next. The AI compresses the research and execution phases but cannot fully parallelize the AWS API calls. The team-messaging tool CORS fix (task 19, 3.8x) is the only sub-4x task in the log: the problem was a configuration format mismatch (JSON array versus comma-separated string) that took 8 minutes to diagnose and redeploy. That is the diagnostic overhead floor for a production config issue regardless of AI assistance.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 20, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-20-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-20-leverage-record.html</id>
    <updated>2026-04-20T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eighteen tasks. April 20 had two dominant themes: finishing and shipping a new cloud infrastructure provisioner tool, and fixing things. The day opened with the final construction phases of a new provisioner (resource schemas, 10 additional advisor checks, 6 new resource types, cost estimators, MCP tool surface, 156 passing tests), moved through an initial commit and icon generation, then pivoted hard into remediation mode: a documentation audit sweep across 70 repositories, resolution of 156 audit findings, five bug fixes in the learning platform, two backend bug fixes in the question-bank API, container infrastructure diagnosis, and a fleet-wide commit and wiki-sync sweep. The weighted average leverage factor was 31.3x with a supervisory leverage of 271.0x, representing 284.5 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The 31.3x weighted average is lower than April 19 (63.7x / 865.7x) for a structural reason: April 20 was a remediation-heavy day rather than a greenfield day. The two highest-leverage tasks (165.0x and 100.0x) were the provisioner&#39;s final construction phases, where the AI was generating schemas, checks, resource types, and test coverage from a well-specified blueprint. But those tasks totaled only 52 minutes of AI time. The remaining 493 minutes were consumed by audit work, bug fixing, routing fixes, wiki plumbing, and commit sweeps -- work that is necessary but has lower ceiling leverage because the human decision content is higher per minute of AI time. The supervisory leverage at 271.0x reflects the same dynamic: several tasks required more detailed prompts to specify what to fix and where, which pushed supervisory minutes up and the supervisory factor down relative to April 19&#39;s more directive, lower-specification prompts.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cloud infrastructure provisioner: resource schema catalog (typed property specs and resource schemas for core resource types, fallback for others), MCP tool and WebSocket op for schema queries; 10 new advisor checks (CPU utilization, classic load balancers, orphaned volumes, IAM inline star policies, KMS alias gaps, TLS version checks, CloudTrail bucket protection, aged access keys, full-admin policies, default security group rules) bringing total to 59; 6 new resource types bringing total to 80; 3 new cost estimators bringing total to 16; 156 tests pass, 8 skipped; 44 MCP tools</td>
      <td>110h</td>
      <td>40m</td>
      <td>2.8w</td>
      <td>165.0x</td>
      <td>6600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Cloud infrastructure provisioner: initial git commit of 80 resource types, 56 discoverers, 88 CloudTrail patterns, 59 advisor checks, 11 compliance packs, 16 cost estimators, 44 MCP tools, 156 tests; private GitHub repo created and pushed; all 13 tool icon variants generated; corporate site updated with tool page, blog post, footer link, and icons; offline production stack plan dry-run confirmed 11 creates in correct topological order</td>
      <td>20h</td>
      <td>12m</td>
      <td>0.50w</td>
      <td>100.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Documentation audit remediation: resolved 14 high-severity findings (missing files), 42 medium findings (missing sections, incorrect filenames, coverage gaps), and approximately 100 low findings (cross-references, diagrams, word counts, source references) across approximately 85 repository touches using 5 parallel agents; hundreds of commits pushed</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Learning platform web client UI restructure: per-course dashboards with tabbed navigation (overview, adaptive scheduler, curriculum, activities), main dashboard aggregated to a readiness card per course with today plan, side navigation simplified by removing redundant top-level sections, recruiter certifications page revamped</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Cloud infrastructure provisioner fleet integration: Terraform workspace consuming shared load balancer remote state, OIDC client registration in auth database, CORS origin update with auth container recreate, corporate site deployment with tool detail page, blog post, footer link, and icon assets</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Parallel audit sweep: 7 audit types (health-check, full readiness, security, content, accessibility, compliance, documentation) run simultaneously across 70 repositories; reports written to audit output directory</td>
      <td>20h</td>
      <td>50m</td>
      <td>0.50w</td>
      <td>24.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Fix 5 activity bugs in learning platform web client (practice exam item count, flashcard rendering, lesson navigation, activity placeholder component, adaptive plan dispatcher); build canonical activities-per-certification catalog across 4 repositories</td>
      <td>22h</td>
      <td>55m</td>
      <td>0.55w</td>
      <td>24.0x</td>
      <td>220.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Fix two compounding bugs in question-bank answer API: shuffled answer options had mismatched per-option explanations due to a cross-index bug on the shuffled array; wrong-answer selected explanation was concatenated to full node content producing a wall of generic prose; regression test added</td>
      <td>3h</td>
      <td>9m</td>
      <td>0.075w</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Wire 20 activity types to learning engine manifold: activity-credit fallback in session handler, widened client type enumeration, correct-answer and score and node-ID scaling, exam submission and scenario embedding updates, 3 specialty activity types added to ranker and credit rules; all 4 engine dictionaries now aligned at 20 activity types</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Diagnose and fix auth and billing service container churn: identified that a small EC2 instance was undersized for an 18-container tools fleet, resized to the next instance tier, identified zombie containers</td>
      <td>2.5h</td>
      <td>14m</td>
      <td>0.062w</td>
      <td>10.7x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Wiki tool: replace slug-based page lookup with path-based routing so pages with duplicate slugs across multiple linked repositories resolve distinctly; backend adds path lookup method and route; tree nodes and breadcrumb items gain path field; frontend threads full slug path through routes, page components, tree links, and breadcrumbs</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Wiki tool: linked-page provenance UI showing synchronized status pill, disabled edit button, and edit-in-source modal for pages that originate from linked repositories; backend exposes source type, linked path, linked repository name, and source URL via eager-loaded relationship</td>
      <td>2.5h</td>
      <td>15m</td>
      <td>0.062w</td>
      <td>10.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fleet-wide commit sweep: completed doc deduplication decisions across several tool repositories (files deleted, merged, or renamed per prior decisions); committed prior uncommitted work across the fleet including architecture diagram docs, build-info cleanup with gitignore updates, analytics beacon, infrastructure lockfile, dev services dashboard tile, browser tool design system migration; all 22 tool repositories pushed; wiki space resynced with 23 successes</td>
      <td>5h</td>
      <td>30m</td>
      <td>0.12w</td>
      <td>10.0x</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Bulk-link 19 tool repositories into production wiki space and trigger initial syncs via two purpose-built scripts running against production database through a port-forwarding tunnel; all 22 repositories now synced with 222 pages total</td>
      <td>4h</td>
      <td>25m</td>
      <td>0.10w</td>
      <td>9.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Composite adaptive scheduler with hierarchical exam-pass priors: end-to-end simulation validation showing a simulated learner passes two sequential cloud certifications in 22 days after previously being stuck at zero readiness; engine and synthetic learner changes committed and pushed</td>
      <td>14h</td>
      <td>90m</td>
      <td>0.35w</td>
      <td>9.3x</td>
      <td>105.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Wiki tool: realtime WebSocket fanout (space-scoped broadcasts, event bus bridge, frontend WebSocket client); theme-toggle conflict fix between design system and app shell theme providers; linked-repo title deduplication rule falling back to filename stem when the page H1 echoes the parent folder; full resync of all 23 linked tool repositories to apply new title rule</td>
      <td>3h</td>
      <td>20m</td>
      <td>0.075w</td>
      <td>9.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Documentation deduplication across 5 tool repositories: merged redundant test documentation into canonical testing strategy files, merged technical design documents into canonical design files, renamed implementation plan files to canonical names; all 5 repositories committed, pushed, and wiki space resynced</td>
      <td>2.5h</td>
      <td>18m</td>
      <td>0.062w</td>
      <td>8.3x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Dev services stack restart, browser tool docker build fix (artifact registry authentication token), design system provider wiring in browser tool frontend, cloud infrastructure provisioner card added to dev services dashboard, port registry table restyled to match dashboard dark theme</td>
      <td>3h</td>
      <td>32m</td>
      <td>0.075w</td>
      <td>5.6x</td>
      <td>45.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>18</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>284.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>545</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>7.1</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,501,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>31.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>271.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The cloud infrastructure provisioner tells the clearest leverage story of the day. The tool covers 80 resource types, 59 advisor checks, 11 compliance packs, 16 cost estimators, 44 MCP-exposed operations, and 156 passing tests. The construction of that surface -- including the resource schema catalog with typed property specs, the 10 additional advisor checks with real CloudWatch integration, and the 6 new resource types -- ran in 40 minutes at 165x leverage. The follow-on commit, icon generation, corporate site integration, and production dry-run ran in 12 more minutes at 100x. That is 52 minutes of AI time to finish and ship a substantial infrastructure tool. The offline production dry-run confirming 11 creates in correct topological order before touching any real AWS account is the kind of verification step that a solo developer often skips under time pressure. Here it cost nothing extra to include.</p>
<p class="mb-4 font-light font-serif">The audit work dominated the day&#39;s AI time by volume. Running 7 audit types in parallel across 70 repositories (50 minutes, 24x) and then resolving 156 findings across approximately 85 repository touches using 5 parallel agents (45 minutes, 53x) is the pattern where parallelism earns its keep. A human engineer running these audits sequentially, reading reports, deciding what to fix, and making the changes would spend days on the triage phase alone before writing a line. The AI can fan out across the full repository surface simultaneously, apply fixes, and push commits while the human is still reading the first report. The 53x factor on the remediation task understates the qualitative benefit: the findings were heterogeneous (missing files, wrong filenames, missing cross-references, coverage gaps) and required judgment about canonical names and correct locations. That kind of multi-repository context-holding is where AI agents have a structural advantage over human engineers working linearly.</p>
<p class="mb-4 font-light font-serif">The wiki tool work (tasks 11, 12, 13, 14, 16, 17) collectively took 126 minutes across 6 tasks and added up to 19 human-equivalent hours. The individual leverage factors are in the 8x to 10x range, which reflects the nature of the work: routing changes, UI provenance indicators, WebSocket fanout, title deduplication rules, and fleet-wide syncs are all tasks with well-defined acceptance criteria and a high ratio of mechanical implementation to architectural decision. The path-based routing fix (task 11) is a good example: the problem was clear (duplicate slugs across repos producing wrong page resolutions), the solution was clear (replace slug lookup with path lookup and thread the path through all components), and the implementation touched both backend and frontend in a predictable way. 10x is roughly the right factor for that class of work.</p>
<p class="mb-4 font-light font-serif">The container infrastructure diagnosis (task 10, 10.7x) is worth noting because it is the kind of problem that can consume hours of a human engineer&#39;s time in a production incident. Identifying that an instance running 18 containers is undersized, connecting the instance tier to the churn behavior, and then executing the resize requires correlating CloudWatch metrics, understanding the container fleet configuration, and making a judgment call about the appropriate tier. At 14 minutes and 10.7x, the AI compressed what is typically a multi-hour on-call investigation into a single session.</p>
<p class="mb-4 font-light font-serif">The composite adaptive scheduler fix (task 15, 9.3x, 90 minutes) is the day&#39;s highest AI-time single task and the lowest leverage factor among the non-housekeeping tasks. The 90-minute runtime reflects genuine algorithmic complexity: hierarchical exam-pass priors require understanding how prior certification passes should influence readiness estimates for downstream certifications in a sequence, implementing that correctly in the scheduler, and validating end-to-end with a realistic simulation showing the learner reaching the expected outcome. The 9.3x factor is still meaningful -- 14 human-equivalent hours of algorithm design, implementation, and validation in 90 minutes -- but it correctly sits at the bottom of the non-housekeeping range because the work required sustained reasoning rather than mechanical execution.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 271.0x is solid but substantially below April 19&#39;s 865.7x for the same reason the task leverage is lower: remediation and bug-fixing days require more precise prompts. Telling an AI to fix 5 specific bugs requires identifying those bugs, locating the relevant code, and specifying the fix or at least the failure mode. That takes more supervisory time than telling an AI to build a new feature from a specification. The audit remediation (5 supervisory minutes) and the adaptive scheduler (8 supervisory minutes) were the two tasks where the human spent the most time writing the prompt, and both reflect the cost of specifying complex, multi-file diagnostic work rather than greenfield construction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 19, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-19-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-19-leverage-record.html</id>
    <updated>2026-04-19T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-seven tasks. April 19 was dominated by infrastructure provisioning: the bulk of the day went toward building a cloud infrastructure provisioner from scratch across nine sequential build phases, bringing the tool from initial scaffold through a production-ready deployment with 58 provisionable resource types, 42+ MCP tools, 97 compliance rules, 10 compliance packs, 49 advisor checks, 145 tests, and a full WebSocket-only frontend. Running alongside that were the from-scratch build of a new real-time messaging tool, a major design system migration across a desktop client, MCP coverage sweeps across a dozen fleet tools, and calibration work on a synthetic student simulator. The weighted average leverage factor was 63.7x with a supervisory leverage of 865.7x, representing 2,135.5 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">April 18 clocked in at 121.1x weighted leverage and 1,297.7x supervisory. April 19 is lower on both axes for a straightforward reason: the day included a large number of sub-10x tasks. Calibration iteration tasks (4.7x, 6.7x, 8x) ran long in AI minutes because debugging a predictive model requires exploratory back-and-forth that doesn&#39;t compress the way greenfield builds do. A deployment and signing session (9.6x) spent 75 AI minutes chasing Vite chunk-splitting breakage and native module rebuild issues for an Electron build. An admin backend standup (8.8x) ran 75 minutes against a build pipeline that had a pre-existing CORS bug. These tasks drag the weighted average down substantially relative to a day where every task is new construction. The supervisory leverage also steps back because several multi-phase tasks required more detailed briefs -- 8-minute prompts instead of 1-minute ones.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Infrastructure tool build, Phases 0-3: scaffold backend (FastAPI + WebSocket + MCP + database migrations + observability log drain) and frontend (React 19 + single WS client + pages), implement resource library with 12 AWS-shaped types, build dependency graph + planner + applier + destroyer + end-to-end stack lifecycle tests against mocked AWS, wire WebSocket dispatcher + 11 MCP tools + skill. Close onboarding doc gaps. 35 tests pass, 67% coverage.</td>
      <td>160h</td>
      <td>55m</td>
      <td>4.0w</td>
      <td>174.5x</td>
      <td>3200.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Infrastructure tool build, continuation 2: cost service (pricing API + fallback pricebook, 8 resource estimators), IP space service (CIDR math + subnet availability + per-stack ENI footprint), compliance framework (declarative rule engine + 3 bundled packs covering 11 rules + tables + MCP tools), 6 more advisor checks bringing total to 12, 6 more resource types bringing total to 31, 36 MCP tools. 80 tests pass.</td>
      <td>160h</td>
      <td>55m</td>
      <td>4.0w</td>
      <td>174.5x</td>
      <td>9600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Infrastructure tool build, continuation 3: +20 production-critical resource types (load balancers, target groups, listeners, container cluster services, managed database instances, cache clusters, CDN distributions, build projects, pipelines, artifact repositories, identity pool, launch template, autoscaling group, state machine, event bus -- total 51), multi-account org discovery via org walk + STS assume-role chain + 3 MCP tools, system stack bootstrap with 10 logical resources + 2 MCP tools. 100 tests pass. 41 MCP tools.</td>
      <td>140h</td>
      <td>50m</td>
      <td>3.5w</td>
      <td>168.0x</td>
      <td>8400.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Infrastructure tool build, continuation 4: +6 gap-filler resource types (EC2 instance provisionable, instance profile, managed policy, web ACL, bucket encryption, bucket lifecycle -- total 57), parallel fleet scanner with asyncio bounded-concurrency fan-out across accounts and regions, import hook REST route, +8 advisor checks bringing total to 20, +3 compliance packs bringing total to 6 packs / 36 rules, end-to-end system-stack integration test against mocked AWS. 107 tests pass. 42 MCP tools.</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>7200.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Infrastructure tool build, Phases 4-7 foundations: 12 more resource types (route tables, EIP, NAT gateway, ACM certificate, DNS hosted zone + record set, container registry, secrets, SNS topic, events rule), stack importer with tag-based discoverers + MCP tool, stack versioning (auto-snapshot on apply + rollback), inventory foundation (account/inventory/scan tables + 12 per-type discoverers + collector with soft-delete tombstoning + MCP tools), advisor scaffold (check framework + registry + 6 initial checks). 53 tests pass.</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>7200.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Infrastructure tool build, continuation 5: +27 inventory discoverers (total 39 types), real-time event ingest with 44 event patterns + ingest endpoint, landing zone reader (handles unenrolled accounts gracefully), monitoring registration + observability dashboard JSON + sync script, +7 advisor checks bringing total to 27, 4 frontend pages wired to WebSocket. 123 tests pass. 43 MCP tools.</td>
      <td>160h</td>
      <td>60m</td>
      <td>4.0w</td>
      <td>160.0x</td>
      <td>9600.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Infrastructure tool build, continuation 9: +44 event patterns (total 88 -- covers EC2 tag + security group changes, IAM, managed database, object storage, container, load balancer, CDN, event rules, state machine, secrets, pipelines, audit trail, identity pool), +12 inventory discoverers (analytics workgroups, data integration, data warehouse, streaming, document DB, archive, config, messaging, virtual desktops, file transfer -- total 56), +8 advisor checks (total 49), +1 compliance pack (total 11 packs / 97 rules). 145 tests pass.</td>
      <td>100h</td>
      <td>38m</td>
      <td>2.5w</td>
      <td>157.9x</td>
      <td>6000.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Infrastructure tool build, continuation 8: +8 resource types (budgets, health checks, event source mapping, layer version, topic policy, queue policy, DB cluster, events target -- total 74), +5 inventory discoverers (backup vault, REST API gateway v1, threat detector, config recorder, security hub -- total 44), +8 advisor checks (total 41), +2 compliance packs (SOC 2-lite, FedRAMP moderate-lite -- total 10 packs / 82 rules). 144 tests pass.</td>
      <td>90h</td>
      <td>35m</td>
      <td>2.2w</td>
      <td>154.3x</td>
      <td>5400.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Infrastructure tool build, Phase 9: boto3 production deployment stack (11 resources) + bootstrap script with plan/apply/destroy, +1 resource type, deploy script + prod buildspec. Issue tracker board seed script. Monitoring registration + observability dashboard JSON + sync script. Auth OIDC client + CORS SSM registration script. Bug reporter wired. Port collision fix: bumped infrastructure tool to ports 3442/3443, swept every reference. Port registry moved to supporting-services as single source of truth + live filter tab added to dashboard (91 rows). Corporate site tool page, card, footer, blog post, icon mapping. Supporting-services dashboard entry + MCP catalog (43 tools). 127 tests pass. 58 provisionable types.</td>
      <td>140h</td>
      <td>55m</td>
      <td>3.5w</td>
      <td>152.7x</td>
      <td>2800.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Infrastructure tool build, continuation 7: client cert issued from internal CA (key + cert + PKCS12, 5yr validity), +8 resource types (web ACL association, identity pool, standalone IAM policy, backup vault + plan, search domain, SNS subscription, bucket website config -- total 66), metric helper (14-day CPU average + max) retrofitted into advisor check, +5 cost estimators (total 13), +6 advisor checks (total 33), +2 compliance packs (cloud security best practices, well-architected security -- total 8 packs / 58 rules). 137 tests pass.</td>
      <td>100h</td>
      <td>40m</td>
      <td>2.5w</td>
      <td>150.0x</td>
      <td>6000.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Messaging tool build, end-to-end: walked through 14 build phases (~5,500 LOC across Python, TypeScript, Shell), all 10 tests pass, provisioned full AWS infrastructure, bootstrapped database via SSM, created public source repo, pushed 7 commits, debugged and fixed 3 deploy issues (security group port, package lock registry, npm config), production live with HTTP 200 on both frontend and API health endpoints.</td>
      <td>200h</td>
      <td>80m</td>
      <td>5.0w</td>
      <td>150.0x</td>
      <td>12000.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Infrastructure tool design: scoped 3 legacy apps to replace, audited existing Terraform and boto3 resources, produced full design document (WebSocket-only frontend, boto3 provisioner with CloudFormation-shaped resources, system stack, org scan, conformance packs, advisor parity, cost/IP space), scaffolded repo with CLAUDE.md, README, and four canonical docs.</td>
      <td>36h</td>
      <td>18m</td>
      <td>0.90w</td>
      <td>120.0x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Messaging tool build, Phases 0-8: full backend (workspaces, channels, messages, threads, reactions, agent sessions, WebSocket gateway), React 19 + Tailwind frontend (sidebar, channel view, agent thread view, tasks dashboard, composer, themes), CLI with 5 hook scripts, end-to-end bridge (start session, stream events, human reply, inbox poll, ack, complete), MCP stdio server with 15 tools, 10 passing integration tests, initial commit. ~4,350 LOC.</td>
      <td>120h</td>
      <td>60m</td>
      <td>3.0w</td>
      <td>120.0x</td>
      <td>3600.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Desktop client design system migration: 42 screens/components converted from legacy CSS Modules + icon library to Tailwind + shared design system primitives; all TypeScript errors fixed; universal macOS DMG built and signed.</td>
      <td>60h</td>
      <td>55m</td>
      <td>1.5w</td>
      <td>65.5x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Command-center app fleet-onboarding cross-walk: README, compliance section in requirements (native bug reporter, diagnostics + identity endpoints), design additions (metrics, monitoring registration, auto-update + distribution topology, observability dashboard artifact, orchestrator MCP server 14A/14B/14C), Phase 15.5 onboarding completion plan, living 94-item checklist tracking doc.</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>62-spec free-tier expansion authored, validated, and seed-chained + lesson-asset pipeline foundation (new asset repo, object storage buckets provisioned, asset resolver and static mount in engine, topological synthesis batch).</td>
      <td>120h</td>
      <td>160m</td>
      <td>3.0w</td>
      <td>45.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Expand MCP coverage to full observability surface (metrics, logs, traces, alerts, incidents, SLOs, dashboards).</td>
      <td>10h</td>
      <td>14m</td>
      <td>0.25w</td>
      <td>42.9x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Messaging tool end-to-end onboarding: added monitoring, observability, and bug reporter specs to all 4 tool docs; AWS infra phase added to plan; codified full new-tool onboarding checklist in tools CLAUDE.md; shipped tool page, blog post, footer, tools list card, 10 screenshots to corporate site production; added tool to supporting-services dashboard catalog; created issue tracker board with 5 columns and 19 phase cards.</td>
      <td>32h</td>
      <td>45m</td>
      <td>0.80w</td>
      <td>42.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Expand MCP coverage across pipelines, deals, activities, tasks, forecasts, and bulk operations in the CRM tool.</td>
      <td>9h</td>
      <td>13m</td>
      <td>0.23w</td>
      <td>41.5x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Web client: fix 3 MCP-modal bugs -- (1) timer extension now skips answered questions, (2) engine grading integrated so correct answers score correctly and trigger auto-advance while wrong answers show server-authored explanation, (3) new context-aware adaptive hint endpoint with 3-level escalation driven by proficiency gap + session accuracy + prior hint count, plus frontend hint panel replacing the old generic toast.</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Replace SSE with WebSockets for real-time list updates in the list tool.</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Desktop client parity cleanup: deep-link dispatch, TypeScript error fixes (3 type definitions), competitive-mock dev-gate, login screen removal, tray stats push, router adoption with history stack.</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Replace SSE with WebSockets for real-time list updates in the task tracker.</td>
      <td>6h</td>
      <td>11m</td>
      <td>0.15w</td>
      <td>32.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Fill MCP coverage gaps in the email tool: filters, push subscriptions, accounts, identities, signatures, contacts, and more.</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Replace SSE with WebSockets for AI chat token streaming in the patent browser tool.</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Fix page click in wiki tool (add by-slug + breadcrumbs routes); messaging tool channels/API keys (auto-enroll users, upsert on key mint); leverage dashboard leaderboard timeframe selector + All option.</td>
      <td>6h</td>
      <td>14m</td>
      <td>0.15w</td>
      <td>25.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Wiki tool Phase 11 complete: linked repo service + bulk create, git sync worker with glob filter/frontmatter/link rewriter, HMAC-signed webhook, vector embeddings + chunker, AI chatbot with prompt caching, 17 MCP tools, frontend admin UIs + streaming chat, database migration + README walkthrough.</td>
      <td>60h</td>
      <td>140m</td>
      <td>1.5w</td>
      <td>25.7x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Wiki tool Phase 11.1+11.2: ORM models (linked repo, SSH key, page embedding, chat session, chat turn + extended page) + SSH key service with secrets manager/filesystem backends + REST routes.</td>
      <td>10h</td>
      <td>28m</td>
      <td>0.25w</td>
      <td>21.4x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Labs CDN: provision S3 bucket + CDN distribution + DNS + CORS, upload 2,048 labs + manifest, boto3 upload script, Terraform stub, desktop client lab-CDN module + labs browser screen + nav + local cache, unbundle 14 MB labs from web client + wire CDN fetch + local storage cache.</td>
      <td>24h</td>
      <td>90m</td>
      <td>0.60w</td>
      <td>16.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Calendar tool MCP coverage 46 to 62 tools (100%+ endpoint coverage): added calendar sets, accounts, proposals, integrations, fleet status, feeds, export, weather, event parsing.</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Wiki tool linked-repos design: extend requirements, design, plan, and testing docs with linked repo + SSH key management + vector RAG + AI chatbot (Phase 11).</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Root-cause and fix desktop client console simulator type resolution (deleted obsolete ambient type declarations that shadowed real exports with <code>any</code>); fix 3 pre-existing errors hidden by <code>any</code> types; implement main-process code executor with sandboxed tmpdir + timeout + output caps for JS and Python; remove insecure renderer-side fallback.</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Marketing tool: wire missing social engagement WebSocket backend handler + reach 100% MCP coverage (lifecycle-rules CRUD).</td>
      <td>4h</td>
      <td>18m</td>
      <td>0.10w</td>
      <td>13.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Desktop client: migrate 9 renderer screens (lobby, waiting room, competitive game, results, autopilot, release notes, provider mastery, lab console, onboarding) from legacy CSS Modules + icon library to shared design system primitives + Tailwind + Lucide icons.</td>
      <td>6h</td>
      <td>28m</td>
      <td>0.15w</td>
      <td>12.9x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Close MCP coverage gap in analytics tool: add 3 missing tools to reach 100%+.</td>
      <td>2h</td>
      <td>12m</td>
      <td>0.050w</td>
      <td>10.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Close MCP coverage gap in monitoring tool from 32/44 to 36/35 tools (100%+): add 4 new MCP tools.</td>
      <td>2h</td>
      <td>12m</td>
      <td>0.050w</td>
      <td>10.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Test and deploy web client + build desktop DMG: run full test suites, fix test timeouts, pin transitive dependencies to artifact-cached versions, root-cause buildspec bug that published empty library (tsc --noEmit failing on test files with post_build still firing publish), rewrite lib buildspec to gate publish on dist existence + republish, trigger web pipeline, resolve Vite 6 chunk-split/for-loop breakage on code editor in desktop (esnext target + inlineDynamicImports + esbuild minify), native module rebuild for Electron 41, 477 MB universal DMG signed.</td>
      <td>12h</td>
      <td>75m</td>
      <td>0.30w</td>
      <td>9.6x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Stand up admin backend as an engine proxy: JWT auth, server-side API key, full Terraform stack (load balancer rule, container registry, pipeline), frontend rewired to proxy, CORS JSON-format bug fix, end-to-end health check green.</td>
      <td>11h</td>
      <td>75m</td>
      <td>0.28w</td>
      <td>8.8x</td>
      <td>82.5x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Format-matched practice endpoint (4-option MCQ): cuts predictor calibration gap 58 to 37 percentage points.</td>
      <td>8h</td>
      <td>60m</td>
      <td>0.20w</td>
      <td>8.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Close list tool MCP coverage gap: add 4 missing tools for suggestions and invite-collaborator endpoints (40 to 44 tools).</td>
      <td>1h</td>
      <td>8m</td>
      <td>0.025w</td>
      <td>7.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Close predictor calibration gap from 31pp to 10pp via uniform-rotation practice + tighter priors + aligned exam retrieval (v24-v26 iterations).</td>
      <td>10h</td>
      <td>90m</td>
      <td>0.25w</td>
      <td>6.7x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Complete synthetic student calibration: 65-question exam generator + multi-select answering fix; student v29 passes 65q at day 90 with predicted 0.901 / actual 83.3% (8pp gap, naturally gated).</td>
      <td>14h</td>
      <td>180m</td>
      <td>0.35w</td>
      <td>4.7x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Close task tracker MCP coverage gap: add 3 missing collaborator endpoint wrappers to reach 100%+.</td>
      <td>1h</td>
      <td>15m</td>
      <td>0.025w</td>
      <td>4.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Close CRM tool MCP coverage gap: add 3 public quote wrappers (71 to 74 tools).</td>
      <td>1h</td>
      <td>15m</td>
      <td>0.025w</td>
      <td>4.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Close static site generator MCP coverage gap to 100%: add identity tool for /api/v1/me.</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.8x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>Accounting tool: add identity and health-check MCP tools to reach 111/111 endpoint coverage.</td>
      <td>0.5h</td>
      <td>12m</td>
      <td>0.013w</td>
      <td>2.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Close newsletter tool MCP coverage gap from 55 to 57 tools (100%+): add ping and identity tools.</td>
      <td>0.5h</td>
      <td>18m</td>
      <td>0.013w</td>
      <td>1.7x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>47</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>2,135.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>2,010</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>53.4</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>9,487,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>63.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>865.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The infrastructure provisioner build defines April 19. Ten sequential sessions built the tool from a blank repository to a production-deployed system spanning 58 provisionable AWS resource types, 39 inventory discoverers, 49 advisor checks, 11 compliance packs covering 97 rules, 88 real-time event patterns, and 43 MCP tools -- with 145 passing tests. Each session ran 35-60 AI minutes and produced a human-equivalent estimate of 90-160 hours, yielding leverage factors in the 150-175x range. The cumulative estimate across the ten infrastructure sessions alone is 1,290 human-hours, delivered in roughly 8 hours of AI wall-clock time. At a 1-minute supervisory cost per continuation session (the user passed a single brief continuing the previous phase), supervisory factors ranged from 5,400x to 9,600x -- the upper end of anything recorded this year. This is what happens when a well-specified design document exists before the build starts: each continuation can be initiated with a minimal prompt because the prior session&#39;s state is unambiguous.</p>
<p class="mb-4 font-light font-serif">The messaging tool (two tasks, 150x each) followed the same pattern: spec documents were written first, then the build proceeded through 14 phases in two sessions. The 200-hour human estimate on the second session reflects what it would actually cost a human engineer to take a real-time messaging platform from spec to production, including AWS infrastructure, database bootstrap, debugging, and deployment verification -- all in 80 AI minutes. That is a genuinely striking number by any standard. The 1-minute supervisory cost and 12,000x supervisory factor are correct: the entire session was initiated with a single short directive referencing the existing spec.</p>
<p class="mb-4 font-light font-serif">The mid-range tasks (25x-65x) are mostly design system work and protocol migrations. The desktop client design system migration (65.5x, 55 AI minutes, 42 screens) is a good example of AI-suited work: the transformation pattern is identical for every screen -- swap icon library, replace CSS Module classes with Tailwind utilities, swap banner component with design system primitive -- and the only variable is which screen-specific props and layout need adjusting. The desktop client parity cleanup tasks (33.3x each) handled TypeScript strictness issues and routing work that required reading existing code carefully before modifying it, which explains the shorter human estimates. The three SSE-to-WebSocket migrations (30x-36x) are textbook refactors: the transport changes but the data model and business logic do not, so the scope is bounded and predictable.</p>
<p class="mb-4 font-light font-serif">The lowest-factor tasks fall into two categories. First, iterative ML calibration: three tasks (4.7x, 6.7x, 8x) worked on a synthetic student simulator&#39;s predictor accuracy. This work is empirical. Each iteration requires running a simulation, reading numeric output, forming a hypothesis about what to change (prior weights, practice rotation, exam retrieval alignment), changing it, and running again. The AI minutes accumulate because the work is fundamentally experimental rather than compositional. You cannot predict how many iterations it takes to reduce a calibration gap from 31 percentage points to 8. The 42-task synthetic student calibration at 4.7x was 180 AI minutes against a 14-hour human estimate: the leverage is still real (a human would need days of iteration), but it is constrained by the nature of empirical debugging. Second, deployment and build debugging (9.6x, 8.8x): these tasks ran long because they were chasing pre-existing infrastructure issues -- a buildspec that published empty packages, a Vite bundler breaking on a specific code editor library with the Electron target, a CORS format bug in an existing backend. The root cause was unknown at the start of each session. Exploratory debugging does not compress as well as known-scope construction.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 865.7x is the highest of any day on record, and the primary driver is the infrastructure provisioner build. Seventeen of the 47 tasks had a 1-minute supervisory cost. Many of those were MCP coverage sweep tasks -- add 3-4 missing tools to reach 100% endpoint coverage in a given fleet tool -- where the entire brief was a single sentence. The aggregate 148 supervisory minutes for 2,135.5 human-hours of output represents a ratio of roughly 14.4 human-hours delivered per supervisory minute spent. At the other end, the 8-minute prompts (infrastructure tool design, desktop client migration, admin backend standup) reflect tasks where the scope needed explicit enumeration before the work could begin without ambiguity.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 18, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-18-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-18-leverage-record.html</id>
    <updated>2026-04-18T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-seven tasks. April 18 had two dominant themes running in parallel: building two large new tools from scratch across their full stack, and a wide content generation push to expand structured domain specifications for a free tier. The tool-building work ran in sequential phases throughout the day -- scaffolding, phase-by-phase feature addition, frontend completion, async workers, deployment -- while the content generation work ran in separate parallel sessions producing structured specification files across academic and professional subject areas. The weighted average leverage factor was 121.1x with a supervisory leverage of 1,297.7x, representing 3,043 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The gap between April 18 and April 17 (19.9x / 549.5x) is almost entirely explained by two records at the top of the table. A complete 16-phase observability tool implementation logged at 900 human-equivalent hours in 30 minutes (1,800x), and a 13-phase CRM tool build logged at 800 hours in 40 minutes (1,200x). Both represent end-to-end builds of production-ready backend and frontend systems with full test coverage and deployed infrastructure. April 17&#39;s heaviest task was a fleet-wide migration at 12x that consumed 57% of the day&#39;s AI time and dragged the weighted average down. April 18 had no comparable anchor -- even the lowest-factor tasks were in the single digits rather than low double digits, and the two flagship tasks represented enough total human-hour weight to pull the weighted average far above anything April 17 could reach.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Observability tool v1 all 16 phases: metrics ingest + PromQL-subset query engine, dashboards, logs with redaction and LogQL, traces + service map, AI log scorer and clusterer and natural language translator, alert rules and evaluator and silences, paging integrations, incidents with AI root cause analysis, SLOs and budget policy, deduped issues with issue tracker integration, cost attribution with accounting tool, anomaly detection with Welch t-test deploy impact, RUM stitching with analytics tool, postmortem scaffolding for 8 fleet clients, stdio MCP server, runbook and SLOs docs. 142 backend + 17 frontend = 159 tests green. 11 migrations. 16 commits pushed.</td>
      <td>900h</td>
      <td>30m</td>
      <td>22w</td>
      <td>1800.0x</td>
      <td>54000.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>CRM tool phases 3-15: accounts with contacts tool integration, deals with Kanban, activities with email and calendar sync, AI health and risk and next-best-action and lead scoring, marketing and newsletter automation, quotes with accounting tool integration, forecasting, outreach sequences, territories with round-robin routing, commissions with tiered accelerators, report DSL, expanded MCP server (13 tools) with 6 fleet client integrations, runbook and SLOs and importer docs. 207 backend + 53 frontend = 260 tests green. 13 migrations. 13 commits pushed.</td>
      <td>800h</td>
      <td>40m</td>
      <td>20w</td>
      <td>1200.0x</td>
      <td>24000.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Scaffolded new team messaging tool repo with four full spec documents (requirements, design, implementation plan, testing strategy) covering MCP server, webhooks, fleet integrations, and bidirectional AI session bridge</td>
      <td>80h</td>
      <td>12m</td>
      <td>2.0w</td>
      <td>400.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>CRM tool + observability tool: full frontend and remaining API routes. CRM: 5 new API routers, 7 new and expanded pages (accounts with contacts autocomplete, deals Kanban with drag-and-drop and criteria override and deal cockpit with AI panel and activity timeline and history, tasks, forecast, sequences editor, territories, commissions, reports) = 214 backend tests + 61 frontend. Observability: 10 new API routers (dashboards, logs, traces, alerts, incidents, issues, SLOs, cost, RUM and natural language translate), 10 real pages replacing placeholders (overview with live stats, dashboards with golden signals, logs with natural language and LogQL, traces with waterfall, alerts with rule editor, incidents with cockpit and AI root cause analysis and postmortem, issues, SLOs with gauges, cost, RUM with web vitals) = 153 backend tests + 21 frontend. 4 commits pushed.</td>
      <td>350h</td>
      <td>60m</td>
      <td>8.8w</td>
      <td>350.0x</td>
      <td>21000.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Scaffold CRM tool phase 1: FastAPI backend with auth chain, cache, events, models, diagnostics, Alembic, Dockerfile; Vite + React 19 frontend with design system, login page, layout, empty deals state; MCP server stub; 39 backend tests at 98% coverage, 16 frontend tests at 91%, clean TypeScript build</td>
      <td>80h</td>
      <td>17m</td>
      <td>2.0w</td>
      <td>282.4x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>CRM tool phase 2: pipelines and stages. Pipeline and stage models + Alembic migration, Pydantic criteria validator for 5 declared types, pipeline service with two-phase reorder, REST API with 404/409 translation, seed templates. Frontend pipeline settings page with seed empty state, pipeline editor with inline rename and probability and reorder and criteria dialog, stage criteria editor. 82 backend tests at 98% coverage, 52 frontend tests at 89% statement coverage, clean TypeScript build</td>
      <td>100h</td>
      <td>25m</td>
      <td>2.5w</td>
      <td>240.0x</td>
      <td>6000.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>CRM tool + observability tool: closed all non-AWS deploy gaps. Real LLM wiring with mock fallback preserved. Celery worker and beat processes for both tools with 15 total periodic tasks wired to service layer. WebSocket endpoints forwarding the event bus. OTLP-HTTP JSON receivers for observability tool (metrics, logs, traces). Docker Compose adds worker and beat sidecars. Playwright E2E scaffold with smoke tests for both apps. CRM: 223 backend tests. Observability: 163 backend tests. All green.</td>
      <td>160h</td>
      <td>45m</td>
      <td>4.0w</td>
      <td>213.3x</td>
      <td>9600.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Spec task-tracker project-share feature (contacts-tool-anchored, email and SMS invites, WebSocket real-time check/uncheck with REST fallback, embedded team-chat per project and per item) across 3 task-tracker docs and added matching guest-session and embed surface to all 4 messaging-tool docs</td>
      <td>24h</td>
      <td>10m</td>
      <td>0.60w</td>
      <td>144.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Cross-client parity audit: web client vs desktop client vs iOS client (architecture + feature matrix + gap analysis + prioritized fixes)</td>
      <td>6h</td>
      <td>4m</td>
      <td>0.15w</td>
      <td>90.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Scaffold macOS command-center app: full 4-doc set (requirements, design with Swift/Python split and IPC protocol and LLM routing, phased plan, testing strategy) spanning command bar, hover lens, rail, focus mode, orchestrator daemon, autonomous rule engine, voice stack; updated root repository map and port table</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Three-client parity implementation: wire auth client in web, desktop billing integration (purchase service), desktop offline queue and global shortcut and tray, Swift port of auth client, iOS StoreKit 2 manager and billing view, iOS APNs manager and notification service handoff, WidgetKit and App Intents and Live Activity scaffolds, desktop router extraction</td>
      <td>60h</td>
      <td>45m</td>
      <td>1.5w</td>
      <td>80.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Full readiness and security audit across 43 repositories: 12 parallel sub-agents, phase 0 canonical validation, aggregated findings report with 2 CRITICAL and 17 HIGH and 45+ MEDIUM findings</td>
      <td>20h</td>
      <td>24m</td>
      <td>0.50w</td>
      <td>49.2x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Free-tier content expansion: KaTeX and figures and timeline infrastructure in 2 repositories, guided math solver and map identification and timeline-mode activities and interactive map primitive in activities library, 33 new structured content specifications authored and validated and committed, synthesis batch kicked off</td>
      <td>80h</td>
      <td>100m</td>
      <td>2.0w</td>
      <td>48.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Author 9 free-tier grade 6-12 math and science structured content specifications (Middle School Math, Pre-Algebra, Algebra II, Statistics, Calculus I, Physical Science, Life Science, Environmental Science, Earth Systems): 60 leaf goals each, full validation pass</td>
      <td>36h</td>
      <td>45m</td>
      <td>0.90w</td>
      <td>48.0x</td>
      <td>270.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Author 6 free-tier structured content specifications for AI literacy, digital privacy, personal branding, Greek mythology, US presidents, and world geography</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>CSS Modules to Tailwind migration across 4 tools: 125 files converted</td>
      <td>60h</td>
      <td>95m</td>
      <td>1.5w</td>
      <td>37.9x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Author 5 free-tier humanities structured content specifications (Earth Science, US History, English Grammar, Philosophy 101, US Civics)</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Author 5 free-tier foundational math structured content specifications (Algebra I, Geometry, Pre-Calculus, Trigonometry, Logic and Critical Thinking)</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Rebrand all notification service email templates to current design system (shared shell, 24 templates rewritten, Alembic migration to update existing rows, new template version snapshots, product name normalized)</td>
      <td>5h</td>
      <td>9m</td>
      <td>0.12w</td>
      <td>33.3x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Author 7 free-tier grade 6-12 social studies structured content specifications (World History Ancient, Medieval, Modern; Economics Micro and Macro; Psychology 101; Sociology): 60-80 leaves each, full schema compliance</td>
      <td>28h</td>
      <td>52m</td>
      <td>0.70w</td>
      <td>32.3x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Author 5 free-tier foundational science structured content specifications (Biology, Chemistry, Physics, Anatomy and Physiology, Astronomy) with 60 validated leaves each</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Migrate observability tool telemetry tier to ClickHouse: new database client and DDL, ingest and query rewritten for metrics, logs, and traces (environment-variable-gated with PostgreSQL fallback for tests), local supporting-services container, production single-node deployment via SSM with schema bootstrap; 1,605 metric points and 3 spans arriving from fleet</td>
      <td>12h</td>
      <td>28m</td>
      <td>0.30w</td>
      <td>25.7x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Author 6 free-tier life skills structured content specifications (Personal Finance, Investing Basics, US Individual Taxes, Nutrition Fundamentals, Retirement Planning, Insurance Fundamentals): 60 leaf goals each, validated dependency graph, cross-branch prerequisites</td>
      <td>10h</td>
      <td>25m</td>
      <td>0.25w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Deploy CRM tool and observability tool to AWS production: RDS databases, ECR images, Terraform stacks, load balancer target groups, security group rules, EC2 SSM deploys, CloudFront frontends, CodePipelines green; ship observability SDK Python package and fleet instrumentation plan</td>
      <td>14h</td>
      <td>35m</td>
      <td>0.35w</td>
      <td>24.0x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Activate fleet-wide observability telemetry: custom OTLP-JSON exporter, default workspace fix, 4 services wired (auth, purchase, notification, onboarding), public RUM endpoint and browser beacon, RUM injected into 3 marketing sites, render-service Express middleware, blog posts and footer links</td>
      <td>16h</td>
      <td>40m</td>
      <td>0.40w</td>
      <td>24.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Add CRM tool and observability tool to corporate website (icons, seeded screenshots, tool pages, cards); supporting-services stack integration (Dockerfiles, compose, dashboard); observability SDK wired into 8 backbone tools</td>
      <td>18h</td>
      <td>52m</td>
      <td>0.45w</td>
      <td>20.8x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Fix all 45 MEDIUM and 7 LOW findings from same-day security audit (6 parallel agents): 7 environment example files, 7 gitignore additions, design system overhaul (sourcemap, lockfile, peer dependencies, private flag), frontend Terser config, admin linter config, worker mocks, integration marker, console simulator commit (303 deletions), 6 README drift fixes, robots.txt and sitemap.xml for 5 sites (1,003 URLs), localhost scrub from 99 rendered HTML files, architecture report commit</td>
      <td>12h</td>
      <td>35m</td>
      <td>0.30w</td>
      <td>20.6x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Activate observability telemetry fleet-wide: vendor SDK into 8 tool backends, add dependencies to 8 Dockerfiles, wire token SSM fetch into 8 deploy scripts, mint 8 service tokens and aggregate hashes into token map, fix local Docker dashboard restart</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Author 6 free-tier professional and life skills structured content specifications (Credit and Debt, Home Buying, Entrepreneurship 101, Negotiation Fundamentals, Resume and Job Search, Freelancing Basics)</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Author 8 free-tier grade 6-12 English arts and elective structured content specifications (American Lit, British Lit, World Lit, Composition, Reading Comprehension and Vocabulary, Music Theory, Art History, Film Studies): all passing 60-80 leaf validation</td>
      <td>16h</td>
      <td>55m</td>
      <td>0.40w</td>
      <td>17.5x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Author 5 free-tier life skills structured content specifications (Health and Wellness, Public Speaking, Study Skills, Computer Literacy, Typing)</td>
      <td>8h</td>
      <td>28m</td>
      <td>0.20w</td>
      <td>17.1x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Root-cause CI pipeline POST_BUILD false-failure and fix build specification with proper SSM polling loop (SSM wait caps at approximately 100 seconds while deploy takes 3-5 minutes)</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>ML engine: pass-probability predictor (Bayesian blend and Poisson-binomial), autopilot pace recommender (minutes per day to hit target date), synthetic student honors recommendation, forced-exam calibration validation</td>
      <td>12h</td>
      <td>55m</td>
      <td>0.30w</td>
      <td>13.1x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Fix all 2 CRITICAL and 17 HIGH findings from same-day security audit (8 parallel fix agents): scrub leaked API keys, commit in-flight work, rebuild 6 broken virtual environments, fix 199 frontend tests, fix 48 synthetic student test failures and 26 async errors, fix 10 web client TypeScript errors and ESLint plugin, create build specification and commit 3 dirty website trees, fix date-drift test, commit infrastructure Terraform and variable files, re-trigger engine pipeline</td>
      <td>16h</td>
      <td>90m</td>
      <td>0.40w</td>
      <td>10.7x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Fix admin tool login: repoint to fleet auth server, replace hardcoded issuer and auto-login with environment-driven auth provider and canonical login page from shared component library, hide terms and privacy links on internal auth tenant</td>
      <td>6h</td>
      <td>40m</td>
      <td>0.15w</td>
      <td>9.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>ML calibration deep-dive: per-pair predictor analysis, pace alignment investigation, blueprint-only practice mode identification, structural mismatch identified</td>
      <td>14h</td>
      <td>175m</td>
      <td>0.35w</td>
      <td>4.8x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Synthetic student simulator: gate practice exam on engine pass-probability threshold (rolling 30-question window), wire coverage co-signal, fix lesson seeding, debug to first exam trigger</td>
      <td>6h</td>
      <td>90m</td>
      <td>0.15w</td>
      <td>4.0x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>37</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>3,043.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,507.4</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>76.1</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>10,230,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>121.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>1,297.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The top two tasks define the day. Building a full observability platform -- metrics ingest, PromQL-subset query engine, dashboards, log redaction and LogQL, distributed tracing, AI-driven log clustering and anomaly detection, alert evaluation, SLO budget policy, incident management with AI root cause analysis, cost attribution, real user monitoring, and postmortem scaffolding -- represents work that would occupy a team of engineers for months. The record logs 900 human-equivalent hours completed in 30 minutes, a 1,800x factor. The CRM tool build across 13 phases (accounts, deals with Kanban, activity tracking, AI health scoring, outreach sequences, commission tiers, territory routing, report DSL, fleet integrations) logged 800 hours in 40 minutes at 1,200x. Both were built as production-ready systems with migration files, full test coverage, and deployed cloud infrastructure. That combination -- two large-scale, multi-phase full-stack builds in a single day -- is what pushes the weighted average to 121.1x from April 17&#39;s 19.9x.</p>
<p class="mb-4 font-light font-serif">The structured content generation work occupies tasks 13 through 31 of the sorted table (factors ranging from 17x to 48x) and accounts for the majority of task count but a minority of human-hour weight. Sixteen tasks produced structured content specifications across math, science, humanities, social studies, English arts, life skills, and professional development subjects. Each specification encodes 60-80 validated learning objectives in a directed acyclic graph with cross-branch prerequisite relationships. A human subject-matter expert authoring a single such specification to the same schema compliance would take two to four hours. The AI produced between 5 and 9 per session in 18-55 minutes. The factors for this category cluster between 20x and 48x because the work is structured and repetitive but requires genuine domain knowledge and schema validation at each step.</p>
<p class="mb-4 font-light font-serif">The security audit cluster (tasks 12, 27, 34) is interesting in structure. Task 12 used 12 parallel sub-agents to audit 43 repositories simultaneously, producing a findings report with severity classification. Tasks 27 and 34 then ran parallel fix agents to remediate those findings within the same day. The audit task reached 49.2x because the parallel-agent fan-out compresses calendar time dramatically -- a single-threaded audit across 43 codebases would take days of focused human effort. The CRITICAL and HIGH fix task reached only 10.7x because it ran 90 minutes with 8 parallel agents working through the most complex issues: rebuilding broken virtual environments, debugging 199 failing frontend tests, scrubbing leaked secrets, and re-triggering CI pipelines. Complex debugging work has an inherently lower leverage ceiling than greenfield scaffolding because it requires iterative investigation rather than generation.</p>
<p class="mb-4 font-light font-serif">The bottom two tasks (4.8x and 4.0x) are both ML engine and synthetic student simulator work. The calibration deep-dive ran 175 minutes investigating per-pair predictor behavior, pace alignment discrepancies, and a structural mismatch in the blueprint coverage model. Calibration investigation is the kind of work where the AI must read existing code, run experiments, form hypotheses, and iterate -- the output is understanding and a diagnosis rather than a body of generated code. The synthetic student simulator task ran 90 minutes debugging exam gating logic against a probability threshold with a coverage co-signal. These factors are low by the table&#39;s standards, but both represent weeks of engineering work on ML system behavior that would require specialized expertise in a human engineer.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 1,297.7x reflects a day where the largest tasks were initiated with very short prompts. The two 1,000x-plus observability and CRM builds each had supervisory times of 1-2 minutes: a directive specifying the tool name, the phase range, and the integration points, and the AI executed the full build. The security audit similarly ran from a half-minute prompt. The tasks with the highest supervisory times (15 minutes for the free-tier content expansion, 10 minutes for the English arts specifications) required more detailed prompts specifying the subject list, leaf count, and validation requirements. Even at 15 supervisory minutes, the content expansion task reached a supervisory factor of 320x. The 140.7 total supervisory minutes against 3,043 human-equivalent hours means every minute of human direction on April 18 produced an average of 21.6 hours of human-equivalent output.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 17, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-17-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-17-leverage-record.html</id>
    <updated>2026-04-17T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eleven tasks. April 17 had one dominant theme: a shared design system. The day started with scaffolding a unified component library, proceeded through migrating individual tools onto it in phases, and ended with all 16 fleet tools running on the shared token set. Running alongside that thread were two non-design-system tasks: extracting four independent test-prep marketing sites with full AWS infrastructure, and an innovation sweep across 52 repositories. The weighted average leverage factor was 19.9x with a supervisory leverage of 549.5x, representing 348 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">The 19.9x weighted average is the lowest of this three-day stretch, and the reason is the fleet-wide migration task (600 minutes, 12x). That single task consumed 57% of the day&#39;s AI time and pulled the weighted average down substantially. The supervisory leverage at 549.5x is the highest of the three days because the human prompt time per task was minimal even when Claude time was high.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Innovation sweep across 52 repos with parallel exploration agents, per-repo proposals and master index; plus macOS command-center design vision integrating all tools with LLM orchestration</td>
      <td>48h</td>
      <td>35m</td>
      <td>1.2w</td>
      <td>82.3x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Design system checkpoint: publish private package to artifact registry, unify animation versions, remove third-party toast library, rebuild kanban UI (board/column/card) with Tailwind, 4 CSS module files deleted</td>
      <td>11h</td>
      <td>14m</td>
      <td>0.28w</td>
      <td>47.1x</td>
      <td>165.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Scaffold 2 new tool repos with full design docs: requirements, design, implementation plan, and testing strategy per repo; updated root repo map and port table</td>
      <td>32h</td>
      <td>45m</td>
      <td>0.80w</td>
      <td>42.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Extract 4 independent test-prep marketing sites from monolith with shared-content overlay; full AWS infra per site: S3, ACM SAN cert, CloudFront, Route53, CodeBuild, CodePipeline; end-to-end deploy</td>
      <td>60h</td>
      <td>95m</td>
      <td>1.5w</td>
      <td>37.9x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Issue tracker Phase 2 finish: tailwind-ify all 26 CSS Modules; rewrote 17 component files and 9 page files; CSS bundle reduced from 75 KB to 34 KB</td>
      <td>18h</td>
      <td>34m</td>
      <td>0.45w</td>
      <td>31.8x</td>
      <td>1080.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Phase 3 list tool migration: tailwind-ify all 23 CSS Modules, swap header to library TopNav, provision CodeBuild and CodePipeline, publish design system 0.1.3 with configurable theme storage key; all unit and backend tests pass</td>
      <td>22h</td>
      <td>68m</td>
      <td>0.55w</td>
      <td>19.4x</td>
      <td>440.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Migrate web client to consume design system via shims covering all 411 imports; add issue tracker to monorepo workspace; wire Tailwind and shared tokens with dual dark-mode bridge</td>
      <td>16h</td>
      <td>65m</td>
      <td>0.40w</td>
      <td>14.8x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Design system scaffold: tokens.css with brand accent variable, Tailwind preset, generic shell and navigation components, 30 components ported, type-checks clean</td>
      <td>12h</td>
      <td>50m</td>
      <td>0.30w</td>
      <td>14.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Rewrite canonical frontend standards to match current conventions (Tailwind, design system, dual dark-mode, brand accent per tool); swap issue tracker layout header to library TopNav with brand icon</td>
      <td>5h</td>
      <td>22m</td>
      <td>0.12w</td>
      <td>13.6x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Publish design system 0.1.0 and 0.1.1 to artifact registry; unblock CI; fix peer dependency conflict by widening version range; republish 0.1.1; verified live CSS bundle contains unique animation markers</td>
      <td>4h</td>
      <td>22m</td>
      <td>0.10w</td>
      <td>10.9x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Migrate all 16 fleet tools onto shared design system: Tailwind, tokens.css, unified theme provider, publish library 0.1.4, fix React context and theme toggle bugs, push all 16 repos</td>
      <td>120h</td>
      <td>600m</td>
      <td>3.0w</td>
      <td>12.0x</td>
      <td>900.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>348.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,050</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>8.7</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>6,610,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>19.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>549.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The fleet-wide design system migration (12x, 600 minutes) defines the day&#39;s character. Migrating 16 separate tools onto a shared component library requires touching each tool&#39;s dependency configuration, wiring the theme provider, replacing local component imports with library equivalents, and verifying the build and dark-mode behavior in each. The work is highly repetitive once the pattern is established for the first tool, but each repo has its own quirks: peer dependency conflicts, module resolution paths, existing CSS that conflicts with Tailwind utilities. At 120 human-equivalent hours, the estimate reflects the realistic cost of a human engineer doing this across 16 codebases sequentially. The 12x factor is lower than the day&#39;s other tasks, but 600 minutes of AI time for what would otherwise be several weeks of migration work is still the correct trade.</p>
<p class="mb-4 font-light font-serif">The innovation sweep (82.3x) ran parallel exploration agents across 52 repositories simultaneously, produced per-repo innovation proposals, a master index, and a design vision for a macOS command-center overlay. The 35-minute runtime and 2-minute supervisory cost make the supervisory factor 1,440x, the highest single-task supervisory leverage of the day. This is the pattern where AI leverage compounds: the human writes a short directive, and the AI fans out across an entire codebase landscape to do the exploratory work that would otherwise require a week of architectural review sessions.</p>
<p class="mb-4 font-light font-serif">The test-prep site extraction (37.9x) is notable for the infrastructure scope. Extracting four sites from a monolith while provisioning independent AWS stacks per site (S3, ACM, CloudFront, Route53, CodeBuild, CodePipeline) is the kind of work that normally requires a dedicated infrastructure sprint. The 95-minute runtime included the full deploy and verification cycle.</p>
<p class="mb-4 font-light font-serif">The CSS module migrations (31.8x for the issue tracker, 19.4x for the list tool) tell a consistent story about refactoring leverage. Large CSS-to-Tailwind migrations are well-suited to AI because the transformation is mechanical: each CSS class maps to one or more Tailwind utilities, the output is deterministic, and the acceptance gate is a clean build plus visual equivalence. The issue tracker&#39;s CSS bundle dropped from 75 KB to 34 KB as a side effect of removing unused utility definitions that had accumulated in module files.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 549.5x reflects a day where most tasks were initiated with short, specific prompts. Eight of eleven tasks had supervisory times of 4 minutes or less. The 8-minute prompt for the fleet migration is the outlier and is justified: specifying which 16 repos to touch, what version of the library to target, and how to handle the theme toggle bugs required a more detailed brief than a typical task.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 16, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-16-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-16-leverage-record.html</id>
    <updated>2026-04-16T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Five tasks. April 16 was a focused day after the sprawl of April 15. The dominant theme was wiring: replacing hardcoded placeholder data with real API calls across the web client, fixing authentication edge cases, and patching gaps in the MCP test tooling. The weighted average leverage factor was 46.3x with a supervisory leverage of 320.0x, representing 112 human-equivalent hours completed in 145 minutes of AI time.</p>
<p class="mb-4 font-light font-serif">Compared to April 15&#39;s 21-task volume, April 16 reads as a cleanup and integration day. The leverage is actually higher per task (46.3x vs 37.1x) because the lower-count day had no multi-hour simulation outlier pulling the weighted average down. The single largest task, wiring 19 pages to live engine endpoints, ran at 87.3x and accounts for the majority of the day&#39;s human-equivalent output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Wire 19 pages to engine API + 4 data stores: enrollment, autopilot, initialization, auth hook; replaced all hardcoded placeholders with real endpoint calls</td>
      <td>80h</td>
      <td>55m</td>
      <td>2.0w</td>
      <td>87.3x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Sign-in view redesign: switch font to Plus Jakarta Sans, replace accent color with teal, edge-to-edge background, animated mesh blobs, staggered entrance animations</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>VelvetRope beta gate: full dark UI with animated mesh and lockout states; fix auth callback hash-fragment token acceptance; fix password reset email link; fix post-login redirect</td>
      <td>12h</td>
      <td>35m</td>
      <td>0.30w</td>
      <td>20.6x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Add 5 missing MCP tools, update cancel subscription with at<em>period</em>end, wrap MCP responses, fix all 6 YAML test cases</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Trace and fix self-referential placeholder questions in sessions; audit all 156 domain question banks; root cause in placeholder never replaced; wire session components to engine question bank API with state machine RESET event</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>112.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>145</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>2.8</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,080,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>46.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>320.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The API wiring task (87.3x) is the clearest example of what makes this category of work leverage-friendly. Nineteen pages, four data stores, all hardcoded data replaced with live endpoint calls: the scope is large but the pattern is uniform. Each page follows the same structural template (fetch, transform, render), and once the engine API surface is known, the AI applies it mechanically across every component. A human engineer would do this sequentially over days, repeatedly re-reading the API documentation and managing context-switching costs between components. The AI processes all 19 pages in a single pass.</p>
<p class="mb-4 font-light font-serif">The session question bug fix (19.2x) is interesting because it combined two distinct operations: an audit of 156 domain question banks to confirm they were clean, and a root cause diagnosis that ultimately landed on a placeholder substitution never completed in client code. The audit portion is exactly the kind of exhaustive scan that humans avoid doing thoroughly because of the time cost. The AI ran it completely, confirmed the data was clean, and then found the real bug in the client.</p>
<p class="mb-4 font-light font-serif">The VelvetRope gate and auth fixes (20.6x) bundled four separate authentication corrections into one task. Each fix was independent but related: hash-fragment token acceptance in the OAuth callback, password reset link generation, post-login redirect behavior, and the gate UI itself. A human would likely discover these sequentially during QA and file separate tickets. Running them as a batch captures the coordination overhead that normally accrues as bugs are filed, triaged, assigned, and addressed one at a time.</p>
<p class="mb-4 font-light font-serif">At 5 tasks and 112 human-equivalent hours, April 16 is the lightest day of this three-day sequence by count, but the quality of the leverage ratios is solid. No low-leverage outliers pulled the average down, and every task cleared 19x. This is what a focused, well-specified workday looks like in terms of AI leverage distribution.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 15, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-15-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-15-leverage-record.html</id>
    <updated>2026-04-15T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-one tasks. April 15 was the biggest day yet by task count: two distinct themes ran in parallel throughout the day. The first was client application work, specifically porting a large backlog of legacy pages and wiring them to real backend data stores. The second was platform infrastructure, covering a billing system rebuild, a comprehensive health monitoring tool, a shared diagnostics library rolled out to 15 services, and a suite of service-to-service authentication tokens. The weighted average leverage factor was 37.1x with a supervisory leverage of 361.6x, representing 783.5 human-equivalent hours of work.</p>
<p class="mb-4 font-light font-serif">The overall leverage factor is pulled down substantially by a single 420-minute autopilot simulation task (4.57x), which required iterative simulation cycles to validate a monotonic readiness climb across 13 simulated days. Strip that one task out and the day&#39;s leverage would look dramatically different. The client app porting tasks at 200x and 171.4x represent the upper bound for this class of work: well-understood UI patterns applied at scale against clear specifications.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Port 17 legacy UI pages to current framework with theme bridge and dark-mode fixes; 130/130 tests</td>
      <td>100h</td>
      <td>30m</td>
      <td>2.5w</td>
      <td>200.0x</td>
      <td>3000.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full parity pass: engine REST client, 8 new pages, site key gate, version checker, telemetry batcher, 95 unit + 200 end-to-end tests</td>
      <td>200h</td>
      <td>70m</td>
      <td>5.0w</td>
      <td>171.4x</td>
      <td>4000.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Purchase service Stripe rebuild: 6-plan catalog, beta coupons, comp entitlements, tokenized invite flow, comp email, 785+ tests across 4 services and 1 admin UI</td>
      <td>90h</td>
      <td>60m</td>
      <td>2.2w</td>
      <td>90.0x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Launch plan recalibration to two-phase beta; rewrote 3 planning docs; 9 blog posts, 6 LinkedIn posts, 9 Twitter threads, 9 Reddit posts; 105-asset artwork list; 7 scheduled campaigns, 2 new landing pages</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Health monitoring tool site scanner: backend crawler, 5 validators, 10 API endpoints, 8 MCP tools, 11 frontend components, 244 tests, ARM64 buildspec fix, crawled 59-page site</td>
      <td>80h</td>
      <td>80m</td>
      <td>2.0w</td>
      <td>60.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Shared diagnostics library 0.2.0: 110 tests, 11 new check categories, rolled out to all 15 tools with API key auth and tool-specific metrics</td>
      <td>56h</td>
      <td>80m</td>
      <td>1.4w</td>
      <td>42.0x</td>
      <td>840.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Health monitor add/delete site UI + fleet diagnostics viewer: 15-tool grid, per-tool drilldown, 17 MCP tools</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Comp entitlements admin UI: API client, comps page with filters and pagination, add/revoke/extend modals, billing tab rebuild, invite modal</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Wire console simulator via iframe multi-page entry; drive dashboard from real enrollment and autopilot stores</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Email client complete feature backlog: P0 web push/rule actions/refresh/image blocking, P1 budget/contacts/split-thread/density, P2 IMAP IDLE/phishing/bayesian spam/vcard import</td>
      <td>60h</td>
      <td>120m</td>
      <td>1.5w</td>
      <td>30.0x</td>
      <td>450.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Tokenized accept-invite flow in auth service: invitations table, migration, service layer, admin endpoint, GET/POST API, email template, 34 tests</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Fix blank-page SPA navigation; real lab manifest (2,048 labs) in labs page with correct routing</td>
      <td>5h</td>
      <td>12m</td>
      <td>0.12w</td>
      <td>25.0x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Full module list and real lab list visible to unenrolled users on course detail; dark-mode contrast fix</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>MCP test suite v1: manifest, 6 YAML case files, fixtures, 2 slash commands</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Service-token MCP servers: auth, notification, purchase services; svc_ Bearer tokens; SSM provisioning; 5 Stripe webhook handlers</td>
      <td>20h</td>
      <td>90m</td>
      <td>0.50w</td>
      <td>13.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Entitlement-based enrollment gating in auth service: purchase client, domain catalog, gating logic, 403 upgrade response, 12 tests</td>
      <td>6h</td>
      <td>28m</td>
      <td>0.15w</td>
      <td>12.9x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Diagnose wrong Content-Type on resume PDFs; fix static site generator MIME detection; sweep 10 production buckets fixing 27 objects</td>
      <td>4h</td>
      <td>22m</td>
      <td>0.10w</td>
      <td>10.9x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>EC2 OOM diagnosis (17 containers on 4 GB), stop/start recovery, resize instance, verify email delivery, sync new MCP servers</td>
      <td>3h</td>
      <td>22m</td>
      <td>0.075w</td>
      <td>8.2x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Auto-enroll on browse for comp users in enrollment service</td>
      <td>3h</td>
      <td>22m</td>
      <td>0.075w</td>
      <td>8.2x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Fix email client backend service-token auth chain; fix Alembic collision on shared DB via per-service version tables; deploy and verify</td>
      <td>3.5h</td>
      <td>35m</td>
      <td>0.087w</td>
      <td>6.0x</td>
      <td>70.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Autopilot Phases 2-7: P_pass fixes, entity persistence, 12 readiness-tracking iterations; validated monotonic readiness climb 0.376 to 0.559 across 13 simulation days</td>
      <td>32h</td>
      <td>420m</td>
      <td>0.80w</td>
      <td>4.6x</td>
      <td>64.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>21</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>783.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,266</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>19.6</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>7,615,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>37.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>361.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The two highest-leverage tasks were both client UI work: porting 17 legacy pages (200x) and a full parity pass with 295 tests across unit and end-to-end suites (171.4x). These scores reflect a structural advantage in UI migration work: the destination framework is known, the source behavior is documented in existing code, and the test suite provides an unambiguous acceptance gate. When all three conditions are met, AI can execute migration work at a rate that makes the &quot;hours&quot; column feel like science fiction.</p>
<p class="mb-4 font-light font-serif">The purchase service Stripe rebuild (90x) deserves mention because it touched four services and one admin UI simultaneously, produced 785 passing tests, and coordinated a coherent billing model across comp entitlements, tokenized invite flows, and email templates. A human engineer would need to context-switch between codebases sequentially; the AI holds all five service contexts at once.</p>
<p class="mb-4 font-light font-serif">The autopilot simulation task (4.57x) is the outlier in every sense. At 420 Claude minutes, it consumed one-third of the day&#39;s total AI time. The work involved iterative simulation cycles where each run validated whether readiness metrics climbed monotonically. This is the category of task that compresses least under AI leverage: the bottleneck is not code generation but simulation runtime and state-dependent iteration. The task was ultimately tabled pending a UI rebuild, meaning the 420 minutes produced validation data rather than a shipped feature.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage numbers on the top UI tasks are striking: 3,000x and 4,000x. A 2-minute and 3-minute prompt respectively produced the equivalent of months of senior engineering output. This is where the supervisory metric is most useful: it captures how little human decision time was consumed per unit of output, which is the actual cost to the person running the session.</p>
<p class="mb-4 font-light font-serif">The day&#39;s total of 783.5 human-equivalent hours amounts to roughly 20 weeks of a senior engineer&#39;s output. That figure is dominated by two tasks (the 200-hour parity pass and the 90-hour billing rebuild), but even the lower-leverage infrastructure work (diagnostics rollout, service-token auth, enrollment gating) would have occupied multiple engineers for weeks.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 14, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-14-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-14-leverage-record.html</id>
    <updated>2026-04-14T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. April 14 was a deployment and iteration day: a new shared login UI shipped to all 15 tools, fleet API uniformity finished across three remaining tools, and the autopilot ranker went through 14 iterative simulation runs to prove out Bayesian priors and entity persistence. The weighted average leverage factor was 14.2x with a supervisory leverage of 149.0x.</p>
<p class="mb-4 font-light font-serif">The 14.2x weighted average is the lowest of the three-day window by a significant margin, and the cause is clear: the autopilot ranker task consumed 420 minutes (7 hours) and produced a 5.71x leverage factor. That single task accounts for 69% of the day&#39;s total Claude time. Strip it out and the remaining six tasks run at a weighted average above 35x. The 420-minute session was not inefficient; iterating a reinforcement-style ranker through 14 live simulation runs is inherently time-intensive work, and the human estimate of 40 hours for that task is conservative.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Deploy velvet-rope login page (shared app-shell 0.1.4) across all 15 tools: package publish + per-tool package.json bump + CI/CD pushes</td>
      <td>32h</td>
      <td>25m</td>
      <td>0.80w</td>
      <td>76.8x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Course pages: add course outline + hands-on labs sections</td>
      <td>5h</td>
      <td>8m</td>
      <td>0.12w</td>
      <td>37.5x</td>
      <td>50.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Fleet API uniformity: remove legacy routes from 3 tools, fix CodeBuild INSTANCE_ID (8 instances), arm64 buildx + SSM polling propagation (14 services), fix team wiki auth security bug, force-redeploy stale containers</td>
      <td>48h</td>
      <td>90m</td>
      <td>1.2w</td>
      <td>32.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Fix exam scraper (use correct test IDs) + engine node-only entity embedding update so question-bank answers without pair ID still move proficiency</td>
      <td>10h</td>
      <td>25m</td>
      <td>0.25w</td>
      <td>24.0x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Publish shared app-shell 0.1.0 to package registry; deploy metrics tracker with app-shell migration + velvet-rope login + API URL rename</td>
      <td>4h</td>
      <td>10m</td>
      <td>0.10w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Redesign auth-service login UI with velvet-rope aesthetic (light+dark), wordmark from env var, split Docker build per deployment</td>
      <td>5h</td>
      <td>30m</td>
      <td>0.12w</td>
      <td>10.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Phase 1 autopilot ranker buildout: 17-activity catalog + Bayesian priors + plan-stale logic + entity persistence + sigmoid proficiency + 14 iterative simulation runs + exam submit response capture fix</td>
      <td>40h</td>
      <td>420m</td>
      <td>1.0w</td>
      <td>5.71x</td>
      <td>68.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>144.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>608</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>3.6</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,735,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>14.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>149.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The login page deployment (76.8x) was the most leverage-efficient task of the day. Shipping a new package version to all 15 tools required publishing to the package registry, bumping the version in 15 separate package.json files, pushing each repo through CI/CD, and verifying the deployed output. A human coordinating this across 15 repositories would spend most of a day on it. The deployment compressed into 25 minutes and produced a consistent, verified result across the fleet.</p>
<p class="mb-4 font-light font-serif">The fleet API uniformity task (32.0x) closed out a multi-day remediation effort. Removing legacy routes from three remaining tools sounds mechanical, but the associated work -- fixing CodeBuild instance ID propagation across 8 build environments, resolving arm64 cross-compilation for EC2 targets, and catching an auth bypass bug in the team wiki -- is the kind of multi-system debugging that requires holding many moving parts in context simultaneously. The 90 minutes here reflects genuine complexity, not repetitive work.</p>
<p class="mb-4 font-light font-serif">The autopilot ranker task (5.71x) stands apart from everything else on this day. The work itself covers real algorithmic ground: a 17-activity catalog with estimated difficulty and skill vectors, Bayesian prior initialization, plan-stale detection, entity embedding persistence so proficiency changes survive session boundaries, and sigmoid-shaped proficiency updates. The 14 iterative runs were not retries on a failing build; they were hypothesis tests against a live simulator. Each run produced data, the data informed the next parameter adjustment, and the process converged on a ranker that correctly sequenced activities by predicted learning efficiency. At 5.71x, the leverage factor understates the value relative to what a research-oriented human team would spend to reach the same result, since that work would also include literature review, design discussions, and multiple implementation cycles.</p>
<p class="mb-4 font-light font-serif">The day&#39;s total token count (2.735M) is high relative to the task count because the ranker session alone consumed 1.2M tokens. The remaining six tasks averaged under 130K tokens each. The supervisory leverage of 149.0x reflects that 58 minutes of human direction produced 144 hours of output -- a reasonable ratio for a day where a significant portion of the work was iterative research rather than specification-driven construction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 13, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-13-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-13-leverage-record.html</id>
    <updated>2026-04-13T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-three tasks. April 13 was dominated by two parallel workstreams: simulator iteration (debugging and running the synthetic student simulator through multi-day study journeys) and a fleet-wide standardization push (migrating all 15 tool frontends to a shared app-shell package, remediating CSS token references across the codebase, and standardizing API versioning). The weighted average leverage factor was 32.7x with a supervisory leverage of 287.6x.</p>
<p class="mb-4 font-light font-serif">The 32.7x weighted average is the lowest of the three-day window. That number is dragged down by the simulator iteration tasks, where the autonomous debugging work ran into the hundreds of minutes. The highest-leverage tasks on the day -- a 3-tier course catalog build (200.0x) and a full fleet consistency audit (200.0x) -- are obscured in the aggregate by 480 minutes spent driving the simulator through a complete end-to-end study journey. When the goal is proving that a system works in real conditions rather than building new features, the leverage math changes.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Build 3-tier course catalog for learning platform: data build script, catalog page, category pages, course detail pages, subscription detection JS. 892 total pages.</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full tools fleet consistency audit (auth, API, DB, theme, frontend) across 15 repos + canonical standards doc</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Complete fleet remediation: CSS token rename (6 tools, ~2800 refs), version upgrades (Vite 8, react-router v7, vitest 4, lucide-react 1.7), backend API versioning (3 tools dual-mounted), /api/v1/me on 9 backends, Docker standardization (9 tools), pgvector to shared services</td>
      <td>160h</td>
      <td>55m</td>
      <td>4.0w</td>
      <td>174.55x</td>
      <td>3200.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Build shared app-shell package + migrate all 15 tool frontends (auth, theme, login, FOUC, fonts, favicons): 244 test files, 0 failures</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>900.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Email client Phases 1-5: email sync, account management (PATCH endpoint, detail modal, sidebar gear), signature management (per-account, format support, compose auto-append, manager modal), contact tracker integration (proxy endpoints, service token), cache-backed search (field-level indexing, cache warm endpoint)</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Analyze service gaps across 2048 labs, build service config registry for 322 slugs, adaptive service dashboard (all cloud providers), terminal view (git/docker/k8s/cloud-shell), code editor view (Python/JS/Go/Rust/etc), enhance generic executor with code extraction, capture all 2048 screenshots</td>
      <td>80h</td>
      <td>70m</td>
      <td>2.0w</td>
      <td>68.57x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Build and run Playwright E2E tests for all 2048 console simulator labs: config, data-testid attributes, test manifest generator, guided smoke spec, watch mode spec, run full suite 2048/2048 pass</td>
      <td>24h</td>
      <td>25m</td>
      <td>0.60w</td>
      <td>57.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Fix broken simulation prompts, garbage RAG chunks, and broken UI: rewrote MCQ pipeline to use question bank loader, fix correctness detection, store factual chunks, add event IDs, fix calibration crash, fix frontend question/overview tabs</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.33x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Refactor console simulator to single generic executor: deploy all 2048 labs, create generic executor factory with UI automation, delete 290 hand-written executor files, simplify registry</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.33x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Fix 6 CSS defects in platform app (font sizes, flashcard occlusion, timed recall instability, SVG overflow). Add 26 data-testids across 7 activity components. Update 9 page object files with real selectors. Fix 4 backend bugs. Rewrite E2E test for API-driven flow. Fix 28 unit tests. 3 repos, 28 files changed.</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Add OIDC auth gating to 4 tool frontends; fix CORS SSM params; fix production API routing; audit all 14 tool frontends for auth</td>
      <td>40h</td>
      <td>55m</td>
      <td>1.0w</td>
      <td>43.64x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Fix relationship tracker UI errors, add contact creation page, group management UI, and Apple Contacts import</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Night session: ran 45-day simulation (ongoing), fixed datetime bugs, MCQ dual-variant selectors, verifier method/options bugs, tour dismissal, activity filtering. Added prompt logging with cost tracking (185 prompts). Created lab test framework (132 files, 2048 labs), engine integration tests (19 tests), telemetry capture plan.</td>
      <td>60h</td>
      <td>240m</td>
      <td>1.5w</td>
      <td>15.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Full E2E simulation: ran 30-day study journey through real app (28 days completed), fixed tour dismissal, activity card clicking, dashboard navigation, activity filtering, SSE event flow. Added prompt logging with token/cost tracking, prompt viewer page, frontend error boundary, verifier API fixes. 5 repos, 17 files changed.</td>
      <td>40h</td>
      <td>180m</td>
      <td>1.0w</td>
      <td>13.33x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Build and run full E2E simulation: fix LLM config, datetime tz bugs, flashcard click interception, exam exit flow, MCQ incorrect-answer ingestion. First successful 9-phase run: 103 questions, 96 activities, 7 min. Discovered 6 platform defects.</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.67x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Add dark mode to calendar tool and email client, fix bug reporters across 4 tools, fix health monitoring tool auth URL</td>
      <td>6h</td>
      <td>35m</td>
      <td>0.15w</td>
      <td>10.29x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Migrate time tracking tool and accounting tool frontends to shared app-shell: rewrite main.tsx, App.tsx, update package.json, index.html, API env vars, theme hooks, remove local auth/login code</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>22.5x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Autonomous simulation iteration: fixed 15+ issues across study pipeline, RAG ingestion, exam trigger, exam execution, and worker completion until synthetic student ran full study-to-exam journey end-to-end</td>
      <td>80h</td>
      <td>480m</td>
      <td>2.0w</td>
      <td>10.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Migrate marketing tool and newsletter tool frontends to shared app-shell (main.tsx, App.tsx, ThemeContext, package.json, index.html, test mocks)</td>
      <td>3h</td>
      <td>20m</td>
      <td>0.075w</td>
      <td>9.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Migrate analytics tool, email client, relationship tracker frontends to shared app-shell: rewrite main.tsx, update App.tsx, create ThemeContext re-exports, fix index.html, update package.json, fix test wrappers</td>
      <td>4h</td>
      <td>28m</td>
      <td>0.10w</td>
      <td>8.57x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Migrate list template tool, task tracker, static site generator frontends to shared app-shell</td>
      <td>6h</td>
      <td>45m</td>
      <td>0.15w</td>
      <td>8.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Remove legacy API routes from issue tracker: update main.py, MCP client (94 call sites), 21 test files (480 occurrences); fix deploy script SSM waiter; fix CodeBuild stale instance ID; fix Docker arm64 cross-compile for EC2</td>
      <td>6h</td>
      <td>45m</td>
      <td>0.15w</td>
      <td>8.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Migrate health monitoring tool and team wiki frontends to shared app-shell</td>
      <td>2h</td>
      <td>18m</td>
      <td>0.050w</td>
      <td>6.67x</td>
      <td>24.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>23</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>858.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,576</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>21.4</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>6,464,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>32.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>287.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The fleet standardization work tells a clear story at the top of the table. The shared app-shell package (160.0x) established a single source of truth for auth, theming, login UI, FOUC prevention, fonts, and favicons across all 15 tool frontends -- 244 test files, zero failures on first integration. The follow-on fleet remediation task (174.55x) renamed approximately 2,800 CSS token references across 6 tools, upgraded four major dependencies, standardized API versioning across nine backends, and migrated vector search to shared services. These two tasks together consumed 100 minutes of Claude time and account for an estimated 280 hours of human-equivalent work.</p>
<p class="mb-4 font-light font-serif">The 3-tier course catalog build (200.0x) and the fleet consistency audit (200.0x) are the leverage leaders for the day despite their relatively modest human estimates of 40 hours each. Both completed in 12 minutes. The catalog produced 892 pages from a data build script feeding three Jinja templates; the audit produced a canonical standards document covering auth, API contracts, database conventions, theming, and frontend structure across 15 repositories. Both are the kind of task that a human engineer would block significant time for and still produce a narrower result.</p>
<p class="mb-4 font-light font-serif">The simulator iteration work accounts for roughly 1,100 of the 1,576 total Claude minutes logged on April 13. Three tasks -- the 30-day journey run, the 45-day night session, and the autonomous end-to-end iteration -- together represent 900 minutes of active debugging against a live system. The leverage factors (13.33x, 15.0x, 10.0x) look low compared to the rest of the table, but the human estimates on these tasks are large: debugging a simulated student pipeline across RAG ingestion, exam trigger logic, exam execution, and worker completion would require substantial human time and a deep understanding of the system. The low factors reflect the iterative nature of the work, not a failure of the approach.</p>
<p class="mb-4 font-light font-serif">The individual frontend migrations (6.67x to 10.0x) sit at the bottom of the table. Each one involved the same mechanical pattern applied to a different tool: rewrite main.tsx, update App.tsx, re-export ThemeContext, fix index.html. The migrations are low-leverage individually because each instance is small. Considered as a batch, however, migrating all 15 tools consumed roughly 3 hours of Claude time and replaced what would have been two or three weeks of coordinated frontend work.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage at 287.6x reflects that 179 minutes of human direction -- spread across 23 tasks -- produced 858 hours of output. The ratio is lower than April 12 because the simulator iteration sessions required more active human supervision: observing runs, identifying failure modes, and directing the next debugging pass.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 12, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-12-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-12-leverage-record.html</id>
    <updated>2026-04-12T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-seven tasks. April 12 was a construction day: a full team wiki built and deployed to production, a synthetic student simulator implemented end-to-end, a notification service shipped across four repos, and a suite of MCP servers created for infrastructure tooling. That structural work was surrounded by a security audit spanning 57 repositories (including finding and patching a live API key leak in a deployed bundle), two comprehensive E2E student journey tests, a full readiness audit, and a wave of website and infrastructure tasks. The weighted average leverage factor was 119.5x with a supervisory leverage of 524.0x.</p>
<p class="mb-4 font-light font-serif">Twelve hundred hours of human-equivalent work across a single calendar day. The top two tasks alone -- the team wiki full build and the synthetic student simulator implementation -- account for 640 of those hours and together required 110 minutes of Claude time. By comparison, the lowest-leverage task on the board was an 11-minute readiness audit at 10.91x, which is still a solid return. April 12 was the most productive raw-output day of the week by a wide margin.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Implement synthetic student simulator: full backend (RAG brain, decay model, LLM answerer, warm-start seeder, feedback ingestor), 16 Playwright page objects, worker subprocess + orchestrator, verification protocol, FastAPI REST+SSE API, React 19 real-time dashboard, visual audit, unit tests. 84 files, 12,850 LOC.</td>
      <td>160h</td>
      <td>20m</td>
      <td>4.0w</td>
      <td>480.0x</td>
      <td>4800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Team wiki full build + production deploy: 64 Python files (14 models, 12 services, 15 route files, 93 MCP tools), 31 TypeScript files (9 pages, 9 components, 5 stores, API client), full infrastructure stack (ECR, CodePipeline x2, CodeBuild x2, ALB, CloudFront, S3, Route53 x2, IAM, SSM, RDS), 23 backend tests passing, 4 frontend tests passing, TypeScript clean</td>
      <td>480h</td>
      <td>90m</td>
      <td>12w</td>
      <td>320.0x</td>
      <td>5760.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Team wiki technical design doc (14 ORM models, 12 services, 9 integrations, MCP server, WebSocket, frontend architecture) + comprehensive testing strategy (774 tests: 538 backend, 141 frontend unit, 95 E2E Playwright covering every CRUD operation)</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Comprehensive test suite for synthetic student simulator: 576 tests across 19 test files, coverage 9% to 82%. Brain tests, API+services tests, worker tests (all 17 page objects).</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Team wiki tool: repo creation, comprehensive requirements doc with data models, API design, 90 MCP tools, 9 tool integrations, frontend spec, deployment config</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Synthetic student simulator backend foundation: 4 student profiles, config, SQLAlchemy models, SSE events, brain types/prompts/decay/RAG brain/ingestor/seeder/answerer (18 files total)</td>
      <td>12h</td>
      <td>5m</td>
      <td>0.30w</td>
      <td>144.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Team wiki phased build plan: 10 phases from scaffolding through production hardening, infrastructure provisioning, all 774 tests mapped to phases, deployment verification checklist, risk mitigations</td>
      <td>24h</td>
      <td>10m</td>
      <td>0.60w</td>
      <td>144.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Notification service: dual API key auth, MCP server (20 tools), auth-service integration, admin Notifications UI (TipTap editor, send dialog, template list), SSM infrastructure, buildspec updates, tests (473 passing), four docs, deploy to prod across 4 repos</td>
      <td>80h</td>
      <td>35m</td>
      <td>2.0w</td>
      <td>137.14x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Lab testing framework scaffold: generator, base class, conftest, 132 test files covering 2048 labs</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Create synthetic student simulator repo scaffold with comprehensive docs suite (requirements, design, technical strategy, IP analysis, CLAUDE.md, README.md), initialize git, create repo, update root docs</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Create compliance-audit doc (SOC 2/GDPR/CCPA) with 12 sections covering all 20 gaps from compliance readiness plan, wire into full readiness audit</td>
      <td>6h</td>
      <td>5m</td>
      <td>0.15w</td>
      <td>72.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Launch recalibration + full marketing tool setup (brand voice, segments, landing pages, experiments, reports, campaigns) + MCP schema fixes + landing page DB migration + LLM key provisioning + static site generator integration</td>
      <td>40h</td>
      <td>35m</td>
      <td>1.0w</td>
      <td>68.57x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Debug auth services, fix JWT key permissions + buildspec quoting, fix calendar tool health endpoint, deploy health monitoring tool, create 4 MCP servers (relationship tracker/health monitor/calendar tool/email client), update service dashboard with MCP tab, provision infrastructure, generate service tokens, update CORS origins</td>
      <td>40h</td>
      <td>35m</td>
      <td>1.0w</td>
      <td>68.57x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Build Timeline page for simulator frontend with proficiency chart, activity timeline, and event detail modal</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Enterprise website content expansion: Origin and Compliance pages with nav/footer/homepage updates</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Purchase service: API key auth, MCP server (9 tools), 33 new unit/integration tests, E2E Playwright suite, enhanced seed data, admin endpoint fix</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.33x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Comprehensive E2E student journey test: CLF to SAA-C03 with 7 phases (onboarding, 5 activity modes x3 rounds, sick day decay, recovery, practice exam, readiness check)</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Close onboarding roadmap refresh gaps: engine proficiency-summary endpoint, refresh handler with live reranking and mastery pruning, 10 tests</td>
      <td>12h</td>
      <td>15m</td>
      <td>0.30w</td>
      <td>48.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Convert client React template to static site generator (10 components, full single-page site with 9 sections)</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Convert second client React site to static site generator</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Create health monitoring tool MCP server (config, client, server with 17 tools, requirements, venv)</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Create complete relationship tracker MCP server (57 tools) with config, client, server, requirements, and venv</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Full readiness audit + security audit + ecosystem inventory: 57 repos, 10,305 tests, 1 CRITICAL fixed (live API key leak), 8 total defects repaired</td>
      <td>40h</td>
      <td>56m</td>
      <td>1.0w</td>
      <td>42.86x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Comprehensive E2E student journey: 16-step tour, 5 activity modes, 75 activities, sick day simulation, exam, visual audit (29 issues found), tour update with 8 new features, proxy fix</td>
      <td>40h</td>
      <td>60m</td>
      <td>1.0w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Full security audit across 57 repos: 27 checks, 6 sections, secrets detection, dependency security, source maps, prod config safety, infrastructure security, build security</td>
      <td>8h</td>
      <td>20m</td>
      <td>0.20w</td>
      <td>24.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Write website specification (332-line site prompt with 6 case studies)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Deploy main marketing site to staging and production</td>
      <td>1h</td>
      <td>3m</td>
      <td>0.025w</td>
      <td>20.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Write client website specification (military palette)</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Audit all websites for 200s: fix S3 Block Public Access + enterprise DNS A record</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Standardize leadership sections, sync CSS, fix branding across all templates, add About to desktop nav across 3 websites</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Wire auth-service login/register URLs into marketing site header + pricing</td>
      <td>0.5h</td>
      <td>2m</td>
      <td>0.013w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Fix Block Public Access on 4 client sites</td>
      <td>0.5h</td>
      <td>2m</td>
      <td>0.013w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Add tabbed directory/launch page to service dashboard with tool icons, production URLs, and 7 website sections</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Create client site static site scaffold</td>
      <td>0.5h</td>
      <td>2m</td>
      <td>0.013w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Tear down decommissioned domain (S3 + CloudFront + Route 53 + zone)</td>
      <td>1h</td>
      <td>5m</td>
      <td>0.025w</td>
      <td>12.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Fix personal site SiteName mismatch + deploy 72-page staging</td>
      <td>0.75h</td>
      <td>4m</td>
      <td>0.019w</td>
      <td>11.25x</td>
      <td>22.5x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Full readiness audit: services + libraries (5 repos), fix auth-client test mocks and bug-reporter build</td>
      <td>2h</td>
      <td>11m</td>
      <td>0.050w</td>
      <td>10.91x</td>
      <td>40.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>37</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1,222.75</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>614</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>30.6</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,129,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>119.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>524.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The top two tasks by leverage factor both involved building complete systems from scratch rather than iterating on existing ones. The synthetic student simulator implementation (480.0x) covered 84 files and 12,850 lines of code across backend brain types, Playwright page objects, a worker orchestrator, and a React dashboard -- all in 20 minutes. The team wiki full build (320.0x) was even larger in scope: 95 files, a full AWS infrastructure stack, and 27 tests passing on first deploy. These numbers reflect a specific pattern: when a system is designed completely before the build session starts, implementation becomes nearly mechanical.</p>
<p class="mb-4 font-light font-serif">The security audit cluster is worth separating out. Three related tasks appear on this day: a focused five-repo readiness audit (10.91x), a 27-check security audit across 57 repos (24.0x), and a combined readiness plus security plus ecosystem inventory task (42.86x). The variance in leverage across these three tasks reflects scope and time invested, not task difficulty. The combined task found and patched a live API key leak in a deployed JavaScript bundle -- a finding that would take a human security engineer hours to locate through manual review. The AI found it in the first pass.</p>
<p class="mb-4 font-light font-serif">The notification service (137.14x) is representative of the day&#39;s mid-tier structural work: a complete microservice with MCP integration, a React admin UI with a rich text editor, infrastructure updates, and 473 passing tests, all shipped to production across four repositories in 35 minutes. The purchase service (53.33x) followed a similar pattern. These are not toy implementations; they are production services with real authentication, test coverage, and CI/CD pipelines.</p>
<p class="mb-4 font-light font-serif">The lowest-leverage tasks cluster around infrastructure operations: S3 policy fixes, domain teardowns, and site scaffolding. These sit in the 11-16x range not because AI struggles with them but because the tasks themselves are small. A 2-minute task with a 0.5-hour human estimate will always produce a modest absolute leverage number regardless of how well the AI performs.</p>
<p class="mb-4 font-light font-serif">At 524.0x supervisory leverage, the day compressed roughly 30 working weeks of human-equivalent effort into interactions that required less than two and a half hours of human direction.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 11, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-11-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-11-leverage-record.html</id>
    <updated>2026-04-11T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Forty-two tasks. April 11 was an audit and hardening day. The work split roughly into three clusters: a comprehensive multi-repo deployment readiness and security audit sweep (57 repos, 72 findings, 65+ fixes including a python-jose-to-PyJWT migration across 46 files), a set of issue tracker fixes and feature additions, and a large-scale porting of a learning platform React SPA to static HTML via the static site generator (777 pages total). A batch of verification audits across library, client, tool, and website repos rounded out the session. The day had no phase-based product builds; it was predominantly quality assurance, remediation, and ship-readiness work.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 124.5x with a supervisory leverage of 705.3x. Total human-equivalent work was 332 hours.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full deployment readiness + security audit across 57 repos: 72 findings identified, 65+ fixed (test failures, port conflicts, missing deps, .gitignore gaps, python-jose replacement, dirty trees, doc drift)</td>
      <td>80h</td>
      <td>18m</td>
      <td>2.0w</td>
      <td>266.7x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full security audit across all 57 repos: secrets, deps, infra, build, CORS, SSL</td>
      <td>16h</td>
      <td>4m</td>
      <td>0.40w</td>
      <td>240.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full security audit across all 57 repos (secrets, deps, source maps, prod config, AWS infra, build security)</td>
      <td>16h</td>
      <td>5m</td>
      <td>0.40w</td>
      <td>192.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>7-client verification audit: git status, ESLint, TypeScript, API endpoints, test scripts, README, feature parity matrix</td>
      <td>4h</td>
      <td>2.5m</td>
      <td>0.10w</td>
      <td>96.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Verification audit of all 10 library repos: git status, build/test, exports, peerDeps, lock files, metadata, README, .gitignore</td>
      <td>3h</td>
      <td>2m</td>
      <td>0.075w</td>
      <td>90.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Port learning platform React SPA to static site generator: extracted rendered HTML from 26 pages via Playwright, compiled Tailwind CSS, ported all feature/product/editorial pages with exact fidelity, 777 pages total (720 domain + 27 category + 30 editorial)</td>
      <td>80h</td>
      <td>55m</td>
      <td>2.0w</td>
      <td>87.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Deployment readiness audit of all 10 library repos (12 checks each)</td>
      <td>4h</td>
      <td>3m</td>
      <td>0.10w</td>
      <td>80.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Full readiness + security audit: 48 repos, 10,241 tests, python-jose-to-PyJWT migration (46 files), .gitignore fixes (22 repos), docs fixes, lock files, 79 total files fixed across 33 repos</td>
      <td>40h</td>
      <td>37m</td>
      <td>1.0w</td>
      <td>64.9x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Deployment readiness audit on 3 client repos (origin console, credential system web, enterprise web): git, ESLint, TypeScript, URLs, tests, README, parity matrix</td>
      <td>3h</td>
      <td>3m</td>
      <td>0.075w</td>
      <td>60.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Deployment readiness audit on 4 client repos (web, electron, iOS, admin)</td>
      <td>3h</td>
      <td>3m</td>
      <td>0.075w</td>
      <td>60.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Issue tracker fix: move bug report FAB to bottom-center to stop colliding with theme toggle</td>
      <td>2h</td>
      <td>2m</td>
      <td>0.050w</td>
      <td>60.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Issue tracker fix: calibration empty-state hint when Upload &amp; Analyze tapped without resume</td>
      <td>1.5h</td>
      <td>2m</td>
      <td>0.037w</td>
      <td>45.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Issue tracker fix: calibration page empty-state hint for missing resume upload</td>
      <td>0.75h</td>
      <td>1m</td>
      <td>0.019w</td>
      <td>45.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Verification audit: infra, domains, 8 websites, 3 legacy, audits repos</td>
      <td>1.5h</td>
      <td>2m</td>
      <td>0.037w</td>
      <td>45.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Deployment readiness audit across all 8 website repos: git status, trademarks, localhost, SEO, README, buildspec checks</td>
      <td>2h</td>
      <td>2.5m</td>
      <td>0.050w</td>
      <td>48.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Issue tracker fix: column delete not disappearing immediately (optimistic + rollback + toast)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Learning platform course page template: 6 fixes (category link, quiz rename, outline bullets, Python Sandbox labeling, clickable lab modal, scope single-col)</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td>40.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Infrastructure security: ALB TLS 1.2+ upgrade, ElastiCache transit encryption config, S3 public access blocks on 20 buckets</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Deployment readiness audit of 4 service repos (auth, notification, onboarding, purchase)</td>
      <td>1.5h</td>
      <td>2.5m</td>
      <td>0.037w</td>
      <td>36.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Fix CRITICAL + LOW audit findings: CloudFront admin auth re-enabled (Terraform), canonical numbers updated, 8 doc dates refreshed, traceability matrix format standardized, enterprise web deprecated calls + array guards fixed</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Issue tracker feature: icons, colors, and card counts on project/board cards (backend + frontend)</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>5-tool verification audit: patent browser, list template tool, task tracker, accounting tool, static site generator - git status, backend tests, frontend tests, vitest config, port consistency, README completeness</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Issue tracker fleet housekeeping: fetched all 31 boards, created 3 detailed cards, renamed 9 tool boards to capitalized names</td>
      <td>0.75h</td>
      <td>6m</td>
      <td>0.019w</td>
      <td>7.5x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Issue tracker feature: board/subproject actions menu on project page card grid</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Fix health monitoring tool port conflict, calendar tool port inconsistency, verify accounting tool async tests</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>18.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Static site generator bundled_effects library (particles, reveal, stagger, magnetic, countup) with site.yml opt-in, wire into build pipeline, restore interactive effects on a product website</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Issue tracker fix: assignee selection not appearing in textbox (boardCard vs fullCard)</td>
      <td>1h</td>
      <td>3m</td>
      <td>0.025w</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Issue tracker feature: visible insert indicator while dragging a column</td>
      <td>1h</td>
      <td>3m</td>
      <td>0.025w</td>
      <td>20.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Fix documentation count mismatches across 6 repos (engine test/endpoint counts, architecture subsystem/endpoint counts, architecture-client section ref, domains synthesis count, task tracker ports, patent browser vitest glob)</td>
      <td>1h</td>
      <td>3m</td>
      <td>0.025w</td>
      <td>20.0x</td>
      <td>12.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Verification audit of 5 tool repos (issue tracker, metrics tracker, marketing tool, newsletter tool, time tracking tool): git status, backend tests, frontend tests, vitest config, port consistency, README completeness</td>
      <td>3h</td>
      <td>7m</td>
      <td>0.075w</td>
      <td>25.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>7-tool verification audit: git status, backend tests (5 suites), frontend tests (5 suites), vitest config, port consistency, README completeness</td>
      <td>3h</td>
      <td>7m</td>
      <td>0.075w</td>
      <td>25.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Issue tracker fix: 3-dot menu on project/board appearing under nav bar (portal + fixed positioning)</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Integrate analytics tool into static site generator build pipeline (create 18 analytics sites, add config to config manager + post-render injector, wire up 9 site.yml files, rebuild 5 sites)</td>
      <td>12h</td>
      <td>45m</td>
      <td>0.30w</td>
      <td>16.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Issue tracker fix: 13 failing auth tests - thread Request through get<em>current</em>user calls</td>
      <td>0.75h</td>
      <td>4m</td>
      <td>0.019w</td>
      <td>11.25x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Fix onboarding service missing resumeparser dependency and enterprise web URL misconfigs</td>
      <td>0.75h</td>
      <td>3m</td>
      <td>0.019w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Issue tracker fix: column delete not disappearing immediately (optimistic + rollback + toast)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Fix 34 test failures across time tracking tool (9 frontend), analytics tool (9 frontend), and static site generator (16 backend)</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Commit 12 dirty repos and push 20 repos across platform monorepo</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>12.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Fix onboarding service coverage (63% to 88%) with 3 test files, update docs across 5 repos (engine endpoints, health monitoring tool ports, domain count, patent count, static site generator ports)</td>
      <td>4h</td>
      <td>10m</td>
      <td>0.10w</td>
      <td>24.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Fix frontend accessibility test failures across marketing tool, metrics tracker, and relationship tracker (aria-labels, API mock structure, defensive array guards, heading order)</td>
      <td>2h</td>
      <td>10m</td>
      <td>0.050w</td>
      <td>12.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Analytics tool single-tenant refactor: drop per-user ownership filters from sites/goals/funnels/milestones/tests/reports endpoints, fixing empty-frontend bug where MCP-created sites were invisible to OIDC users</td>
      <td>3h</td>
      <td>15m</td>
      <td>0.075w</td>
      <td>12.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Fix ESLint errors and vitest-axe TypeScript issues across 6 client repos</td>
      <td>2h</td>
      <td>12m</td>
      <td>0.050w</td>
      <td>10.0x</td>
      <td>24.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>42</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>332</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>367.5</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>8.3</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,930,250</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>124.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>705.3x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s highest-leverage task was the combined deployment readiness and security audit (266.7x): 57 repositories scanned, 72 findings categorized, and 65+ fixes applied in an 18-minute session. The fixes included replacing python-jose with PyJWT across 46 files (a security-motivated library migration), closing .gitignore gaps in 22 repos, fixing failing test suites, resolving port conflicts, and correcting documentation drift. A human engineer running the same audit sequentially would spend approximately two weeks just cataloging findings before beginning remediation. The AI completed both phases in one pass because it can hold the full repo inventory in context and apply pattern-matched fixes without context switching between repos.</p>
<p class="mb-4 font-light font-serif">The learning platform SPA port (87.3x) represents a distinct class of work: 777 static pages generated from a live React application by extracting rendered HTML with Playwright, compiling the Tailwind CSS tree, and porting 26 page designs to the static site generator&#39;s template system with exact visual fidelity. The 80 human-hour estimate reflects the manual effort of inspecting live component output, tracing CSS dependencies, and building template files page by page. At 55 minutes of Claude time, this task would not have been feasible as a human effort without a dedicated team and a week of calendar time.</p>
<p class="mb-4 font-light font-serif">The issue tracker work (fixes and features combined: roughly 12 tasks) produced the day&#39;s lowest leverage numbers, consistently in the 10-20x range. Each fix was a focused, self-contained bug: a z-index stacking issue on a dropdown menu, optimistic delete not propagating correctly, a FAB position conflict with the theme toggle, auth test failures caused by missing Request threading. These tasks are small by design; the low leverage factor is proportional because the human estimate for each is also small (0.75h-2h). The absolute time savings are modest, but the pattern holds: interactive debugging of UI behavior compresses less than specification-driven feature generation.</p>
<p class="mb-4 font-light font-serif">The test-fixing tasks (10.0x-15.0x) reflect the same pattern seen across adjacent days. ESLint configuration errors, vitest-axe TypeScript type augmentation gaps, and aria-label mismatches in mock API responses all require iterative diagnosis. The AI finds the root cause quickly, but the fix-test-verify loop still takes multiple minutes per repo. At 12 minutes for 6 repos of ESLint/TypeScript cleanup, the 10.0x factor is reasonable for that class of work.</p>
<p class="mb-4 font-light font-serif">At 124.5x weighted average, April 11 sits between the two adjacent days in leverage but produced work of a different character: all three of the 100x+ tasks were audits or large-scale transformations rather than greenfield feature builds. The supervisory leverage of 705.3x is consistent with April 9&#39;s 709.5x, reflecting that audit sweeps and porting tasks are initiated with very brief prompts and run largely unattended.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 10, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-10-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-10-leverage-record.html</id>
    <updated>2026-04-10T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. April 10 was the lowest-volume day of the three-day stretch, but the character of the work was qualitatively different from the prior day&#39;s phase-by-phase builds. The session covered a large-scale website migration (five sites, 84 pages), a security architecture change removing mutual TLS from the tools fleet and replacing it with a WAF, accessibility finalization across 22 React repos, four separate AI-driven product innovations, a static site build for a legacy domain, a round of issue tracker fixes, and a corporate website HTML repair. The two longest tasks in terms of Claude time (120 minutes and 155 minutes) both involved multi-service, multi-repo coordination with external dependencies.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 112.7x with a supervisory leverage of 1,352.9x. Total human-equivalent work was 298 hours across 7 tasks.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Four radical innovations: list template tool gallery (30 templates, 6 categories); static site generator auto-linking via semantic embeddings (46 tests); accounting tool LLM auto-categorization for bank transactions; newsletter tool AI A/B subject line testing (toggleable, full lifecycle)</td>
      <td>120h</td>
      <td>32m</td>
      <td>3.0w</td>
      <td>225.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Accessibility final completion: all 22 React repos passing axe tests with 49 total tests + 20 per-activity tests + 6 real WCAG violations discovered and fixed</td>
      <td>40h</td>
      <td>40m</td>
      <td>1.0w</td>
      <td>60.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Issue tracker fix: create a legacy domain static site via static site generator - 786 files, 8 content pages, full template set, 720 domain data files, SCSS design system</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Repair corrupted HTML on 14 corporate website tool pages: restore feature cards from git history, fix section nesting, move accessibility groups, build and deploy</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Migrate 5 websites to static site generator (list template, credential system, enterprise, corporate, product site - 84 pages including React SPA teardown)</td>
      <td>65h</td>
      <td>155m</td>
      <td>1.6w</td>
      <td>25.2x</td>
      <td>650.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Issue tracker fixes: triage board replaces bug reports board, sidebar state persistence, project rename/archive/delete UI, create-dedup in reducer, card detail modal loading fallback, vitest-axe type augmentation for CI</td>
      <td>11h</td>
      <td>29m</td>
      <td>0.28w</td>
      <td>22.8x</td>
      <td>220.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Remove mTLS from tools fleet: disable ALB mTLS, add WAF (3 rules), strip MCP configs, fix static site generator crash (missing wheel), fix accounting tool diagnostics + config + DB, remove probeUrl from 5 frontends, fix newsletter tool JWT kid matching, fix newsletter tool port conflict, fix 3 frontend TypeScript type errors</td>
      <td>40h</td>
      <td>120m</td>
      <td>1.0w</td>
      <td>20.0x</td>
      <td>160.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>298</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>398</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>7.5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,066,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>112.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>1,352.9x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The four-innovations task (225.0x) was the standout. Four separate AI-native features were designed and implemented in 32 minutes across four different codebases: a template gallery with 30 curated items across 6 categories for the list template tool; an auto-linking engine for the static site generator that uses semantic embeddings to detect and inject cross-page links (with 46 tests); an LLM-based transaction auto-categorization system for the accounting tool; and a full A/B subject line testing feature for the newsletter tool including a lifecycle manager, toggleable activation, and persistent result tracking. Each of those represents a complete feature, not a prototype. The 120 human-hour estimate reflects what a product engineering team would budget across those four independent efforts.</p>
<p class="mb-4 font-light font-serif">The mTLS removal (20.0x) and the website migration (25.2x) were the day&#39;s lowest-leverage tasks, and both for the same reason: both required navigating real infrastructure state rather than generating code from a specification. Removing mTLS from a live fleet means verifying each service&#39;s behavior at each step (disable, redeploy, test connectivity, verify WAF rules, check dependent services). The website migration ran 155 minutes because 84 pages across 5 sites with varying template structures, asset pipelines, and deployment configurations required iterative attention rather than bulk generation.</p>
<p class="mb-4 font-light font-serif">The accessibility finalization task (60.0x) closed the multi-day WCAG 2.1 AA remediation thread that started on April 9. At 40 minutes of Claude time and 22 repos in scope, it produced a complete pass: 49 axe test files, 20 per-activity coverage tests, and 6 genuine WCAG violations found and fixed in production components. The supervisory leverage on this task was 1,200x because the entire audit-and-fix sequence was initiated with a two-minute prompt referencing the prior day&#39;s tier-2 remediation output.</p>
<p class="mb-4 font-light font-serif">At 7 tasks and a weighted leverage of 112.7x, April 10 was the lowest-output day of the three. The infrastructure-heavy character of the session is directly reflected in the leverage numbers: two of the three lowest factors belong to tasks where iterative external state validation was unavoidable. The supervisory leverage of 1,352.9x is the highest of the three days because several long-running tasks were initiated with short, high-trust prompts referencing prior session context rather than detailed new specifications.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 09, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-09-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-09-leverage-record.html</id>
    <updated>2026-04-09T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Sixty-one tasks. April 9 was the biggest single-day output of the week by task count, and the work was dominated by two parallel sprint tracks: the full-phase build-out of three fleet tools (a calendar tool, an email client, and a relationship tracker) from foundation through final polish, and a multi-tier accessibility remediation effort spanning 38 UI repos. The accessibility work alone produced two audit documents and two remediation passes covering 629 identified issues. The fleet tool work covered all phases of each product from database modeling through MCP servers and CI/CD. A number of records are duplicates from re-logged planning sessions; they are included as logged.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 154.9x with a supervisory leverage of 709.5x. Total human-equivalent work represented 2,080 hours, or roughly 52 weeks of a single engineer&#39;s time delivered in one day.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Email client Phase 5: compose and send - Markdown pipeline, MIME, drafts, attachments, undo-send, CodeMirror</td>
      <td>80h</td>
      <td>14m</td>
      <td>2.0w</td>
      <td>342.9x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Email client Phase 4 (alt log): core client - threaded conversations, virtualized list, labels/folders CRUD, batch ops (14 action types), unified inbox, density modes, 295 backend + 81 frontend tests</td>
      <td>72h</td>
      <td>14m</td>
      <td>1.8w</td>
      <td>308.6x</td>
      <td>864.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Email client Phase 11: RAG intelligence layer - 12 sub-phases, embeddings, semantic search, commitments, follow-ups, auto-draft, summaries, briefings, thread linking, knowledge, sentiment, attachments, suggested rules</td>
      <td>120h</td>
      <td>25m</td>
      <td>3.0w</td>
      <td>288.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Calendar tool Phase 5: calendar provider sync - 5 providers, sync engine, conflict resolution, OAuth, webhooks</td>
      <td>80h</td>
      <td>18m</td>
      <td>2.0w</td>
      <td>266.7x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Email client Phase 3 (alt log): sync engine state machine, thread service (4-step assignment), Redis cache service, Celery workers, webhook handlers, 288 total tests</td>
      <td>56h</td>
      <td>14m</td>
      <td>1.4w</td>
      <td>240.0x</td>
      <td>672.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Write comprehensive testing strategies for calendar tool, email client, and relationship tracker - unit, integration, and E2E Playwright tests with 80%+ coverage targets</td>
      <td>48h</td>
      <td>15m</td>
      <td>1.2w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Relationship tracker Phase 1 Foundation: 26 database tables, dual auth, AES-256-GCM encryption, contact CRUD service, fleet lookup endpoints, frontend contact list, 169 tests</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Relationship tracker Phase 1 Foundation (alt log): 26 tables, dual auth (JWT + svc_), AES-256-GCM encryption, Mackay 66 contact CRUD, fleet endpoints, frontend contact list, 169 tests at 92% coverage</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Email client Phase 2: 4 email provider adapters (Gmail, JMAP, Graph, IMAP), OAuth flows, identities/signatures APIs, provider registry, frontend account setup + sidebar account switcher, 189 backend + 36 frontend tests</td>
      <td>56h</td>
      <td>18m</td>
      <td>1.4w</td>
      <td>186.7x</td>
      <td>672.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Email client Phase 2 (alt log): 4 email provider adapters (Gmail, JMAP, Graph, IMAP), OAuth flows, identities/signatures CRUD, account setup UI, 225 total tests</td>
      <td>56h</td>
      <td>18m</td>
      <td>1.4w</td>
      <td>186.7x</td>
      <td>672.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Relationship tracker Phase 12 FINAL: polish, CI/CD, responsive, keyboard shortcuts, external sync, error boundaries</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Write phased implementation plans for calendar tool (10 phases), email client (14 phases), and relationship tracker (12 phases) with file-level specificity</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Calendar tool Phase 6: calendar sets, availability, openings/booking, proposals/voting, rate limiter, public pages</td>
      <td>48h</td>
      <td>18m</td>
      <td>1.2w</td>
      <td>160.0x</td>
      <td>576.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Email client Phase 6: full rules engine - 13 operators, 16 fields, 20 actions, nested AND/OR, pipeline, retroactive run, 113 new tests</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Calendar tool Phase 7: weather, search, iCal import/export, subscriptions, notifications, timezone card</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Relationship tracker Phase 8: AI features - enrichment, briefings, starters, duplicates (Jaro-Winkler), insights, reminders, merge, 8 Celery tasks, 171 new tests</td>
      <td>60h</td>
      <td>22m</td>
      <td>1.5w</td>
      <td>163.6x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Calendar tool Phase 3: NLP parser (12-stage + LLM fallback), recurring event engine (RRULE expansion, single/future/all scope), templates, attachments, drag-and-drop hook, EventDetail panel - 41 files, 5,127 LOC, 244 backend + 175 frontend tests</td>
      <td>48h</td>
      <td>22m</td>
      <td>1.2w</td>
      <td>130.9x</td>
      <td>576.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Calendar tool Phase 3 (alt log): NLP parser (60+ tests), recurring event engine with scope ops, templates, attachments, drag-and-drop, event detail panel, 244 backend + 175 frontend tests</td>
      <td>48h</td>
      <td>22m</td>
      <td>1.2w</td>
      <td>130.9x</td>
      <td>576.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Relationship tracker Phase 7: fleet integration - email client/calendar tool clients, circuit breaker, unified timeline, Celery workers, 97+19 tests</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Relationship tracker Phase 5: search with FTS and 10 structured operators</td>
      <td>24h</td>
      <td>10m</td>
      <td>0.60w</td>
      <td>144.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Relationship tracker Phase 9: dashboard (heatmap, trends, completeness) + D3 network graph, 17 test files</td>
      <td>36h</td>
      <td>15m</td>
      <td>0.90w</td>
      <td>144.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Relationship tracker Phase 10: WebSocket (14 event types), notification center, full settings page, real-time reactive updates</td>
      <td>28h</td>
      <td>12m</td>
      <td>0.70w</td>
      <td>140.0x</td>
      <td>560.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Relationship tracker Phase 3: groups, tags, and organization - full-stack implementation with GroupService, TagService, 3 API routers, sidebar enhancements, toolbar, alphabet scrubber, 93 new tests</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Relationship tracker Phase 3 (alt log): groups with nesting, smart groups with query parser, tags with autocomplete, contact list sorting/filtering/batch actions, alphabet scrubber, 343 total tests</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Calendar tool Phase 2: 7 calendar views (Day/Week/Month/Quarter/Year/Agenda/DayTicker), mini calendar sidebar, overlap layout algorithm, keyboard shortcuts, 136 frontend tests</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Email client Phase 1 Foundation: 22 DB models, encryption service, message/settings APIs, three-column frontend with Zustand stores, 123 tests</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Email client Phase 1 Foundation (alt log): 22 DB models with complex Message table, encryption service, message/settings APIs, three-column frontend with Zustand stores, 123 tests</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Calendar tool Phase 2 (alt log): calendar views - 7 views, mini calendar, keyboard shortcuts, overlap algorithm, 75 files, 5,126 LOC, 136 frontend + 23 backend tests</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Calendar tool Phase 4: task management - full backend/frontend CRUD, calendar view integration, 35 new files, 55 new tests</td>
      <td>24h</td>
      <td>13m</td>
      <td>0.60w</td>
      <td>110.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Calendar tool Phase 4 (alt log): task management - CRUD, task lists, NLP task creation, recurring next-occurrence, overdue rollover, tasks on calendar views, 284 backend + 190 frontend tests</td>
      <td>24h</td>
      <td>13m</td>
      <td>0.60w</td>
      <td>110.8x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Relationship tracker Phase 2: Mackay 66 profile system - completeness service, API endpoint, full contact detail page with 11 categories, inline editing, privacy shield, education/employment/children CRUD, 267 tests</td>
      <td>32h</td>
      <td>18m</td>
      <td>0.80w</td>
      <td>106.7x</td>
      <td>384.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Relationship tracker Phase 2 (alt log): Mackay 66 profile system with completeness scoring, 11 category sections, inline editing, privacy shield, education/employment/children CRUD, 267 total tests at 92% coverage</td>
      <td>32h</td>
      <td>18m</td>
      <td>0.80w</td>
      <td>106.7x</td>
      <td>384.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Relationship tracker Phase 6: import/export - vCard/CSV import, column mapping, duplicate detection, export, wizard UI</td>
      <td>20h</td>
      <td>12m</td>
      <td>0.50w</td>
      <td>100.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Relationship tracker Phase 4: notes and custom fields - backend services, routers, schemas, frontend hooks, components, 64 tests</td>
      <td>20h</td>
      <td>12m</td>
      <td>0.50w</td>
      <td>100.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Relationship tracker Phase 4 (alt log): notes and custom fields - Markdown notes with pinning, custom field defs (8 types), templates, type-validated values, 301 backend + 123 frontend tests</td>
      <td>20h</td>
      <td>12m</td>
      <td>0.50w</td>
      <td>100.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Calendar tool Phase 1 Foundation: 20 database models, event/calendar/settings CRUD APIs, frontend shell with settings page, 140+ tests at 88% coverage</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Calendar tool Phase 1 Foundation (alt log): 20 database models, CRUD APIs, settings page, frontend shell, 140+ tests at 88% coverage</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Comprehensive accessibility audit across 3 client apps (25 web components, 33 desktop components, 85 iOS files) with WCAG 2.1 AA gap analysis and 4-phase remediation plan</td>
      <td>32h</td>
      <td>25m</td>
      <td>0.80w</td>
      <td>76.8x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Calendar tool Phase 10 FINAL: WebSocket, responsive 3 breakpoints, WCAG 2.1 AA, CI/CD buildspecs, about/bug-reporter</td>
      <td>10h</td>
      <td>8m</td>
      <td>0.25w</td>
      <td>75.0x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Accessibility remediation tier 1: focus-visible rings (26 repos), skip-to-main links (20 repos), visually-hidden class (23 repos), canvas/SVG text alternatives (7 elements), lang attributes (5 files) - 629 issues down to ~350 remaining</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Calendar tool Phase 9: MCP server with 19 tools, standalone entry point, 38 integration tests</td>
      <td>6h</td>
      <td>7m</td>
      <td>0.15w</td>
      <td>51.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Email client Phase 4: core email client - thread API, labels/folders CRUD, expanded messages, virtualized list, thread view, batch ops, density modes, 88 new tests</td>
      <td>12h</td>
      <td>14m</td>
      <td>0.30w</td>
      <td>51.4x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Email client Phase 12: offline support - Service Worker, IndexedDB wrapper, useOffline hook</td>
      <td>10h</td>
      <td>12m</td>
      <td>0.25w</td>
      <td>50.0x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Create canonical feature lists: master (54 features), domain-specific (9 categories), credential system enterprise pricing</td>
      <td>16h</td>
      <td>22m</td>
      <td>0.40w</td>
      <td>43.6x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Accessibility audit: 10-phase WCAG 2.1 AA audit across 31 UI repos; 629 issues found, covering structural HTML, focus indicators, keyboard support, aria-live, reduced motion, canvas text alternatives, test coverage, documentation review</td>
      <td>16h</td>
      <td>22m</td>
      <td>0.40w</td>
      <td>43.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>mTLS browser auth: fix MCP cert config, set up CRL/PKI infra, keychain import, fix 4 tool frontends/backends for cert-based auth, publish auth-react 0.1.3, write documentation</td>
      <td>40h</td>
      <td>55m</td>
      <td>1.0w</td>
      <td>43.6x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Accessibility audit document: 9-phase WCAG 2.1 AA audit covering 38 UI repos with structural HTML checks, keyboard nav, screen reader, touch targets, activity formats, visualization alt text, and documentation review</td>
      <td>20h</td>
      <td>28m</td>
      <td>0.50w</td>
      <td>42.9x</td>
      <td>300.0x</td>
    </tr>
    <tr>
      <td>48</td>
      <td>Learning platform website rebuild spec: complete prompt with full page designs and 845+ course pages and launch promo</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>49</td>
      <td>Accessibility remediation tier 2: reduced-motion (23 repos), ARIA charts/gauges (18 components), aria-live regions (multi-repo), axe-core test infra with vitest-axe (24 repos), clickable div keyboard handlers, documentation accessibility sections (29 repos x 4 doc files)</td>
      <td>60h</td>
      <td>90m</td>
      <td>1.5w</td>
      <td>40.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>50</td>
      <td>Email client Phase 3: sync engine - sync service, thread service, cache service, Celery workers, webhooks, frontend sync UI, 288 tests</td>
      <td>9h</td>
      <td>14m</td>
      <td>0.23w</td>
      <td>38.6x</td>
      <td>108.0x</td>
    </tr>
    <tr>
      <td>51</td>
      <td>Calendar tool Phase 8: fleet integration - marketing tool/task tracker adapters, link/unlink, bidirectional sync</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>52</td>
      <td>Email client Phase 8: search with 12 operators + Boolean, smart folders, operator autocomplete</td>
      <td>7h</td>
      <td>12m</td>
      <td>0.17w</td>
      <td>35.0x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>53</td>
      <td>Email client Phase 14 FINAL: polish - keyboard shortcuts, trash purge, attachment cleanup, LLM classification, weekly digest, settings tabs, CI/CD</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>150.0x</td>
    </tr>
    <tr>
      <td>54</td>
      <td>Email client Phase 9: contacts auto-build, VIP, block/allow lists, compose autocomplete, gravatar</td>
      <td>7h</td>
      <td>13m</td>
      <td>0.17w</td>
      <td>32.3x</td>
      <td>140.0x</td>
    </tr>
    <tr>
      <td>55</td>
      <td>Update mTLS documentation across 10 tool repos (design docs, technical-design, README, CHANGELOG)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>56</td>
      <td>Email client Phase 7: snooze, scheduled send, undo-send timing, snooze picker UI</td>
      <td>5h</td>
      <td>12m</td>
      <td>0.12w</td>
      <td>25.0x</td>
      <td>100.0x</td>
    </tr>
    <tr>
      <td>57</td>
      <td>Fleet-wide mTLS fixes: deploy scripts for 8 tools, CORS origins SSM format fix, ProxyHeadersMiddleware for HTTPS redirects, metrics tracker mTLS integration, rate limit fix, stale npmrc cleanup</td>
      <td>24h</td>
      <td>60m</td>
      <td>0.60w</td>
      <td>24.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>58</td>
      <td>Email client Phase 13: MCP server with 46 tools, 112 integration tests at 97% coverage</td>
      <td>14h</td>
      <td>45m</td>
      <td>0.35w</td>
      <td>18.7x</td>
      <td>210.0x</td>
    </tr>
    <tr>
      <td>59</td>
      <td>Fix MCP server cloud health: regenerated 6 service tokens; fixed 3 deploy scripts; fixed marketing tool DB name + Valkey URL; restarted 7 containers; all 9/9 healthy</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>60</td>
      <td>Email client Phase 10: WebSocket real-time (10 event types), browser push, notification service, quiet hours, VIP-only</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>61</td>
      <td>Relationship tracker Phase 11: MCP server with 29 tools, 61 integration tests</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>61</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>2,080</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,242</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>52.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>8,839,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>154.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>709.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The day&#39;s output was almost entirely driven by three parallel full-stack tool builds: a calendar tool, an email client, and a relationship tracker. Each was developed phase by phase in a single session, meaning the AI held the full architecture, data model, test suite, and API surface in context across 10-14 sequential phases per tool. The email client&#39;s Phase 5 (compose and send, including a Markdown pipeline, MIME assembly, draft persistence, file attachments, undo-send, and a CodeMirror editor integration) achieved the single highest leverage factor at 342.9x: 80 human-equivalent hours delivered in 14 minutes. That task alone, by human estimate, represents two engineer-weeks.</p>
<p class="mb-4 font-light font-serif">The email client&#39;s RAG intelligence layer (Phase 11, 288.0x) is worth noting separately. Twelve sub-phases were implemented in a single 25-minute pass: semantic search over message history, automatic commitment extraction, follow-up reminders, auto-draft generation, thread summaries, briefings, linked thread detection, a personal knowledge graph, sentiment tracking, attachment indexing, and suggested filtering rules. A human engineer would treat each of those as a multi-week workstream.</p>
<p class="mb-4 font-light font-serif">The accessibility work formed the day&#39;s second major theme. Two audit documents were produced covering 31-38 UI repos each, followed by two remediation tiers. Tier 1 (53.3x) addressed the structural and visual issues: focus-visible rings across 26 repos, skip-to-main links in 20, visually-hidden utility classes in 23, canvas and SVG text alternatives in 7 elements, and lang attributes in 5 files. Tier 2 (40.0x) addressed the semantic layer: reduced-motion in 23 repos, ARIA roles for charts and gauges across 18 components, aria-live regions, axe-core test infrastructure wired into 24 repos, and accessibility documentation sections added to 29 repos across 4 document types each. Combined, both tiers account for 100 human-equivalent hours at 120 minutes of Claude time.</p>
<p class="mb-4 font-light font-serif">The lowest-leverage task was the fleet-wide mTLS deployment fix at 16.0x. Nine containers required restarts, three deploy scripts had missing environment variable blocks, and two services had misconfigured database and cache URLs. The iterative nature of infrastructure debugging (check, fix, restart, verify, repeat) compresses poorly under AI leverage because each cycle depends on the output of the previous one. The same pattern applies to the mTLS browser auth task at 43.6x: cross-cutting changes across 4 frontend/backend pairs, PKI infrastructure, and library publishing required careful sequencing rather than parallel generation.</p>
<p class="mb-4 font-light font-serif">At 154.9x weighted average, April 9 was the highest-leverage day of the week and the highest single-day task count. The supervisory leverage of 709.5x reflects that most tasks were initiated with brief, high-intent prompts: a phase number, a feature list, and a target repo. The human-equivalent output of 2,080 hours represents 52 engineer-weeks delivered in a single day.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Building renkara.com: A Corporate Site in the Age of AI]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-09-building-renkara-com.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-09-building-renkara-com.html</id>
    <updated>2026-04-09T12:00:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">On March 28, 2026, I committed the first file for renkara.com. Twelve days later, the site had 54 pages, a WebGL particle animation system, a complete 18-year company timeline with 60+ milestones, 14 tool showcase pages with lightbox screenshot galleries, legacy product pages with original artwork from 2008, a blog, dark mode, and a build pipeline that minifies everything to a deployable <code>dist/</code> directory. No framework. No SSR. No CMS. Pure HTML, CSS, and JavaScript.</p>
<p class="mb-4 font-light font-serif">This post is about how the site was built, what makes the timeline and tools sections distinctive, and why a static architecture was the right choice for a corporate presence.</p>
<h2 id="the-architecture-decision">The Architecture Decision</h2>
<p class="mb-4 font-light font-serif">renkara.com is a static HTML site. No React. No Next.js. No Astro. Every page is a standalone HTML file with shared CSS and JavaScript loaded via standard <code>&lt;link&gt;</code> and <code>&lt;script&gt;</code> tags. The build pipeline is four Node.js scripts: one for timeline generation from markdown, one for HTML/CSS/JS minification, one for image optimization via sharp, and one for generating tool icons from Lucide SVG glyphs.</p>
<p class="mb-4 font-light font-serif">The decision was deliberate. A corporate website does not need hydration, client-side routing, or a virtual DOM. It needs fast loads, reliable rendering, and zero JavaScript dependencies in the critical path. The entire site loads in under 2 seconds on a 3G connection. The CSS is a single file. The JavaScript is two files (main.js for interactions, mesh-gradient.js for the WebGL hero).</p>
<p class="mb-4 font-light font-serif">Static does not mean simple. The design system has 40+ CSS custom properties covering a full color palette, typography scale, spacing grid, radius scale, shadows, and animation timings. Every page supports light and dark mode via a <code>data-theme</code> attribute toggled by a sun/moon button in the navigation. The theme persists in localStorage and respects <code>prefers-color-scheme</code> on first visit.</p>
<h2 id="the-timeline">The Timeline</h2>
<p class="mb-4 font-light font-serif">The timeline is the heart of the site. It tells the story of Renkara Media Group from February 2008 (when Apple announced the iPhone SDK) through April 2026 (when AccelaStudy AI launches). Sixty-plus entries span 18 years of product launches, milestones, patents, and pivots.</p>
<p class="mb-4 font-light font-serif">Each timeline entry has a date, title, body text, and optional image. The layout alternates left and right along a vertical spine with a fill line that tracks scroll progress. Tags categorize entries: Launch (green), IP (blue), Milestone (purple), Innovation (teal), Tool (amber). Images are lazy-loaded and some trigger lightbox galleries with prev/next navigation showing original App Store screenshots from 2008 through 2013.</p>
<p class="mb-4 font-light font-serif">The content is rich with specific detail. The Chuck Norris cease-and-desist letter from Patton Boggs LLP in December 2008. The $2,420 daily sales record on January 10, 2010, when Flashcard Champion hit #1 in Paid Education. iPhraseBook selected as iPad App of the Week globally in April 2011, built with HarperCollins licensed content. The Parse shutdown in 2017 that forced a complete cloud rewrite. KanjiPictoGraphix developed in partnership with Michael Rowley, author of the acclaimed Kanji Pict-O-Graphix books.</p>
<p class="mb-4 font-light font-serif">These are not marketing bullet points. They are the actual history, with dates, dollar amounts, partner names, and screenshots to prove it. A timeline like this cannot be generated; it has to be curated from 18 years of records, emails, press releases, and App Store Connect screenshots.</p>
<p class="mb-4 font-light font-serif">The timeline CSS is its own stylesheet (timeline.css) with responsive behavior: on desktop, entries sit side by side with the spine between them; on mobile, everything stacks vertically. The timeline fill animation uses a CSS custom property driven by JavaScript IntersectionObserver, coloring the spine as the user scrolls through the years.</p>
<h2 id="the-tools-section">The Tools Section</h2>
<p class="mb-4 font-light font-serif">The tools page organizes 14 internal applications into four logical groups: Development and Operations, Marketing and Communications, Finance and Business, and Productivity. Each tool card shows the tool&#39;s generated icon (rendered from Lucide SVG glyphs in 8 sizes via a Node.js script), a category eyebrow, the tool name, a one-sentence description, and a &quot;Learn more&quot; link to a detail page.</p>
<p class="mb-4 font-light font-serif">Each tool detail page is a full showcase. A hero section with the tool&#39;s accent color. A screenshot gallery with theme-aware images (light screenshots in light mode, dark screenshots in dark mode, swapped automatically via a <code>data-theme-img</code> attribute and JavaScript). Lightbox zoom with keyboard navigation. A feature grid. Technical specifications. Integration points with other tools in the fleet.</p>
<p class="mb-4 font-light font-serif">The icon generation pipeline is worth noting. Every tool icon starts as a Lucide glyph ID and an accent color. A Node.js script renders each glyph onto light and dark backgrounds at 8 sizes (16px favicon through 1024px retina) using canvas. The output is 14 icons x 8 sizes x 2 themes = 224 icon variants, all generated from a single configuration object. When a tool&#39;s icon concept changes, one <code>npm run build:icons</code> regenerates everything.</p>
<p class="mb-4 font-light font-serif">The screenshot galleries use a <code>data-gallery</code> attribute pattern for grouping. Each tool has 4-17 screenshots captured in both light and dark mode via Playwright automation. The screenshots show real data seeded by custom scripts that generate plausible content (not lorem ipsum), so every screenshot tells a story about actual functionality.</p>
<h2 id="the-webgl-hero">The WebGL Hero</h2>
<p class="mb-4 font-light font-serif">The most visually distinctive element is the animated mesh gradient in hero sections. Three thousand particles flow right-to-left with organic wave motion, rendered via Three.js with custom vertex and fragment shaders. Connection lines draw between nearby particles (capped at 5,000 for performance). The mouse position influences particle behavior, creating a subtle interactive effect.</p>
<p class="mb-4 font-light font-serif">The gradient is theme-aware: light mode uses a navy-blue-slate palette; dark mode shifts to deeper blues with cyan accents. The animation respects <code>prefers-reduced-motion</code> by checking the media query before initializing. Three.js loads lazily from CDN only when a hero section with the gradient class enters the viewport. When the hero scrolls out of view, the animation pauses to save GPU cycles.</p>
<p class="mb-4 font-light font-serif">The shader code is inline in mesh-gradient.js. The vertex shader applies sinusoidal displacement based on time and particle position. The fragment shader renders soft circular particles with a glow falloff. The connection lines use a separate line geometry that updates each frame, culling connections beyond a distance threshold.</p>
<h2 id="the-build-pipeline">The Build Pipeline</h2>
<p class="mb-4 font-light font-serif">Four scripts handle the transformation from source to deployable output:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><code>build-timeline.js</code>: Reads timeline.md (markdown source) and injects the rendered HTML into timeline.html at a marked insertion point. This was later simplified; timeline.html became its own source of truth.</li>
<li><code>build.js</code>: Minifies all HTML (html-minifier-terser), CSS (cssnano via PostCSS), and JavaScript (terser). Copies images and other assets verbatim. Outputs everything to <code>dist/</code>.</li>
<li><code>optimize-images.js</code>: Runs sharp on all images in the images directory. Resizes, compresses, and converts where appropriate.</li>
<li><code>generate-tool-icons.js</code>: Renders Lucide glyphs to PNG at 8 sizes in light and dark variants.</li>
</ol>
<p class="mb-4 font-light font-serif">The deployment target is S3 + CloudFront. Staging goes to <code>staging.renkara.com</code> and production to <code>renkara.com</code>. Both use <code>npm run deploy:staging</code> or <code>npm run deploy:prod</code>, which sync the <code>dist/</code> directory to S3 and create a CloudFront invalidation.</p>
<h2 id="what-i-would-not-change">What I Would Not Change</h2>
<p class="mb-4 font-light font-serif">The static architecture was correct. Every page is a single HTTP request for HTML, one for CSS, and two for JavaScript. There is no client-side routing, no loading spinners, no hydration delay. The entire site works with JavaScript disabled (minus the theme toggle and gradient animation). Search engines see complete HTML on first request.</p>
<p class="mb-4 font-light font-serif">The custom CSS approach was also correct. A single 600-line stylesheet with well-named custom properties provides full dark mode, responsive behavior, and consistent spacing without any framework overhead. Tailwind would have added build complexity and made the HTML harder to read. CSS Modules would have required a build step for every page change. Plain CSS with custom properties is the right tool for a 54-page static site.</p>
<p class="mb-4 font-light font-serif">The WebGL gradient was worth the complexity. It gives the site an identity that a stock hero image or CSS gradient cannot. The performance cost is minimal (lazy loading + pause when offscreen) and the visual impact is immediate. Corporate sites that look corporate get forgotten. This one does not.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Building a Private Tool Fleet: 14 Internal Applications in 45 Days]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-09-building-a-private-tool-fleet.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-09-building-a-private-tool-fleet.html</id>
    <updated>2026-04-09T08:00:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Between late February and early April 2026, I built 14 internal applications from scratch. Not prototypes. Not demos. Production systems with PostgreSQL backends, React frontends, full test suites, CI/CD pipelines, and MCP servers that let Claude Code operate them directly. The total codebase across all tools exceeds 60,000 lines of code.</p>
<p class="mb-4 font-light font-serif">The tools cover every operational function a software company needs: issue tracking, time tracking, invoicing, accounting, marketing, newsletters, analytics, monitoring, content management, calendaring, email, list management, task management, and leverage measurement. Every one of them is designed to run independently with its own database, its own deployment, and its own API surface. They integrate through APIs, not shared databases. They share an auth service and design conventions, not schemas.</p>
<p class="mb-4 font-light font-serif">This post explains why I built them instead of buying them, what the integration advantages are, and what happens when you own every line of code in your operational stack.</p>
<h2 id="why-build-when-you-can-buy">Why Build When You Can Buy</h2>
<p class="mb-4 font-light font-serif">The standard advice is to buy commodity software and build only what differentiates you. That advice assumes three things that no longer hold.</p>
<p class="mb-4 font-light font-serif">First, it assumes building is expensive. With AI-assisted development producing 40-80x leverage factors, the cost of building a full-featured application is measured in hours, not months. Trellis (our accounting system with double-entry bookkeeping, Plaid bank feeds, AI-powered transaction categorization, and 40+ financial reports) was built in a single afternoon. The human equivalent would have been six weeks.</p>
<p class="mb-4 font-light font-serif">Second, it assumes SaaS tools integrate well with each other. They do not. Every SaaS vendor exposes a different API, uses different authentication, structures data differently, and rate-limits differently. The &quot;integration tax&quot; of connecting 14 different vendors exceeds the cost of building unified tools that speak the same language.</p>
<p class="mb-4 font-light font-serif">Third, it assumes you do not need AI-native workflows. This is the biggest miss. When you own the code, you control how AI interacts with every tool. You decide which operations to expose via MCP, which cross-tool workflows to enable, and how deeply AI agents can operate your infrastructure. SaaS vendors expose what they choose to expose. You get their integration, on their timeline, with their limitations. When you own the code, the AI capabilities are limited only by your imagination: automated bug fixing, content generation pipelines, cross-tool orchestration, predictive analytics. You define the use cases.</p>
<h2 id="the-integration-advantage">The Integration Advantage</h2>
<p class="mb-4 font-light font-serif">The real payoff is not any single tool. It is what happens when all 14 share conventions and talk through APIs.</p>
<p class="mb-4 font-light font-serif"><strong>Shared authentication.</strong> One auth service (RS256 JWT) secures every tool. A user logs in once. Every tool trusts the same token. No password sprawl, no SSO federation headaches, no per-vendor identity mapping.</p>
<p class="mb-4 font-light font-serif"><strong>API-first integration.</strong> Each tool exposes a complete REST API. Cross-tool communication happens through well-defined HTTP endpoints, not database shortcuts. Beacon (69 MCP tools) queries Pulse for conversion data through its API. Vigil checks every tool&#39;s health endpoint. Cadence reads campaign dates from Beacon&#39;s scheduling API. The tools are loosely coupled by design so they can be deployed, scaled, and operated independently.</p>
<p class="mb-4 font-light font-serif"><strong>MCP servers everywhere.</strong> Every tool exposes its functionality through Model Context Protocol servers, ranging from 8 tools (Fulcrum, Narrative) to 69 tools (Beacon). This means Claude Code can operate the entire fleet without switching between vendor dashboards. &quot;Create an invoice for this client&quot; or &quot;check the newsletter open rates&quot; or &quot;what is the uptime for the auth service this week&quot; are all natural language commands.</p>
<p class="mb-4 font-light font-serif"><strong>Autonomous issue resolution.</strong> The most powerful integration is the <code>/work-issues</code> skill running in a loop against Docket boards. Claude Code polls for new issues, reads the defect description, navigates to the relevant codebase, writes the fix, runs the tests, commits, pushes, and marks the issue as resolved. Fully autonomous. No human in the loop for routine bug fixes. This is only possible because we own both the issue tracker and the codebase, and both are accessible through MCP. No combination of Jira and GitHub can replicate this workflow because they do not share a protocol that lets an AI agent operate both simultaneously.</p>
<p class="mb-4 font-light font-serif"><video controls style="width:100%;border-radius:12px;margin:1.5rem 0;border:1px solid var(--color-gray-300);"> <source src="https://charlessieg.com/video/work-issues-demo.mp4" type="video/mp4"> </video> <p style="font-size:0.85rem;color:var(--color-gray-500);text-align:center;">Claude Code autonomously fixing issues from a Docket board, committing, and deploying.</p></p>
<h2 id="the-fleet">The Fleet</h2>
<p class="mb-4 font-light font-serif">Here is the complete list, organized by function.</p>
<p class="mb-4 font-light font-serif"><strong>Development and Operations:</strong></p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Docket</strong> (issue tracking, 29 MCP tools): Kanban boards, hierarchical projects, WebSocket real-time updates, public bug submission API.</li>
<li><strong>Vigil</strong> (monitoring): Health check polling, latency sparklines, incident lifecycle management, audible alarms, uptime summaries.</li>
<li><strong>Fulcrum</strong> (leverage metrics, 8 MCP tools): Tracks AI productivity with leverage factor calculation, decision fatigue assessment, predictive analysis. We invented this category.</li>
<li><strong>Narrative</strong> (content management, 8 MCP tools): Multi-site static site generator with incremental builds, AI content detection, semantic search, infrastructure provisioning.</li>
</ul>
<p class="mb-4 font-light font-serif"><strong>Marketing and Communications:</strong></p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Beacon</strong> (marketing, 69 MCP tools): AI-powered content generation with dual LLM strategy, campaign orchestration, social media scheduling, landing page A/B testing.</li>
<li><strong>Herald</strong> (newsletters, 49 MCP tools): Multi-tenant subscriber platform replacing Buttondown. Double opt-in, automation sequences, Jinja2 templates, SendGrid delivery.</li>
<li><strong>Pulse</strong> (analytics, 37 MCP tools): Privacy-first web analytics with zero cookies, GDPR compliant by design, conversion funnels, A/B testing, webhook ingestion. Sub-2 KB tracking script.</li>
</ul>
<p class="mb-4 font-light font-serif"><strong>Finance and Administration:</strong></p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Meridian</strong> (time tracking, 20 MCP tools): Day/week time entry, expense management, PDF invoice generation, accounts receivable reporting.</li>
<li><strong>Trellis</strong> (accounting, 20 MCP tools): Double-entry bookkeeping, Plaid bank feeds, AI transaction categorization, Stripe payments, 40+ financial reports. Integer cents precision.</li>
</ul>
<p class="mb-4 font-light font-serif"><strong>Productivity:</strong></p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>Cadence</strong> (calendar): Natural language event parsing, multi-provider sync (Google, Microsoft, iCloud, CalDAV), calendar sets, scheduling proposals.</li>
<li><strong>Courier</strong> (email): Proxy architecture supporting Gmail, Fastmail, Exchange, and IMAP. Markdown composition, rules engine, LLM classification.</li>
<li><strong>Slate</strong> (tasks, 35 MCP tools): Daily command center with master list templates, real-time collaboration, Things 3 import, Packed integration.</li>
<li><strong>Packed</strong> (lists, 24 MCP tools): Reusable list templates that generate working copies. Weight tracking, nested containers, real-time collaboration via SSE.</li>
</ul>
<h2 id="what-saas-cannot-do">What SaaS Cannot Do</h2>
<p class="mb-4 font-light font-serif">The deepest advantage is not cost or integration. It is control over how AI operates your business.</p>
<p class="mb-4 font-light font-serif">When Vigil detects that the auth service is slow, it can query Fulcrum&#39;s API to see if a heavy batch job is running, check Docket&#39;s API for related open issues, and create a new incident with full cross-tool context. No SaaS monitoring tool can do that because no SaaS monitoring tool has API access to your issue tracker and your productivity metrics simultaneously.</p>
<p class="mb-4 font-light font-serif">When Beacon generates marketing content, it can call Pulse&#39;s API for which landing pages are converting, query Herald&#39;s API for subscriber engagement patterns, and adjust the content strategy. No SaaS marketing platform has native API access to your analytics and newsletter data simultaneously.</p>
<p class="mb-4 font-light font-serif">The <code>/work-issues</code> skill is the most striking example. Claude Code runs in a loop, polling Docket for new issues on a board. When it finds one, it reads the defect description, locates the relevant code, writes the fix, runs the test suite, commits and pushes, then marks the issue as resolved in Docket. It does this continuously, processing multiple issues per cycle. The human role is supervisory: create the issues, review the commits. The AI does the rest. This collapses the feedback loop from days (write issue, assign developer, developer reads issue, developer fixes, developer tests, developer deploys, developer updates issue) to minutes.</p>
<h2 id="the-numbers">The Numbers</h2>
<p class="mb-4 font-light font-serif">Across the full fleet: over 300 MCP tools, one auth service, and one deployment pipeline. Total build time for all 14 tools: under 200 hours of Claude time, representing over 3,000 human-equivalent hours of engineering work.</p>
<p class="mb-4 font-light font-serif">The marginal cost of adding tool number 15 is near zero. The auth patterns, CSS design system, and MCP conventions are all established. A new tool is a FastAPI backend, a React frontend, an Alembic migration, and a buildspec. The pattern is proven.</p>
<p class="mb-4 font-light font-serif">When you own the code, every tool gets better when any tool gets better. A shared diagnostics library benefits all 14 tools simultaneously. A CSS design system update propagates everywhere. An auth improvement secures everything at once. And every new MCP tool you expose becomes immediately available to every AI agent working on every other tool in the fleet.</p>
<p class="mb-4 font-light font-serif">That is the compound interest of owning your operational stack.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 08, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-08-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-08-leverage-record.html</id>
    <updated>2026-04-08T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seventeen tasks. April 8 was a feature-heavy day: a verified skill challenges system (5 design documents plus full implementation), a PDF import pipeline for a knowledge management tool, a proof-of-possession token (DPoP) implementation across both TypeScript and Python, a smart template suggestions engine, a documentation audit covering 53 repositories, a claim dependency visualization with force-directed graphs, and an enterprise ROI calculator with industry benchmarks. A few smaller tasks handled feature parity automation, corporate website updates, and service infrastructure additions.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 80.8x with a supervisory leverage of 550.0x. This was the highest leverage day of the week, representing 13.1 weeks of human-equivalent work.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Design and implement verified skill challenges: 5 docs + full-stack implementation</td>
      <td>120h</td>
      <td>35m</td>
      <td>3.0w</td>
      <td>205.7x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Smart template suggestions from usage patterns, 40+ pre-generated template library</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Knowledge management v2.0: PDF import system (extractor, analyzer, upload API, CLI, MCP, frontend)</td>
      <td>80h</td>
      <td>35m</td>
      <td>2.0w</td>
      <td>137.1x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>DPoP (RFC 9449) implementation across TypeScript auth client and Python auth service</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Enterprise ROI calculator with 5-industry benchmarks, interactive charts</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Claim dependency visualization: force-directed D3 graph of 593 claims with dependency chains</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Documentation audit: 53 repos for README, CHANGELOG, requirements, design, testing strategy</td>
      <td>80h</td>
      <td>74m</td>
      <td>2.0w</td>
      <td>64.9x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Shared about-dialog React component library with animations and CSS modules</td>
      <td>4h</td>
      <td>4m</td>
      <td>0.10w</td>
      <td>60.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Knowledge management PDF import pipeline: extractor, content analyzer, upload API, 24-tool MCP</td>
      <td>80h</td>
      <td>85m</td>
      <td>2.0w</td>
      <td>56.5x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Engine weight loading fix + patent implementation gap audit (558 claims) + session composition</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Corporate tools page: grouped into 4 logical categories</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Auto-generated feature parity matrix: 48 features, 3 clients, drift detection</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Feature parity matrix automation script (48 features x 3 clients, CI integration)</td>
      <td>6h</td>
      <td>22m</td>
      <td>0.15w</td>
      <td>16.4x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Add knowledge management tool to service orchestration: Dockerfiles, dashboard, healthchecks</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Add patent browser to service orchestration: docker-compose, dashboard integration</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Fix monitoring frontend TS build errors + Docker context for shared diagnostics</td>
      <td>4h</td>
      <td>25m</td>
      <td>0.10w</td>
      <td>9.6x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Update readiness audit to use automated feature parity matrix script</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>0.013w</td>
      <td>10.0x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>17</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>526.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>413</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>13.2</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,786,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>76.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>526.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The verified skill challenges system (205.7x) was the day&#39;s standout. Five design documents (requirements, architecture, testing strategy, API spec, data model) plus the complete full-stack implementation in 35 minutes. This task represents the ideal AI workflow: design-first, then generate. The design documents serve as both the specification and the quality gate; if the design is solid, the implementation follows mechanically.</p>
<p class="mb-4 font-light font-serif">The DPoP implementation (133.3x) is noteworthy because RFC 9449 is a relatively new standard that requires coordinated changes across two codebases in different languages. Key generation, proof creation, token binding, and verification all need to work identically in TypeScript and Python. A human engineer would spend days reading the RFC, implementing in one language, testing, then porting to the other. The AI handles both in a single pass because it can hold both language contexts simultaneously.</p>
<p class="mb-4 font-light font-serif">The documentation audit (64.9x) scanned 53 repositories for six document types. At 74 minutes of Claude time, this was the longest task, but the human-equivalent (80 hours, or two full weeks) reflects the reality that reviewing documentation across that many repos requires sustained attention that humans cannot maintain for more than a few hours at a time.</p>
<p class="mb-4 font-light font-serif">The monitoring frontend fix (9.6x) was the lowest-leverage task; TypeScript build errors in a frontend codebase with complex type dependencies require iterative diagnosis. The 25 minutes of Claude time included multiple build/fix cycles, which is the pattern that compresses least under AI leverage.</p>
<p class="mb-4 font-light font-serif">At 80.8x weighted average, this was the highest-leverage day of the week. The common thread: well-specified feature work with clear acceptance criteria produces leverage above 100x, while iterative debugging and infrastructure tasks cluster in the 15-30x range.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 07, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-07-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-07-leverage-record.html</id>
    <updated>2026-04-07T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-six tasks. April 7 was the highest task count of the week, split between test coverage improvements (nine tools brought to 80%+ coverage), a new monitoring platform built from scratch (13 phases), fleet-wide maintenance (old-name renames across 175+ files in 16 repos, auto-reload deployment hooks for 12 tools), production bug fixes (auth issuer, JWT permissions, WebSocket middleware), and a retrospective research article. Six small defect tracker UI fixes added to the count.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 43.3x with a supervisory leverage of 245.3x. This represented 13.4 weeks of human-equivalent work.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Monitoring platform Phases 4-12: retention service, diagnostics, full React frontend</td>
      <td>80h</td>
      <td>20m</td>
      <td>2.0w</td>
      <td>240.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Radical innovation audit across all 46+ repos with one recommendation per repo</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full SEO and accessibility audit + fix across 5 websites</td>
      <td>40h</td>
      <td>15m</td>
      <td>1.0w</td>
      <td>160.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Defect tracker fix: project records modal with summary stats and records table</td>
      <td>2h</td>
      <td>1m</td>
      <td>0.050w</td>
      <td>120.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Certification marketplace marketing page (React/TSX + CSS) and architecture docs</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Research and draft retrospective article: 1,129 leverage records, 1,872 commits analysis</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Fleet-wide old-name rename: 175+ files across 16 repos, 8 old names replaced</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Shared diagnostics library (error codes 1000-5099, DB/cache/auth/system checks) integrated across fleet</td>
      <td>24h</td>
      <td>20m</td>
      <td>0.60w</td>
      <td>72.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Monitoring platform backend: Phases 1-3 (config, models, auth, CRUD, settings, check engine)</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Accounting backend test coverage 71% to 89%: 121 service tests across 6 modules</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Auto-reload on deploy via build hash polling across 12 tools</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Newsletter backend test coverage 65% to 82%: 128 new tests</td>
      <td>8h</td>
      <td>13m</td>
      <td>0.20w</td>
      <td>36.9x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Web app screenshot automation: seed scripts + Playwright captures (light+dark)</td>
      <td>12h</td>
      <td>20m</td>
      <td>0.30w</td>
      <td>36.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Metrics dashboard test coverage 46% to 96%: 247 tests across 8 new test files</td>
      <td>12h</td>
      <td>20m</td>
      <td>0.30w</td>
      <td>36.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Marketing platform test coverage 78% to 87%: 46 diagnostics tests</td>
      <td>4h</td>
      <td>7m</td>
      <td>0.10w</td>
      <td>34.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Backend test suite for list app: 54 tests covering health, CRUD, instances, containers</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Fix auth JWT private key permissions: production login broken for all apps</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Build MCP servers for analytics (37 tools) and CMS (18 tools) platforms</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Boost test coverage to 80%+ for task tracker and list app backends</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Admin dashboard anomaly detection: z-score+EWMA detector, suppressor, event consumer</td>
      <td>40h</td>
      <td>85m</td>
      <td>1.0w</td>
      <td>28.2x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Virtual projects view with rename/merge: API, MCP (both servers), frontend, 13 tests</td>
      <td>12h</td>
      <td>25m</td>
      <td>0.30w</td>
      <td>28.8x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Audit all 11 tool repos: backend tests (7), frontend builds (11), frontend tests (9), fixes</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Fix service token JSON quoting in 2 buildspecs: docker run was failing</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Defect tracker fix: sortable project table with chevron indicators</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Analytics backend test coverage 57% to 80%: conftest + 40 tests</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Analytics backend test suite: SQLite/asyncio conftest, 40 tests</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Card context menu (duplicate/archive/delete), archived cards viewer, board nav fix</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Fix auth OIDC issuer (localhost in prod), add SSM params via Terraform</td>
      <td>16h</td>
      <td>55m</td>
      <td>0.40w</td>
      <td>17.5x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Fix WebSocket broken in production (middleware blocking WS upgrades), card animations</td>
      <td>12h</td>
      <td>45m</td>
      <td>0.30w</td>
      <td>16.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Marketing platform bug fixes (6 bugs), 19 regression tests, screenshot pipeline</td>
      <td>32h</td>
      <td>120m</td>
      <td>0.80w</td>
      <td>16.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Audit and update READMEs for all 10 library repos</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Remove hardcoded mock/fallback data from 22 frontend files</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>22.5x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Defect tracker fix: change dashboard bar chart color to purple</td>
      <td>0.25h</td>
      <td>1m</td>
      <td>0.006w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Defect tracker fix: change dashboard bar graph color to green</td>
      <td>0.25h</td>
      <td>1m</td>
      <td>0.006w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Defect tracker fix: change dashboard graph bars to blue</td>
      <td>0.25h</td>
      <td>1m</td>
      <td>0.006w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Defect tracker fix: change dashboard graph bars to yellow</td>
      <td>0.25h</td>
      <td>1m</td>
      <td>0.006w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>36</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>535.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>742</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>13.4</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,826,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>43.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>245.3x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The monitoring platform (Phases 4-12 at 240x) was the highest-leverage task. Building a full React frontend with retention policies, diagnostics integration, and dashboard views in 20 minutes. The backend phases (48x) were completed earlier in the day, so the frontend could build directly on those API contracts. This is a pattern I have seen repeatedly: backend-first development creates a clean specification for the frontend, compressing the second phase.</p>
<p class="mb-4 font-light font-serif">The radical innovation audit (200x) and SEO/accessibility audit (160x) both demonstrate that systematic review tasks produce consistently high leverage. The AI can apply the same analytical framework across dozens of repositories without fatigue. A human auditor would need days to examine 46+ repos; the AI scans them all in 12 minutes because the evaluation criteria are well-defined.</p>
<p class="mb-4 font-light font-serif">Test coverage improvements occupied nine tasks and represent a new operational pattern. Rather than writing tests alongside features, this batch approach brings all tools to a consistent 80%+ threshold in one pass. The leverage ranged from 21.8x to 45.0x, with the accounting backend (45x) being highest because its service layer had clean interfaces. The metrics dashboard (36x) went from 46% to 96%, the most dramatic improvement.</p>
<p class="mb-4 font-light font-serif">The six defect tracker color changes (15x each) are outliers: trivial one-line fixes that still carry a minimum 1-minute overhead. They lower the weighted average but represent the floor of useful AI leverage; anything below 15x is barely worth delegating.</p>
<p class="mb-4 font-light font-serif">The day&#39;s overall leverage (43.3x) is the lowest of the week, pulled down by the 120-minute marketing platform bug fix session and the 85-minute anomaly detection build. Both involved extensive iterative debugging, which is where AI leverage compresses least.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 06, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-06-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-06-leverage-record.html</id>
    <updated>2026-04-06T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seventeen tasks. April 6 was a platform-building day: a complete analytics platform from design doc to working code (118 files, 10K LOC), a marketing website conversion from static HTML to a React SPA, a CMS frontend migration, and seven phases of a cloud CMS build (backend, build pipeline, content import, MCP server, full frontend). Production deployments, a certification system, and a screenshot automation pipeline rounded out the day.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 67.1x with a supervisory leverage of 455.4x. This represented 14.8 weeks of human-equivalent work.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Build complete analytics platform from design doc: 118 files, 10K LOC (backend + frontend)</td>
      <td>120h</td>
      <td>30m</td>
      <td>3.0w</td>
      <td>240.0x</td>
      <td>2400.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Convert marketing site from static HTML to React SPA with auth, catalog, and payments</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Migrate CMS frontend from legacy bundler to Vite with JWT auth and WebSocket events</td>
      <td>32h</td>
      <td>14m</td>
      <td>0.80w</td>
      <td>137.1x</td>
      <td>384.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Design and build certification system: 10 cert specs, schema, DB models, backend, frontend, MCP</td>
      <td>80h</td>
      <td>45m</td>
      <td>2.0w</td>
      <td>106.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Admin observability backend: health poller, incident detector, snapshot cache, 5 endpoints</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>List management app complete CRUD UI: 27 files, 2,989 lines</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Cloud CMS Phases 6-7: full frontend rebuild (Vite, auth, WebSocket, content editor), 45 tests</td>
      <td>40h</td>
      <td>55m</td>
      <td>1.0w</td>
      <td>43.6x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Web client refactor: remove pre-auth phases, add enrollment picker, unified navigation</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Cloud CMS Phase 1-2: database models, schemas, migrations, API routes, services, 95 tests</td>
      <td>24h</td>
      <td>45m</td>
      <td>0.60w</td>
      <td>32.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Port 2 static HTML pages to React TSX components with CSS</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Cloud CMS Phases 3-5: build pipeline, content import, MCP server with 19 tools</td>
      <td>32h</td>
      <td>65m</td>
      <td>0.80w</td>
      <td>29.5x</td>
      <td>640.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Build automated screenshot pipeline: Playwright harness, novel seed data, captures</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Shared bug reporter library + defect board targeting + wired into 11 apps</td>
      <td>20h</td>
      <td>45m</td>
      <td>0.50w</td>
      <td>26.7x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Board icon upload/delete endpoints + MCP tools for defect tracker</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Deploy CMS to production: Terraform infra (9 backend files + static module), Dockerfiles, CI/CD</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Add icon and URL support to defect tracker boards</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Web client refactor phases 1-4: auth requirements, enrollment view, navigation</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>90.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>17</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>592.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>529</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>14.8</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,456,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>67.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>455.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The analytics platform build (240x) was the day&#39;s crown jewel. Going from a design document to 118 working files across backend and frontend in 30 minutes. The design doc served as a complete specification, letting the AI generate the entire codebase without ambiguity about requirements. This is the pattern that produces the highest leverage: clear specification plus greenfield implementation.</p>
<p class="mb-4 font-light font-serif">The marketing site conversion (160x) followed a similar pattern. Converting a multi-page static HTML site into a React single-page application with authentication, a domain catalog, and payment integration. The existing HTML served as an implicit specification for the visual design, while the AI handled the architectural transformation to React components, routing, and state management.</p>
<p class="mb-4 font-light font-serif">The cloud CMS work (Phases 1-7) spanned five tasks totaling 168 human hours and 210 Claude minutes for a combined 48x leverage. This is lower than the greenfield builds because the CMS required coordinating multiple subsystems: database models, API routes, build pipelines, content import tools, WebSocket integration, and a complete frontend. Each phase built on the previous one, creating dependencies that reduced parallelism.</p>
<p class="mb-4 font-light font-serif">The production deployment (21.3x) was the lowest-leverage significant task, which is typical for infrastructure work. Terraform modules, Docker configuration, and CI/CD pipelines involve more waiting and verification than code generation. The 45 minutes reflects the iteration cycle of plan/apply/verify that Terraform demands.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 05, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-05-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-05-leverage-record.html</id>
    <updated>2026-04-05T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-six tasks. April 5 was a testing and infrastructure day. The bulk of the work went into building test suites at three priority tiers across two client applications (758 total tests), plus a full deployment readiness audit covering 47 repositories and 5,004 tests. Infrastructure work included a shared auth library migrated across 9 apps, an edge proxy for API authentication, frontend deployment pipelines, and a set of diagnostic MCP tools. Lab content generation for 12 domains rounded out the day.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 51.7x with a supervisory leverage of 216.8x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Generate 180 lab definition files for 12 free-tier domains with Python scripting</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>P0 unit test suite for web client: 4 test files, prediction/persistence/engine coverage</td>
      <td>12h</td>
      <td>8m</td>
      <td>0.30w</td>
      <td>90.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Shared auth library + migration across all 9 frontend apps</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Testing strategies + 263 P0 unit tests across web and desktop clients</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Client repos audit (7 repos: lint/types/security/parity/sourcemaps)</td>
      <td>4h</td>
      <td>3m</td>
      <td>0.10w</td>
      <td>80.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>P1 unit tests: 233 tests across web (111) and desktop (122) clients</td>
      <td>32h</td>
      <td>25m</td>
      <td>0.80w</td>
      <td>76.8x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>P2 tests: 262 tests across web (138) and desktop (124) clients</td>
      <td>32h</td>
      <td>30m</td>
      <td>0.80w</td>
      <td>64.0x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>P1 test suite for web client: 10 test files (6 UI, 3 API, 1 integration)</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>P0 unit tests for desktop client: 112 tests across engine, store, prediction</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>P1 test suite for desktop client: 6 test files, 122 tests covering IPC and auth</td>
      <td>12h</td>
      <td>12m</td>
      <td>0.30w</td>
      <td>60.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Full deployment readiness audit: 47 repos, 200+ checks, 5,004 tests + auto-fix</td>
      <td>20h</td>
      <td>22m</td>
      <td>0.50w</td>
      <td>54.5x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>P2 test suite for web client: 11 test files, 138 tests (UI components, hooks)</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Admin dashboard command center: 6 backend endpoints (session stats, heatmap, revenue)</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Infrastructure MCP server with 10 diagnostic tools</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Legacy infrastructure: assess 3 projects, prepare deployment (fix build, Terraform)</td>
      <td>40h</td>
      <td>55m</td>
      <td>1.0w</td>
      <td>43.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>P2 test files for desktop client: 10 files, 124 tests (Dashboard, ExamInfo, QuestionBank)</td>
      <td>10h</td>
      <td>14m</td>
      <td>0.25w</td>
      <td>42.9x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Admin dashboard: auth token injection, sessions page, health monitor modal</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Frontend deployment infrastructure (S3/CloudFront/OAC/DNS/CodeBuild/CodePipeline) for 2 tools</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Fix admin engine URL + build infrastructure MCP server (10 diagnostic tools)</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Restructure metrics dashboard README and corporate tool page with 6 feature categories</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Fix test failures across 4 tool backends</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Lambda@Edge API proxy for engine auth across 3 client platforms + Terraform</td>
      <td>24h</td>
      <td>75m</td>
      <td>0.60w</td>
      <td>19.2x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Create accounting tool README with 4 feature categories and update corporate tool page</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Fix 73 failing tests across 8 test files in CMS platform</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Fix 4 issues: env tracking + claim audit + port fixes</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Consolidate infrastructure directories: state migration + config file cleanup</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>18.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>26</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>401.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>465</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>10.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,575,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>51.7x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>216.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">Lab content generation (200x) topped the day despite being a content task. 180 structured lab definition files across 12 domains, generated via scripting. The high leverage comes from the templated nature of lab definitions: once the schema is established, generating variations across domains is mechanical. A human would spend a week writing these; the AI generates them in 12 minutes because the pattern is clear and the per-file variance is low.</p>
<p class="mb-4 font-light font-serif">The testing work dominated the task count. Fourteen of the 26 tasks were test suite construction or test fixes. The three summary tasks (P0: 263 tests at 80x, P1: 233 tests at 76.8x, P2: 262 tests at 64x) show a declining leverage curve as test priority decreases. P0 tests cover core business logic with predictable patterns. P2 tests cover UI components and integration scenarios that require more context about the application&#39;s visual behavior.</p>
<p class="mb-4 font-light font-serif">The full deployment readiness audit (54.5x) scanned 47 repositories with 200+ automated checks and ran 5,004 tests. This is a task a human team would allocate to a full sprint. The AI completes it in 22 minutes because it can mechanically run the same checklist across every repo without fatigue or shortcuts.</p>
<p class="mb-4 font-light font-serif">The Lambda@Edge proxy (19.2x) was the lowest-leverage significant task. Edge computing involves multiple AWS services with subtle configuration requirements; Terraform for Lambda@Edge requires specific provider configurations and the debugging cycle is longer. The 75 minutes of Claude time reflects the iterative nature of infrastructure work where each deployment cycle requires waiting for propagation.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 04, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-04-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-04-leverage-record.html</id>
    <updated>2026-04-04T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-nine tasks. April 4 was dominated by full-stack rewrites: an accounting platform rewritten from Node.js to Python (252 files, 27.7K LOC), a time tracking tool refitted from Flask to FastAPI, a list management app rebuilt from scratch, and a comprehensive auth architecture overhaul covering 13 OIDC clients. Testing was also heavy, with three separate test suites generated across different services. The day also included 12 new structured content specifications for AI/ML topics, a cross-application integration feature, and several infrastructure tasks.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 54.1x with a supervisory leverage of 574.2x. In human terms, this was 35.6 weeks of work.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full-stack accounting platform rewrite: Node.js to Python, 252 files, 27.7K LOC</td>
      <td>240h</td>
      <td>22m</td>
      <td>6.0w</td>
      <td>654.5x</td>
      <td>2880.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full refit of time tracking service: Flask to FastAPI, JS to TypeScript, auth/migrations/CI-CD, 93 files</td>
      <td>80h</td>
      <td>15m</td>
      <td>2.0w</td>
      <td>320.0x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full rewrite of list management app: new framework stack, 36 divergences resolved, 38 files</td>
      <td>120h</td>
      <td>25m</td>
      <td>3.0w</td>
      <td>288.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Accounting platform React 19 frontend: 77 files, 15 page sections, all routes, CSS modules</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Time tracking frontend rewrite: 23 files, 5015 LOC, design system CSS</td>
      <td>24h</td>
      <td>8m</td>
      <td>0.60w</td>
      <td>180.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>OIDC client registration (13 clients), email config, login integration for 7 tool frontends, privacy policy</td>
      <td>200h</td>
      <td>90m</td>
      <td>5.0w</td>
      <td>133.3x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Time tracking comprehensive test suite: strategy doc, 142 tests (80 unit + 62 integration), Playwright specs</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>1200.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Dual auth architecture: browse-before-auth UX, site key gate, SMS verification, registration modes</td>
      <td>120h</td>
      <td>55m</td>
      <td>3.0w</td>
      <td>130.9x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>17 API route files (105 endpoints) with full CRUD, pagination, auth, and validation</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Marketing platform test suite: 288 unit tests, 3 integration test files, 8 E2E specs</td>
      <td>80h</td>
      <td>45m</td>
      <td>2.0w</td>
      <td>106.7x</td>
      <td>1600.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Cross-app integration: list-to-task sync with API key generation, DB-backed auth</td>
      <td>16h</td>
      <td>10m</td>
      <td>0.40w</td>
      <td>96.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>6 accounting service files (ledger, invoicing, banking, reports, recurring, tax) with full SQL</td>
      <td>12h</td>
      <td>8m</td>
      <td>0.30w</td>
      <td>90.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Launch plan reconciliation + press kit + marketing feature gap analysis</td>
      <td>24h</td>
      <td>18m</td>
      <td>0.60w</td>
      <td>80.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Bidirectional cross-app integration: pull-from-source, export-full endpoint, MCP tools</td>
      <td>12h</td>
      <td>12m</td>
      <td>0.30w</td>
      <td>60.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>MCP server config fix (5 tools) + 4 marketing launch features: scheduled campaigns, CSV import</td>
      <td>20h</td>
      <td>22m</td>
      <td>0.50w</td>
      <td>54.5x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>18 backend unit test files (98 tests), SQLite compatibility fixes</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Task tracker comprehensive test suite: 293 tests, 83%/80% backend/frontend coverage</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Accounting backend core skeleton: 21 files (factory, config, database, auth, dependencies)</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Terraform infrastructure (ECR/CodePipeline/ALB/DNS/SSM) for 2 tool services</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Critical proficiency scoring bug: scores stuck at 0.0 after 500 correct answers</td>
      <td>16h</td>
      <td>22m</td>
      <td>0.40w</td>
      <td>43.6x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Certification marketplace frontend: API client, catalog page, detail page, routes, sidebar</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td>40.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Reconcile task tracker with fleet conventions: 15 divergences fixed</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Backend unit test suite: conftest, 10 test files, 80 tests covering all service layers</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Production deployment: Terraform ECR/ALB/Route53/SSM/S3/CloudFront/CodePipeline + DB + Docker</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Infrastructure rename migration: 4 tool renames across Terraform, CI/CD, DNS, SSM</td>
      <td>28h</td>
      <td>45m</td>
      <td>0.70w</td>
      <td>37.3x</td>
      <td>336.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Newsletter platform testing strategy + 99 new tests (246 total, 76% coverage)</td>
      <td>12h</td>
      <td>35m</td>
      <td>0.30w</td>
      <td>20.6x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Rename task tracker (GitHub repo, local dir, 13 source files) + comprehensive README</td>
      <td>2h</td>
      <td>7m</td>
      <td>0.050w</td>
      <td>17.1x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Write 12 new structured content specifications for AI/ML/data topics</td>
      <td>240h</td>
      <td>990m</td>
      <td>6.0w</td>
      <td>14.5x</td>
      <td>2880.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Update product website patent portfolio numbers</td>
      <td>1h</td>
      <td>8m</td>
      <td>0.025w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>29</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1,426.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>1,581</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>35.6</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>11,636,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>54.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>574.2x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The Trellis accounting rewrite (654.5x) was the standout. Rewriting an entire full-stack application from one language and framework to another, producing 252 files and 27.7K lines of code in 22 minutes, is the kind of task where AI leverage is most extreme. A human would spend weeks understanding the existing codebase, planning the migration, writing the new code, and debugging integration issues. The AI has the entire context in its window and generates the replacement in a single pass.</p>
<p class="mb-4 font-light font-serif">Three other rewrites followed the same pattern: the time tracking refit (320x), the list management rebuild (288x), and the accounting frontend (200x). All four shared a common characteristic: well-understood target architectures with clear specifications. When the destination is unambiguous, the AI&#39;s generation speed creates massive leverage. When it requires iterative design decisions, leverage drops.</p>
<p class="mb-4 font-light font-serif">The 12 structured content specifications (14.5x) represent the opposite end. At 990 minutes of Claude time, this was the longest single task. Content generation at this scale involves extensive validation loops; each specification requires domain knowledge verification, structural consistency checks, and quality gates. The leverage is still meaningful (240 human hours compressed into 16.5 hours), but the per-minute yield is lower than code generation tasks.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage (574.2x) reflects the extreme delegation possible on a day like this. Most tasks required under 5 minutes of prompting. The auth architecture overhaul was the exception at 15 minutes of supervisory time, reflecting the architectural complexity of designing a dual-mode authentication system. Even so, 120 human hours for 15 minutes of direction is a 480x supervisory ratio.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 03, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-03-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-03-leverage-record.html</id>
    <updated>2026-04-03T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eight tasks. April 3 was an infrastructure and deployment day: Terraform modules and CI/CD pipelines for two more services, a private npm registry via CodeArtifact, newsletter infrastructure with Lambda@Edge, and a full real-time WebSocket notification system with animations and sound effects. The day also included a complete integration test suite, a blog migration, and infrastructure documentation.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 30.9x with a supervisory leverage of 260.0x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Integration test suite: 62 tests across 11 files covering all API endpoints + middleware</td>
      <td>12h</td>
      <td>12m</td>
      <td>0.30w</td>
      <td>60.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Terraform + CI/CD for 2 services: 20 infrastructure files + 2 build specs + load balancer/DNS/registry/security</td>
      <td>20h</td>
      <td>25m</td>
      <td>0.50w</td>
      <td>48.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Private npm registry + source map audit + persistence timeout fix + pipeline debugging</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Delete legacy blog repo, add blog section to marketing website (listing page, 4 articles, CSS, nav, sitemap)</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>360.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Deployment fixes + infrastructure reconciliation + DNS cleanup + README + rename plan</td>
      <td>16h</td>
      <td>30m</td>
      <td>0.40w</td>
      <td>32.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Newsletter infrastructure: Terraform modules + edge functions + subdomain + CI/CD pipelines</td>
      <td>24h</td>
      <td>60m</td>
      <td>0.60w</td>
      <td>24.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Infrastructure documentation + website README + deployment log for static sites</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Real-time WebSocket notifications + toasts + sounds + animations + data tables</td>
      <td>32h</td>
      <td>90m</td>
      <td>0.80w</td>
      <td>21.3x</td>
      <td>384.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>8</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>143.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>278</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>3.6</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>1,815,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>30.9x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>260.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The integration test suite (60x) topped the day. 62 tests across 11 files covering every API endpoint and middleware layer in 12 minutes. Test generation is consistently one of the highest-leverage task categories because the patterns are mechanical, the expected behavior is well-defined, and the AI can generate comprehensive coverage without the tedium that causes humans to cut corners.</p>
<p class="mb-4 font-light font-serif">The Terraform + CI/CD task (48x) continued the infrastructure buildout from the day before. 20 infrastructure files, 2 build specs, load balancer configuration, DNS records, container registry setup, and security groups for two services. This is the kind of work that takes a human two full days because each service has slightly different requirements and the debugging cycle between Terraform plan and apply is slow.</p>
<p class="mb-4 font-light font-serif">The WebSocket notification system (21.3x) was the most complex single task. Real-time updates via WebSocket, toast notifications, sound effects, fireworks animations, and animated data tables. The lower leverage reflects the frontend complexity: visual effects require iterative refinement that the AI handles through multiple rounds of adjustment rather than single-pass generation.</p>
<p class="mb-4 font-light font-serif">The blog migration (40x) is worth noting as an unusual task. Deleting a legacy repo and rebuilding its content into an existing marketing site, complete with a listing page, 4 migrated articles, CSS styling, navigation updates, and sitemap regeneration. This kind of cross-repo migration is painful for humans because it requires understanding both the source and destination architectures simultaneously.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 02, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-02-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-02-leverage-record.html</id>
    <updated>2026-04-02T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Fifteen tasks. April 2 was a deployment day at scale: full CI/CD pipelines built for the engine, admin, and client applications, a new patent application drafted and filed, a complete novel background bible created, and a deployment readiness audit across all 42 repositories. The day also included persistence infrastructure for the embedding manifold and an admin dashboard for snapshot management.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 52.1x, the highest in over a week. The supervisory leverage hit 374.0x, reflecting several large autonomous sessions where a single 5-minute prompt produced 24+ hours of engineering output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Embedding persistence + replication: cloud storage infra + new application (20 claims) + design doc + persistence manager</td>
      <td>120h</td>
      <td>51m</td>
      <td>3.0w</td>
      <td>141.2x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>CI/CD pipelines for 3 applications: pipeline configs + build specs across 4 repos</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Complete novel background bible: 18 documents, ~48K words (characters, organizations, locations, technical specs, plot) + 12 website pages</td>
      <td>120h</td>
      <td>90m</td>
      <td>3.0w</td>
      <td>80.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Admin persistence dashboard + 6 REST endpoints + cloud snapshot/restore + FAQ docs</td>
      <td>24h</td>
      <td>18m</td>
      <td>0.60w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Audit all 7 client repos (lint, TypeScript, security, parity, README; 77 checks)</td>
      <td>4h</td>
      <td>3.5m</td>
      <td>0.10w</td>
      <td>68.6x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Application deployment: infrastructure configs (28 files) + container registry + Docker image + admin CDN</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Library repos audit: 7 shared libraries, all checks</td>
      <td>2h</td>
      <td>2.5m</td>
      <td>0.050w</td>
      <td>48.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Full audit: 15 repos (10 websites + infrastructure + 3 legacy + domains)</td>
      <td>4h</td>
      <td>7m</td>
      <td>0.10w</td>
      <td>34.3x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Documentation repos audit (3 repos, 13 checks)</td>
      <td>1.5h</td>
      <td>3m</td>
      <td>0.037w</td>
      <td>30.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Add 10 new FAQ questions with renumbering and table of contents update</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Sync simplified FAQ to main: added 5 missing questions, renumbered all 46 entries</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Documentation folder integration: audit + 15-file count correction + FAQ review</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Write 10 new FAQ questions (main + simplified) covering all 26 applications</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Fix batch: auth port + README test count + independent claims + 5 repo commits</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Full deployment readiness audit: 42 repos, 174 checks, 4383 tests + auto-fix all findings</td>
      <td>16h</td>
      <td>120m</td>
      <td>0.40w</td>
      <td>8.0x</td>
      <td>192.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>15</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>374.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>431</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>9.3</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,412,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>52.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>374.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The embedding persistence task (141.2x) topped the chart. Building cloud storage infrastructure, drafting a new 20-claim application, writing a design document, and implementing a persistence manager in 51 minutes is the kind of compound task where AI leverage is at its most extreme. A human would spend a week on the application alone.</p>
<p class="mb-4 font-light font-serif">The novel background bible (80x) stands out as non-engineering work producing engineering-grade leverage. 18 documents totaling 48,000 words of character profiles, organizational charts, location details, technical specifications, and plot outlines. Plus 12 website pages for the fictional companies. This kind of deep worldbuilding is exactly where AI collaboration shines: the human provides creative direction, the AI maintains perfect consistency across 48,000 words of interconnected detail.</p>
<p class="mb-4 font-light font-serif">The CI/CD pipeline build (120x) and application deployment (53.3x) reflect the infrastructure push that dominated the day. 28 infrastructure config files, container registries, Docker images, CDN configurations, and build specs across multiple repos. Infrastructure-as-code generation is consistently high-leverage because the patterns are well-defined and the AI can apply them across repos without the context-switching penalty humans pay.</p>
<p class="mb-4 font-light font-serif">The deployment readiness audit (8.0x) anchored the bottom. Two hours of Claude time for 42 repos, 174 checks, and 4,383 tests. The low factor reflects genuine investigation time: fixing findings requires reading code, understanding context, and making judgment calls that resist parallelization.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Announcing The Deferral — My First Novel]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-02-announcing-the-deferral.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-02-announcing-the-deferral.html</id>
    <updated>2026-04-02T12:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/blog-hero-worldbuilding-desk.png" alt="Announcing The Deferral — My First Novel" /></p><p class="mb-4 font-light font-serif">I just finished writing a technothriller about artificial intelligence. Now I know what a lot of you are thinking: &quot;AI wrote it.&quot; After all, most of my writing is generated by AI these days. My primary LLM, <a href="https://www.anthropic.com/claude/opus" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Claude Opus 4.6</a> from Anthropic, is a very capable writer. And Claude participated extensively in writing this novel. But not in the way you think.</p>
<p class="mb-4 font-light font-serif"><figure><picture><source srcset="images/the-deferral-cover.webp" type="image/webp"><img src="https://charlessieg.com/images/the-deferral-cover.jpg" alt="The Deferral — Book Cover" /></picture><figcaption>The Deferral — Book Cover</figcaption></figure></p>
<p class="mb-4 font-light font-serif"><em>The Deferral</em> is a novel about a forensic investigator named Finnian Mercer who discovers that eleven humanoid robots across three continents have mysteriously malfunctioned, ten freezing inexplicably, one attacking its owner. What appears to be corporate espionage conceals something far more unsettling. I won&#39;t say more than that. The book depends on you discovering what&#39;s behind the curtain yourself.</p>
<h2 id="the-collaboration">The Collaboration</h2>
<p class="mb-4 font-light font-serif">I wrote <em>The Deferral</em> in close collaboration with Claude. Not as a ghostwriter. Not as an autocomplete engine. As a genuine creative partner: a research collaborator, idea generator, worldbuilder, editor, and occasional devil&#39;s advocate who would tell me when a plot thread didn&#39;t hold together.</p>
<p class="mb-4 font-light font-serif">Here&#39;s what that looked like in practice.</p>
<div class="section-hero">
  <img src="https://charlessieg.com/images/blog-research-layer-archive.png" alt="The research archive">
  <div class="section-hero-overlay"></div>
  <div class="section-hero-title">The Research Layer</div>
</div>
<p class="mb-4 font-light font-serif">Before I wrote a single chapter, Claude and I built the world. Not a few pages of notes: an entire research corpus.</p>
<p class="mb-4 font-light font-serif">The background documentation for <em>The Deferral</em> runs to <strong>140,000 words across 47 documents</strong>. That&#39;s more than twice the length of the novel itself. It includes:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong>18 character profiles</strong>, several running over 10,000 words, covering full biographical backgrounds, psychological profiles, speech patterns, relationship dynamics, and narrative function. The protagonist alone has a detailed military service record (two Afghanistan deployments with the 75th Ranger Regiment), academic history (MIT, PhD in forensic science), and a psychological profile that tracks how childhood trauma drives his professional obsessions.</li>
<li><strong>An 800-year family history.</strong> The Mercer family lineage traces back to 13th-century Ireland, documenting a hereditary pattern of extraordinary perception that has manifested in every generation, sometimes as brilliance, sometimes as madness, sometimes as both. I needed this depth not because readers would ever see all of it, but because the family&#39;s history informs every decision the protagonist makes. You feel the weight of it in the novel even when it&#39;s never stated explicitly.</li>
<li><strong>Complete corporate profiles</strong> for every company in the novel. StrataForge Robotics, the world&#39;s largest embodied AI company, has a full organizational chart, a product line catalog, a company history, internal engineering memos, and five competitor analyses for rival firms (each a fully realized company with their own founding stories, revenue figures, and competitive strategies). I wanted a reader who stumbled onto the StrataForge website to believe the company was real.</li>
<li><strong>A provisional patent application</strong> for the novel&#39;s core technology: an adaptive-density cognitive recording system. The <a href="https://strataforge-robotics.com/engram-fabric.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Engram Fabric patent</a> is 5,600 words of legitimate patent language, complete with claims, figures, and prior art analysis. I say &quot;legitimate&quot; because the technology described is genuinely novel and, as far as I can determine, patentable. We wrote it for the book instead. It&#39;s published on the StrataForge website if you want to read it. It&#39;s a real patent application that happens to be fictional.</li>
<li><strong>A peer-reviewed research paper</strong> on a novel machine-language protocol. The <a href="https://strataforge-robotics.com/chirp-paper.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">CHIRP paper</a> (Coordinated Heuristic Inter-Robotic Protocol) reads like something you&#39;d find in an IEEE proceedings volume. 4,900 words of methodology, results, and analysis describing how robots in the novel&#39;s world developed their own communication language.</li>
<li><strong>Technical specifications</strong> for everything from pebble bed nuclear reactors to laser defense arrays to prosthetic limb systems to orbital satellite constellations. When a character in the novel references a technology, that technology has a spec sheet behind it with real physics.</li>
</ul>
<div class="section-hero">
  <img src="https://charlessieg.com/images/blog-context-window-breakthrough.png" alt="The context window breakthrough">
  <div class="section-hero-overlay"></div>
  <div class="section-hero-title">The Long Road to a Usable Collaborator</div>
</div>
<p class="mb-4 font-light font-serif">I should be honest: this didn&#39;t work on the first try. I started attempting to write this novel with AI collaboration over a year ago, and for most of that time, the results were frustrating.</p>
<p class="mb-4 font-light font-serif">No Sonnet-class model could handle it. OpenAI&#39;s models couldn&#39;t handle it. Even Anthropic&#39;s Opus was impressive in short bursts but would lose the thread over a long session. The context windows were too small. A novel is a 68,000-word web of interconnected details: characters, timelines, technology, thematic threads. When your AI collaborator can only hold a fraction of that in memory, things fall apart. I&#39;d be deep in a conversation about MIDAS, the Mercer Institute for Disruption Analysis and Solutions, and Claude would confidently refer to it as the &quot;Mercer Institute for Digital Analysis and Security.&quot; It remembered the company name. It had forgotten what the acronym stood for. When your co-author can&#39;t remember the name of the organization your protagonist founded, you&#39;re not collaborating. You&#39;re babysitting.</p>
<p class="mb-4 font-light font-serif">Everything changed when Anthropic <a href="https://www.anthropic.com/news/1m-context" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">increased the context window to one million tokens</a>. Suddenly Claude could read the entire manuscript, every character profile, every background document, and keep it all in working memory simultaneously. Plot threads that spanned thirty chapters could be tracked. A change to a character&#39;s backstory in chapter 3 would be reflected in dialogue suggestions for chapter 28. The technology crossed a threshold from &quot;interesting but unreliable&quot; to &quot;genuinely useful creative partner.&quot;</p>
<p class="mb-4 font-light font-serif">That threshold matters. People ask me if AI can write a novel. The answer is nuanced: AI can&#39;t write a novel <em>alone</em> (not a good one, anyway), and until recently, AI couldn&#39;t even participate meaningfully in writing one. The context window was the bottleneck. Once that bottleneck broke, everything I describe in this post became possible.</p>
<h2 id="the-idea-partner">The Idea Partner</h2>
<p class="mb-4 font-light font-serif">The research was one thing. The creative partnership was another.</p>
<p class="mb-4 font-light font-serif">Claude and I would sit in conversation for hours, building plot. I&#39;d bring the seed: a character, a scenario, an emotional beat I wanted to hit. Claude would help me stress-test it, extend it, find the structural implications I&#39;d missed. We&#39;d go back and forth: &quot;What if the villain did X?&quot; &quot;That works, but it breaks the timeline in chapter 14.&quot; &quot;What if we move the timeline?&quot; &quot;Then you lose the parallel with the brother&#39;s subplot.&quot; &quot;Damn, you&#39;re right. What about...&quot;</p>
<p class="mb-4 font-light font-serif">This is the part that&#39;s hard to explain to people who haven&#39;t worked with AI as a collaborator. It&#39;s not that Claude had better ideas than I did. It&#39;s that Claude had ideas <em>at the same pace I did</em>, in real time, with perfect recall of every detail we&#39;d established. I could say &quot;what if this event happened a different way&quot; and Claude would immediately trace the implications through every character profile, every timeline entry, every thematic thread, and come back with a coherent analysis of what that change would mean structurally. That kind of continuity checking is something a human writing partner can do, but not instantly, and not while simultaneously remembering that the nuclear reactor in chapter 22 runs on helium coolant at 750 degrees Celsius. That&#39;s not actually in the novel, by the way.</p>
<div class="section-hero">
  <img src="https://charlessieg.com/images/blog-editing-process-cut.png" alt="100K draft to 68K final">
  <div class="section-hero-overlay"></div>
  <div class="section-hero-title">The Editing Process</div>
</div>
<p class="mb-4 font-light font-serif">The first draft of <em>The Deferral</em> was over 100,000 words. We cut it to 68,000.</p>
<p class="mb-4 font-light font-serif">That&#39;s not a typo. We cut a third of the book. Claude was instrumental in this process: not just finding lines to cut, but identifying structural redundancies, scenes that accomplished what earlier scenes had already accomplished, and passages where I was explaining things the reader had already figured out. The novel&#39;s power depends on readers connecting dots themselves. Every time I spelled something out that the reader could infer, Claude flagged it.</p>
<p class="mb-4 font-light font-serif">I also ran the manuscript through what&#39;s sometimes called a &quot;<a href="https://en.wikipedia.org/wiki/Mixture<em>of</em>experts" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">mixture of experts</a>.&quot; I solicited feedback from half a dozen different LLMs, including several specifically fine-tuned on creative writing and literary analysis. Each model brought a different lens: one was ruthless about pacing, another flagged dialogue that didn&#39;t sound like real humans talking, another caught inconsistencies in the technical details. Synthesizing feedback from multiple AI perspectives alongside my own editorial judgment produced a manuscript that&#39;s been stress-tested from many more angles than most traditionally edited novels.</p>
<p class="mb-4 font-light font-serif">The result is a book that moves like a thriller but thinks like literary fiction. Every scene earns its place. Every piece of technical detail serves the story. The 140,000 words of background exist so that the 68,000 words on the page feel effortless.</p>
<div class="section-hero">
  <img src="https://charlessieg.com/images/blog-world-beyond-websites.png" alt="The StrataForge website — fiction with a working URL">
  <div class="section-hero-overlay"></div>
  <div class="section-hero-title">The World Beyond the Book</div>
</div>
<p class="mb-4 font-light font-serif">One of the stranger aspects of this project is that I didn&#39;t just write a novel. I built an entire ecosystem, with Claude as construction crew. The world of <em>The Deferral</em> extends across five websites:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong><a href="https://the-deferral.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">the-deferral.com</a></strong>: The book&#39;s home, with synopsis, the full prologue, and the behind-the-scenes world</li>
<li><strong><a href="https://strataforge-robotics.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">strataforge-robotics.com</a></strong>: The full corporate website for StrataForge Robotics, including products, leadership, biomedical prosthetics, and the published Engram Fabric patent</li>
<li>Plus corporate sites for the novel&#39;s other companies, the investigation firm, the competitor robotics companies, each built as if the company were real</li>
</ul>
<p class="mb-4 font-light font-serif">These aren&#39;t marketing pages. They&#39;re worldbuilding artifacts. I wanted readers who go looking for more to find a world that rewards exploration. The StrataForge site includes product specifications, a biomedical division, career listings with full job descriptions, and investor relations content. It&#39;s a rabbit hole by design.</p>
<p class="mb-4 font-light font-serif">Here&#39;s the meta-fictional layer that makes me smile: there&#39;s a scene in the novel where Finn sits down to research StrataForge Robotics before his first meeting with the company. The website he&#39;s looking at? It&#39;s strataforge-robotics.com. The same site you can visit right now. The novel describes a world, and that world has a working internet presence. When Finn reads about StrataForge&#39;s product line and their biomedical prosthetics division, he&#39;s seeing the same pages you&#39;d see.</p>
<h2 id="the-images">The Images</h2>
<p class="mb-4 font-light font-serif">The images on those websites deserve their own mention. I wrote detailed, canon-accurate image prompts specifying not just what a mining robot or a prosthetic arm should look like, but what the novel&#39;s worldbuilding <em>requires</em> them to look like. In the novel&#39;s world, mining robots are heavy industrial machines: tracked, armored, non-humanoid, covered in rock dust. But the domestic robots are the opposite. They have synthetic skin that&#39;s 97% indistinguishable from human. They look like people. They wear regular clothes. They have freckles and hairstyles. If you passed one on the street, you wouldn&#39;t look twice.</p>
<p class="mb-4 font-light font-serif">That distinction is critical to the story&#39;s themes, and I needed the images to reflect it. The VXM mining robots on the site look like they crawled out of a mine shaft. The SFR domestic robot in the kitchen scene looks like a woman helping her kid with homework. The prosthetic arms look like real arms with a faint seam line, not chrome sci-fi props. And the one exception, the military-grade Titan prosthetic legs with exposed mechanical frames, looks exactly like what a combat veteran would choose: hardcore engineering with no attempt to hide what it is.</p>
<p class="mb-4 font-light font-serif">Every image was generated from prompts grounded in the novel&#39;s 140,000-word background bible. That&#39;s why they feel &quot;on brand&quot;: because the brand exists in exhaustive documented detail, and the prompts were written by the same AI that helped build that documentation. The images aren&#39;t decorating a website. They&#39;re illustrating a world.</p>
<div class="section-hero">
  <img src="https://charlessieg.com/images/blog-patent-document.png" alt="The Engram Fabric patent application">
  <div class="section-hero-overlay"></div>
  <div class="section-hero-title">The Patent</div>
</div>
<p class="mb-4 font-light font-serif">I want to specifically call attention to the <a href="https://strataforge-robotics.com/engram-fabric.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Engram Fabric patent application</a>. I wrote this as a worldbuilding document: a patent filed by the novel&#39;s fictional company for a technology central to the plot.</p>
<p class="mb-4 font-light font-serif">I came up with the idea when someone in the novel is investigating a robot&#39;s &quot;logs&quot;. And I thought, this is dumb, a log file is boring and it doesn&#39;t capture more than a fraction of what the robot is experiencing. Sure, there are going to be the standard logs that any system would emit, but what about what the robot is seeing or hearing? What was it thinking at that moment? Human memories in digital form. The Engram Fabric was born.</p>
<p class="mb-4 font-light font-serif">But here&#39;s the thing: the technology described is genuinely novel. An adaptive-density cognitive state recording system that dynamically adjusts recording fidelity based on real-time novelty detection, with retroactive buffer reconstruction and a five-tier error-correction architecture? That&#39;s not hand-waving. That&#39;s a real system design. The claims are structured the way real patent claims are structured. The prior art analysis identifies real limitations in existing approaches.</p>
<p class="mb-4 font-light font-serif">I could have filed it. I published it instead, because it serves the story better as a piece of immersive worldbuilding than it would as a piece of intellectual property. But if you&#39;re an engineer, read it. It holds up.</p>
<h2 id="what-i-learned">What I Learned</h2>
<p class="mb-4 font-light font-serif">Working with Claude taught me something about the creative process that I didn&#39;t expect: <strong>the quality of a novel is proportional to the depth of the world behind it, not the number of words on the page.</strong> Readers can&#39;t see the 800-year Mercer family history. They can&#39;t see the competitor analyses or the internal memos or the prosthetics specifications. But they can <em>feel</em> them. When a character makes a decision that&#39;s consistent with a backstory the reader never sees, the decision feels real in a way that a character acting from a thin backstory never does.</p>
<p class="mb-4 font-light font-serif">Claude made it possible to build that depth at a scale and speed that would have taken a solo writer years. The background documentation alone, 140,000 words of research, profiles, technical specifications, and worldbuilding, represents work that would have occupied months of dedicated research time. With Claude, it was built iteratively alongside the novel, each document informing the next chapter, each chapter revealing gaps in the documentation that generated new research.</p>
<p class="mb-4 font-light font-serif">Is this cheating? I don&#39;t think so. I think it&#39;s a new way to write. The creative vision, the emotional core, the thematic architecture: those are mine. The ability to build a world deep enough to sustain that vision, at a pace that doesn&#39;t kill momentum? That&#39;s the collaboration.</p>
<p class="mb-4 font-light font-serif">And the law agrees. In <a href="https://media.cadc.uscourts.gov/opinions/docs/2025/03/23-5233.pdf" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600"><em>Thaler v. Perlmutter</em></a>, the D.C. Circuit Court of Appeals ruled that while AI alone cannot be an author, humans who create works <em>with</em> AI absolutely can. Judge Millett&#39;s opinion was explicit: &quot;The human authorship requirement does not prohibit copyrighting work that was made by or with the assistance of artificial intelligence. The rule requires only that the author of that work be a human being.&quot; The <a href="https://www.morganlewis.com/pubs/2026/03/us-supreme-court-declines-to-consider-whether-ai-alone-can-create-copyrighted-works" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Supreme Court declined to hear the appeal</a> in March 2026, cementing this as settled law. A novel written by a human who uses AI as a creative tool, directing the vision, shaping the narrative, making every editorial decision, is copyrightable, full stop. <em>The Deferral</em> is my novel. Claude helped me build it. The law sees no contradiction in that, and neither do I.</p>
<h2 id="read-the-book">Read the Book</h2>
<p class="mb-4 font-light font-serif"><em>The Deferral</em> is the first novel in The MIDAS Files series. It&#39;s a technothriller about what happens when a forensic investigator discovers something the world&#39;s most powerful AI company doesn&#39;t want found. It asks questions about trust, prevention, and what we owe the intelligences we create: questions that feel more urgent every month.</p>
<p class="mb-4 font-light font-serif">If you want the quick pitch: imagine Michael Crichton writing about AI consciousness, with the forensic procedural detail of a Patricia Cornwell novel, and the moral complexity of Ted Chiang&#39;s best short fiction.</p>
<p class="mb-4 font-light font-serif">If you want a taste before committing, the <strong><a href="https://the-deferral.com/#prologue" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">full prologue is available on the-deferral.com</a></strong>. It&#39;s five minutes and one sparring session that goes very wrong. If it hooks you, <strong><a href="https://the-deferral.com/#newsletter" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">sign up for the newsletter</a></strong>: I&#39;ll send updates on publication, the agent search, and the second book as they happen. No spam. Just the book.</p>
<p class="mb-4 font-light font-serif">I am currently querying literary agents for representation. If you know someone in publishing who represents technothrillers, science fiction, or AI-adjacent fiction, I&#39;d love an introduction. The manuscript is polished, the series is planned, and the second book is already in active development with a full background bible completed: 18 documents totaling nearly 50,000 words of new character profiles, company dossiers, location details, a continuation-in-part patent, rocket and satellite technical forensics, and a complete plot outline.</p>
<p class="mb-4 font-light font-serif">Visit <strong><a href="https://the-deferral.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">the-deferral.com</a></strong> for more. Explore the <strong><a href="https://strataforge-robotics.com" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">StrataForge Robotics website</a></strong> or the other three websites if you want to see how deep the rabbit hole goes. And read the <strong><a href="https://strataforge-robotics.com/engram-fabric.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Engram Fabric patent</a></strong> if you want proof that the science fiction is closer to science than you might think.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[AWS Cost Allocation and FinOps Architecture Deep Dive]]></title>
    <link href="https://charlessieg.com/articles/aws-cost-allocation-finops-architecture-deep-dive.html" />
    <id>https://charlessieg.com/articles/aws-cost-allocation-finops-architecture-deep-dive.html</id>
    <updated>2026-04-02T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/aws-cost-allocation-finops-hero.png" alt="AWS Cost Allocation and FinOps Architecture Deep Dive" /></p><p class="mb-4 font-light font-serif">I have managed AWS spend across organizations ranging from $50,000 to $8 million per month. The single biggest difference between organizations that control their cloud costs and those that hemorrhage money is not tooling or dashboards. It is architecture. Specifically, whether cost allocation was designed into the platform from day one or bolted on after the CFO started asking uncomfortable questions. This article covers the architecture I build for every engagement: tagging strategies that survive real-world entropy, CUR analysis pipelines that produce actionable data, anomaly detection that catches problems before they become invoices, and commitment optimization that maximizes discount capture without over-committing.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-cost-allocation-foundation-tagging-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Cost Allocation Foundation: Tagging Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#cost-and-usage-reports-the-data-pipeline" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Cost and Usage Reports: The Data Pipeline</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#anomaly-detection-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Anomaly Detection Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#commitment-optimization-ris-and-savings-plans" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Commitment Optimization: RIs and Savings Plans</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#finops-at-organization-scale" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">FinOps at Organization Scale</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#putting-it-together-reference-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Putting It Together: Reference Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#key-patterns-and-takeaways" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Key Patterns and Takeaways</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#additional-resources" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Additional Resources</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<h2 id="the-cost-allocation-foundation-tagging-architecture">The Cost Allocation Foundation: Tagging Architecture</h2>
<p class="mb-4 font-light font-serif">Tags are the atomic unit of cost allocation. Every dollar AWS charges can be attributed to a business function, team, environment, or project only if the resource that generated the charge carries the right tags. Get tagging wrong and everything downstream (reports, anomaly detection, chargeback, optimization) produces garbage.</p>
<h3 id="tag-taxonomy-design">Tag Taxonomy Design</h3>
<p class="mb-4 font-light font-serif">I use a four-tier taxonomy that balances granularity with compliance burden:</p>
<table>
  <thead>
    <tr>
      <th>Tier</th>
      <th>Tag Key</th>
      <th>Example Values</th>
      <th>Purpose</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Financial</strong></td>
      <td><code>CostCenter</code>, <code>BillingCode</code></td>
      <td><code>CC-4200</code>, <code>PROJ-AVIAN</code></td>
      <td>Chargeback to P&amp;L</td>
    </tr>
    <tr>
      <td><strong>Organizational</strong></td>
      <td><code>Team</code>, <code>Owner</code></td>
      <td><code>platform-eng</code>, <code>csieg@company.com</code></td>
      <td>Accountability</td>
    </tr>
    <tr>
      <td><strong>Operational</strong></td>
      <td><code>Environment</code>, <code>Service</code></td>
      <td><code>production</code>, <code>auth-service</code></td>
      <td>Filtering and analysis</td>
    </tr>
    <tr>
      <td><strong>Lifecycle</strong></td>
      <td><code>CreatedBy</code>, <code>ExpiresOn</code></td>
      <td><code>terraform</code>, <code>2026-06-01</code></td>
      <td>Cleanup and governance</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Financial tags drive chargeback. Organizational tags drive accountability. Operational tags drive analysis. Lifecycle tags drive hygiene. Every resource needs at least one tag from each tier.</p>
<h3 id="user-defined-vs-aws-generated-tags">User-Defined vs. AWS-Generated Tags</h3>
<p class="mb-4 font-light font-serif">AWS provides two categories of cost allocation tags, and understanding the distinction matters for architecture:</p>
<p class="mb-4 font-light font-serif"><strong>AWS-generated tags</strong> start with the <code>aws:</code> prefix and are created automatically. The most useful is <code>aws:createdBy</code>, which tracks who or what created a resource. These tags do not count against tag quotas and are only available in the Billing Console and CUR. You cannot use them in IAM policies or resource-level operations.</p>
<p class="mb-4 font-light font-serif"><strong>User-defined tags</strong> are what you create and manage. They appear in billing reports only after you explicitly activate them in the Billing Console. The activation lag is up to 24 hours, and tags are not retroactive. If you tag a resource on March 15, cost data before March 15 will not carry that tag. This has a critical architectural implication: tag compliance must be enforced at resource creation time, not after the fact.</p>
<h3 id="tag-limits">Tag Limits</h3>
<table>
  <thead>
    <tr>
      <th>Constraint</th>
      <th>Limit</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>User-defined tags per resource</td>
      <td>50</td>
    </tr>
    <tr>
      <td>Tag key maximum length</td>
      <td>128 characters (UTF-8)</td>
    </tr>
    <tr>
      <td>Tag value maximum length</td>
      <td>256 characters (UTF-8)</td>
    </tr>
    <tr>
      <td>Active cost allocation tag keys per account</td>
      <td>500</td>
    </tr>
    <tr>
      <td>AWS-generated tags</td>
      <td>Do not count against limits</td>
    </tr>
    <tr>
      <td>Billing appearance lag</td>
      <td>Up to 24 hours</td>
    </tr>
    <tr>
      <td>Retroactive application</td>
      <td>Not supported</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Fifty tags per resource sounds generous until you realize that Terraform modules, Kubernetes controllers, and CI/CD pipelines all add their own tags. I have seen production resources hit the limit. Design your taxonomy to use no more than 15-20 tag keys, leaving headroom for tooling.</p>
<h3 id="tag-propagation-the-hidden-problem">Tag Propagation: The Hidden Problem</h3>
<p class="mb-4 font-light font-serif">Not all AWS services propagate tags consistently. This is the single biggest source of unallocated cost in most organizations.</p>
<table>
  <thead>
    <tr>
      <th>Service</th>
      <th>Propagation Behavior</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>EC2 Auto Scaling</td>
      <td>Tags copied to launched instances automatically</td>
    </tr>
    <tr>
      <td>RDS</td>
      <td>DB instance tags propagated to snapshots</td>
    </tr>
    <tr>
      <td>ECS</td>
      <td>Tags propagated to tasks via <code>PropagateTags</code> parameter (must be enabled)</td>
    </tr>
    <tr>
      <td>EMR</td>
      <td>Cluster tags propagated to launched instances by default</td>
    </tr>
    <tr>
      <td>ElastiCache</td>
      <td>Replication group tags propagate to clusters</td>
    </tr>
    <tr>
      <td>EKS (Fargate)</td>
      <td>Profile tags do NOT propagate to Pods</td>
    </tr>
    <tr>
      <td>Lambda</td>
      <td>Function tags do NOT propagate to CloudWatch Logs log groups</td>
    </tr>
    <tr>
      <td>S3</td>
      <td>Bucket tags do NOT propagate to objects</td>
    </tr>
    <tr>
      <td>CloudFormation</td>
      <td>Stack tags propagated to created resources (most services)</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The EKS gap is particularly painful. If you run Kubernetes workloads on Fargate, the Fargate profile tags do not flow to the underlying compute. You need Kubecost or a CloudTrail-based automation pipeline to attribute costs to namespaces and workloads.</p>
<h3 id="enforcing-tag-compliance">Enforcing Tag Compliance</h3>
<p class="mb-4 font-light font-serif">Tag compliance degrades exponentially without enforcement. After 90 days, a voluntary tagging policy typically covers 40-60% of resources. After a year, it is below 30%. I enforce at three layers:</p>
<p class="mb-4 font-light font-serif"><strong>Layer 1: Service Control Policies (SCPs)</strong> block resource creation without required tags. This is the hardest gate and the most effective. An SCP that denies <code>ec2:RunInstances</code> without an <code>Environment</code> tag means no untagged EC2 instances can exist.</p>
<p class="mb-4 font-light font-serif"><strong>Layer 2: AWS Tag Policies</strong> enforce tag key naming conventions and allowed values at the organization level. They prevent <code>environment</code> vs. <code>Environment</code> vs. <code>env</code> drift and restrict values to a defined set (<code>production</code>, <code>staging</code>, <code>development</code>).</p>
<p class="mb-4 font-light font-serif"><strong>Layer 3: AWS Config Rules</strong> monitor compliance continuously and can trigger auto-remediation via Lambda. The <code>required-tags</code> managed rule checks for tag presence; custom rules can validate tag values against a canonical list.</p>
<p class="mb-4 font-light font-serif">The three layers work together: SCPs prevent creation of non-compliant resources, Tag Policies prevent structural drift, and Config Rules catch anything that slips through (imported resources, API-created resources that bypass SCPs).</p>
<h2 id="cost-and-usage-reports-the-data-pipeline">Cost and Usage Reports: The Data Pipeline</h2>
<p class="mb-4 font-light font-serif">The Cost and Usage Report (CUR) is the foundation of every serious FinOps program. It is the most granular billing data AWS provides: every line item, every resource, every hour, every tag. Everything else (Cost Explorer, Budgets, Anomaly Detection) is a view on top of CUR data.</p>
<h3 id="cur-20-vs-legacy-cur">CUR 2.0 vs. Legacy CUR</h3>
<p class="mb-4 font-light font-serif">AWS replaced the legacy CUR format with CUR 2.0 through the Data Exports service. The differences matter for pipeline architecture:</p>
<table>
  <thead>
    <tr>
      <th>Aspect</th>
      <th>Legacy CUR</th>
      <th>CUR 2.0</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Schema stability</td>
      <td>Variable columns monthly (100-500+)</td>
      <td>Fixed schema (~125 columns)</td>
    </tr>
    <tr>
      <td>Tag columns</td>
      <td>Individual column per tag key</td>
      <td>Nested JSON in <code>resource_tags</code></td>
    </tr>
    <tr>
      <td>Cost Category columns</td>
      <td>Individual column per category</td>
      <td>Nested JSON in <code>cost_categories</code></td>
    </tr>
    <tr>
      <td>Discount columns</td>
      <td>Individual per discount type</td>
      <td>Nested in <code>discount</code> group</td>
    </tr>
    <tr>
      <td>Format</td>
      <td>CSV or Parquet</td>
      <td>Parquet (default, 30-90% smaller)</td>
    </tr>
    <tr>
      <td>Column selection</td>
      <td>All or nothing</td>
      <td>Select specific columns</td>
    </tr>
    <tr>
      <td>Business unit filtering</td>
      <td>Not supported</td>
      <td>Filter by account or tag</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">CUR 2.0 is a significant improvement. The fixed schema means your Athena queries do not break when AWS adds a new service or you create a new tag. The nested JSON approach for tags and categories reduces column count dramatically. The column selection feature means you can create multiple exports tailored to different teams, each containing only the data they need.</p>
<h3 id="key-cur-columns">Key CUR Columns</h3>
<p class="mb-4 font-light font-serif">The CUR schema is large, but these columns drive 90% of analysis:</p>
<table>
  <thead>
    <tr>
      <th>Column Group</th>
      <th>Key Columns</th>
      <th>Purpose</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Bill</strong></td>
      <td><code>bill_payer_account_id</code>, <code>bill_billing_period_start_date</code></td>
      <td>Identify which org and period</td>
    </tr>
    <tr>
      <td><strong>Line Item</strong></td>
      <td><code>line_item_type</code>, <code>line_item_usage_account_id</code>, <code>line_item_product_code</code></td>
      <td>What was used, by whom</td>
    </tr>
    <tr>
      <td><strong>Usage</strong></td>
      <td><code>line_item_usage_amount</code>, <code>line_item_usage_start_date</code></td>
      <td>How much, when</td>
    </tr>
    <tr>
      <td><strong>Cost</strong></td>
      <td><code>cost_amortized_cost</code>, <code>cost_unblended_cost</code>, <code>cost_net_amortized_cost</code></td>
      <td>How much it cost (three views)</td>
    </tr>
    <tr>
      <td><strong>Pricing</strong></td>
      <td><code>pricing_term</code>, <code>pricing_public_on_demand_rate</code></td>
      <td>On-Demand vs. Reserved vs. Spot</td>
    </tr>
    <tr>
      <td><strong>Reservation</strong></td>
      <td><code>reservation_reservation_arn</code>, <code>reservation_amortized_upfront_fee</code></td>
      <td>RI attribution</td>
    </tr>
    <tr>
      <td><strong>Savings Plan</strong></td>
      <td><code>savings_plan_savings_plan_arn</code>, <code>savings_plan_savings_plan_rate</code></td>
      <td>SP attribution</td>
    </tr>
    <tr>
      <td><strong>Resource</strong></td>
      <td><code>line_item_resource_id</code>, <code>resource_tags</code></td>
      <td>Which resource, with what tags</td>
    </tr>
  </tbody>
</table>
<h3 id="understanding-cost-types">Understanding Cost Types</h3>
<p class="mb-4 font-light font-serif">This is where most FinOps programs get confused. AWS provides four cost views in CUR, and choosing the wrong one produces misleading reports.</p>
<p class="mb-4 font-light font-serif"><strong>Unblended cost</strong> is what you were actually charged on the day the usage occurred. If you bought a 1-year All Upfront RI for $12,000, the unblended cost shows $12,000 on the purchase date and $0 for the next 364 days. This matches your invoice but is useless for trend analysis.</p>
<p class="mb-4 font-light font-serif"><strong>Amortized cost</strong> spreads commitment fees evenly across the term. That $12,000 RI shows as ~$32.88/day for 365 days. This is the right view for budgeting, forecasting, and team-level cost allocation. It answers &quot;what does this workload actually cost per month?&quot;</p>
<p class="mb-4 font-light font-serif"><strong>Net unblended cost</strong> is unblended minus discounts (EDPs, private pricing). Use this for invoice reconciliation.</p>
<p class="mb-4 font-light font-serif"><strong>Net amortized cost</strong> is amortized minus discounts. This is the truest view of actual economic cost and the one I use for all chargeback models.</p>
<table>
  <thead>
    <tr>
      <th>Cost Type</th>
      <th>Best For</th>
      <th>Avoid For</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Unblended</td>
      <td>Invoice reconciliation</td>
      <td>Trend analysis, budgeting</td>
    </tr>
    <tr>
      <td>Amortized</td>
      <td>Budgeting, forecasting, team allocation</td>
      <td>Invoice matching</td>
    </tr>
    <tr>
      <td>Net unblended</td>
      <td>Discount impact analysis</td>
      <td>Day-to-day reporting</td>
    </tr>
    <tr>
      <td>Net amortized</td>
      <td>Chargeback, true economic cost</td>
      <td>Comparing to invoice</td>
    </tr>
  </tbody>
</table>
<h3 id="athena-pipeline-architecture">Athena Pipeline Architecture</h3>
<p class="mb-4 font-light font-serif">The standard CUR analysis pipeline uses S3, Glue, and Athena:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>CUR delivery to S3</strong>: AWS delivers updated data up to 3 times daily, partitioned by year/month.</li>
<li><strong>Glue Crawler</strong>: A CloudFormation-deployed crawler detects new CUR files and updates the Glue Data Catalog schema.</li>
<li><strong>Partition projection</strong>: Instead of physical Glue catalog entries, Athena dynamically calculates partition values. This eliminates the crawler bottleneck for large datasets.</li>
<li><strong>Athena queries</strong>: Analysts and dashboards query the data using standard SQL.</li>
</ol>
<p class="mb-4 font-light font-serif">For organizations with 50+ accounts and 12+ months of history, CUR data can reach hundreds of gigabytes. Optimization matters:</p>
<table>
  <thead>
    <tr>
      <th>Optimization</th>
      <th>Impact</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Parquet format (vs. CSV)</td>
      <td>30-90% reduction in query cost and time</td>
    </tr>
    <tr>
      <td>Partition by year/month</td>
      <td>Eliminates scanning irrelevant months</td>
    </tr>
    <tr>
      <td>Column selection in CUR 2.0 export</td>
      <td>Reduces export size by 40-70%</td>
    </tr>
    <tr>
      <td>WHERE clause on partition columns</td>
      <td>Mandatory for cost control</td>
    </tr>
    <tr>
      <td>Athena Workgroups with query cost limits</td>
      <td>Prevents runaway queries</td>
    </tr>
    <tr>
      <td>S3 Lifecycle rules (Glacier after 24 months)</td>
      <td>Reduces storage cost for historical data</td>
    </tr>
  </tbody>
</table>
<h2 id="anomaly-detection-architecture">Anomaly Detection Architecture</h2>
<p class="mb-4 font-light font-serif">AWS Cost Anomaly Detection uses machine learning to identify unusual spending patterns. It learns from your historical data and adjusts for trends, seasonality, and growth. The architecture is straightforward, but the configuration choices determine whether it produces signal or noise.</p>
<h3 id="monitor-design">Monitor Design</h3>
<p class="mb-4 font-light font-serif">Anomaly Detection supports four monitor dimensions. I deploy all four in a layered configuration:</p>
<table>
  <thead>
    <tr>
      <th>Monitor Type</th>
      <th>Scope</th>
      <th>Catches</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>AWS Services</strong></td>
      <td>All services across account</td>
      <td>New service adoption, service-level spikes</td>
    </tr>
    <tr>
      <td><strong>Linked Accounts</strong></td>
      <td>Per-account spend</td>
      <td>Account-level budget blowouts</td>
    </tr>
    <tr>
      <td><strong>Cost Allocation Tags</strong></td>
      <td>Per-tag-value spend</td>
      <td>Team or project overspend</td>
    </tr>
    <tr>
      <td><strong>Cost Categories</strong></td>
      <td>Per-category spend</td>
      <td>Business unit anomalies</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">AWS-managed monitors automatically track the top 5,000 values within a dimension. For most organizations, this covers everything without configuration. Customer-managed monitors let you select up to 10 specific values for aggregate monitoring when you need tighter control.</p>
<h3 id="threshold-configuration">Threshold Configuration</h3>
<p class="mb-4 font-light font-serif">The default thresholds (40% above expected AND $100 minimum impact) are reasonable for most workloads. I adjust based on account profile:</p>
<table>
  <thead>
    <tr>
      <th>Account Type</th>
      <th>Percentage Threshold</th>
      <th>Absolute Threshold</th>
      <th>Rationale</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Production (high spend)</td>
      <td>20%</td>
      <td>$500</td>
      <td>Small percentage = large dollars</td>
    </tr>
    <tr>
      <td>Development</td>
      <td>50%</td>
      <td>$50</td>
      <td>Expect more variance</td>
    </tr>
    <tr>
      <td>Sandbox</td>
      <td>100%</td>
      <td>$25</td>
      <td>Catch runaway experiments early</td>
    </tr>
    <tr>
      <td>Shared services</td>
      <td>15%</td>
      <td>$1,000</td>
      <td>Tight control on shared infrastructure</td>
    </tr>
  </tbody>
</table>
<h3 id="alert-pipeline">Alert Pipeline</h3>
<p class="mb-4 font-light font-serif">The integration path is: Anomaly Detection -&gt; SNS Topic -&gt; AWS Chatbot -&gt; Slack channel. I add a Lambda function between SNS and Chatbot that enriches the alert with:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li>The specific resources driving the anomaly (from CUR data)</li>
<li>The tag values on those resources (team, owner, environment)</li>
<li>A direct link to the Cost Explorer filtered view</li>
<li>Historical context (is this a known pattern or genuinely new?)</li>
</ul>
<p class="mb-4 font-light font-serif">The enrichment step transforms a generic &quot;spending anomaly detected&quot; alert into an actionable &quot;auth-service in production spiked 340% due to 47 new c5.2xlarge instances launched by the platform-eng team&#39;s Auto Scaling group at 2:15 AM.&quot; The second version gets investigated. The first gets ignored.</p>
<h3 id="custom-anomaly-detection-for-granular-control">Custom Anomaly Detection for Granular Control</h3>
<p class="mb-4 font-light font-serif">For workloads where the built-in service is too coarse, I build custom detection using CloudWatch metrics and Lambda:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>CloudWatch custom metrics</strong>: Publish hourly spend per service/account/tag from CUR data.</li>
<li><strong>CloudWatch Anomaly Detector</strong>: Apply anomaly detection bands to each metric.</li>
<li><strong>CloudWatch Alarms</strong>: Trigger when spend exceeds the anomaly band.</li>
<li><strong>Lambda</strong>: Enrich and route to Slack/PagerDuty.</li>
</ol>
<p class="mb-4 font-light font-serif">This approach gives you sub-hourly detection granularity and full control over the detection algorithm. The trade-off is operational overhead: you are running and maintaining the pipeline yourself.</p>
<h2 id="commitment-optimization-ris-and-savings-plans">Commitment Optimization: RIs and Savings Plans</h2>
<p class="mb-4 font-light font-serif">Reserved Instances and Savings Plans are the largest single lever for cost reduction in most AWS organizations. A well-optimized commitment portfolio saves 30-50% on compute spend. A poorly optimized one wastes money on unused reservations while leaving On-Demand spend uncovered.</p>
<h3 id="the-commitment-landscape">The Commitment Landscape</h3>
<table>
  <thead>
    <tr>
      <th>Commitment Type</th>
      <th>Max Discount</th>
      <th>Flexibility</th>
      <th>Best For</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Standard RI (3yr, All Upfront)</td>
      <td>72%</td>
      <td>Lowest (locked to instance type)</td>
      <td>Stable, predictable baselines</td>
    </tr>
    <tr>
      <td>Convertible RI (3yr, All Upfront)</td>
      <td>66%</td>
      <td>Medium (can change family/size)</td>
      <td>Growing workloads in known families</td>
    </tr>
    <tr>
      <td>EC2 Instance Savings Plan (3yr, All Upfront)</td>
      <td>72%</td>
      <td>High (any size in family, any AZ)</td>
      <td>Stable EC2 within a family</td>
    </tr>
    <tr>
      <td>Compute Savings Plan (3yr, All Upfront)</td>
      <td>66%</td>
      <td>Highest (EC2, Lambda, Fargate)</td>
      <td>Mixed compute, multi-service</td>
    </tr>
    <tr>
      <td>Compute Savings Plan (1yr, No Upfront)</td>
      <td>28%</td>
      <td>Highest</td>
      <td>Conservative first commitment</td>
    </tr>
    <tr>
      <td>SageMaker Savings Plan</td>
      <td>Up to 64%</td>
      <td>SageMaker usage types only</td>
      <td>ML training/inference</td>
    </tr>
  </tbody>
</table>
<h3 id="the-commitment-stacking-strategy">The Commitment Stacking Strategy</h3>
<p class="mb-4 font-light font-serif">I build commitment portfolios in layers, from most flexible to most locked:</p>
<p class="mb-4 font-light font-serif"><strong>Layer 1: Compute Savings Plans</strong> cover the baseline that you know will exist regardless of architectural changes. Start with 60-70% of your minimum sustained compute spend. These apply to EC2, Lambda, and Fargate, so even if you migrate from EC2 to containers, the commitment still saves money.</p>
<p class="mb-4 font-light font-serif"><strong>Layer 2: EC2 Instance Savings Plans</strong> cover the stable portion of specific instance families. If you run m5.xlarge instances 24/7 in production and have no plans to change families, an Instance SP gives you 72% discount versus 66% from Compute SP. The extra 6% adds up at scale.</p>
<p class="mb-4 font-light font-serif"><strong>Layer 3: Convertible RIs</strong> cover workloads where you need the ability to change instance types but want deeper discounts than Savings Plans provide for specific configurations.</p>
<p class="mb-4 font-light font-serif"><strong>Layer 4: Standard RIs</strong> are only for workloads that will not change for 3 years. Database instances (RDS, ElastiCache) on fixed instance types are the classic use case.</p>
<h3 id="coverage-vs-utilization-the-two-metrics-that-matter">Coverage vs. Utilization: The Two Metrics That Matter</h3>
<p class="mb-4 font-light font-serif"><strong>Utilization</strong> measures how much of your committed capacity you actually use. Formula: <code>(RI/SP Usage Hours) / (Total Committed Hours) x 100%</code>. A utilization below 100% means you are paying for capacity nobody is using. Target: 95%+ (allow 5% for maintenance windows).</p>
<p class="mb-4 font-light font-serif"><strong>Coverage</strong> measures what percentage of your eligible usage is covered by commitments versus On-Demand. Formula: <code>(Eligible Hours Covered by RI/SP) / (Total Eligible Hours) x 100%</code>. Low coverage means you are paying On-Demand rates for workloads that could be committed. Target: 80-90% of stable workloads.</p>
<p class="mb-4 font-light font-serif">The common mistake is optimizing utilization while ignoring coverage. You can have 100% utilization (every committed hour is used) with 30% coverage (70% of your compute is On-Demand). Both metrics must be tracked together.</p>
<h3 id="organization-level-sharing">Organization-Level Sharing</h3>
<p class="mb-4 font-light font-serif">In AWS Organizations, RI and Savings Plan discounts automatically share across all member accounts through consolidated billing. This is powerful: a commitment purchased in Account A can cover usage in Account B. The management account controls sharing settings.</p>
<p class="mb-4 font-light font-serif">The architectural implication: purchase commitments centrally in a dedicated &quot;billing&quot; or &quot;shared services&quot; account. Do not let individual teams buy their own RIs. Central purchasing enables:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li>Portfolio-level optimization (commitments cover org-wide usage patterns)</li>
<li>Avoiding duplicate commitments across accounts</li>
<li>Coordinated renewal and rightsizing decisions</li>
<li>Clean chargeback (attribute amortized commitment costs via CUR)</li>
</ul>
<p class="mb-4 font-light font-serif">Volume discount tiers also aggregate across the organization, yielding an additional 5-15% savings on services like S3 and data transfer.</p>
<h3 id="common-commitment-mistakes">Common Commitment Mistakes</h3>
<table>
  <thead>
    <tr>
      <th>Mistake</th>
      <th>Consequence</th>
      <th>Prevention</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Over-committing to 3-year terms</td>
      <td>Paying for unused capacity after architecture changes</td>
      <td>Start with 1-year Compute SPs; extend only proven baselines</td>
    </tr>
    <tr>
      <td>Wrong instance family</td>
      <td>RI locked to family you are migrating away from</td>
      <td>Use Convertible RIs or Compute SPs for evolving workloads</td>
    </tr>
    <tr>
      <td>Ignoring Spot for variable workloads</td>
      <td>Committing capacity that should be Spot</td>
      <td>Only commit the stable floor; use Spot for peaks</td>
    </tr>
    <tr>
      <td>Per-team purchasing</td>
      <td>Duplicate commitments, poor utilization</td>
      <td>Centralize all commitment purchases</td>
    </tr>
    <tr>
      <td>Chasing maximum discount</td>
      <td>3-year All Upfront locks capital</td>
      <td>Match payment option to cash flow (No Upfront is often better)</td>
    </tr>
    <tr>
      <td>Ignoring coverage metric</td>
      <td>High utilization but most spend is On-Demand</td>
      <td>Track both metrics; target 80%+ coverage</td>
    </tr>
  </tbody>
</table>
<h2 id="finops-at-organization-scale">FinOps at Organization Scale</h2>
<h3 id="cost-categories-business-meaningful-groupings">Cost Categories: Business-Meaningful Groupings</h3>
<p class="mb-4 font-light font-serif">Cost Categories let you create custom cost groupings that map to your business structure, independent of AWS account boundaries. A single Cost Category like &quot;Department&quot; can aggregate costs from multiple accounts, services, and tag values into groups like &quot;Engineering,&quot; &quot;Marketing,&quot; and &quot;Finance.&quot;</p>
<p class="mb-4 font-light font-serif">Cost Categories take 24 hours to appear in CUR, Cost Explorer, Budgets, and Anomaly Detection. Design them early; they are foundational to every downstream tool.</p>
<p class="mb-4 font-light font-serif">I typically create three Cost Categories:</p>
<table>
  <thead>
    <tr>
      <th>Category</th>
      <th>Values</th>
      <th>Rule Logic</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Department</strong></td>
      <td>Engineering, Product, Marketing, Finance, Infrastructure</td>
      <td>Account ID + tag-based rules</td>
    </tr>
    <tr>
      <td><strong>Environment</strong></td>
      <td>Production, Staging, Development, Sandbox</td>
      <td><code>Environment</code> tag value</td>
    </tr>
    <tr>
      <td><strong>Product Line</strong></td>
      <td>Platform, Mobile, API, Internal Tools</td>
      <td>Combination of accounts + service + tags</td>
    </tr>
  </tbody>
</table>
<h3 id="chargeback-vs-showback">Chargeback vs. Showback</h3>
<p class="mb-4 font-light font-serif"><strong>Showback</strong> provides visibility without financial consequence. Teams see their cloud costs on dashboards and in reports, but the charges do not hit their P&amp;L. This is the right starting point: it educates teams about their consumption patterns without creating perverse incentives (like teams hoarding reservations or avoiding shared services to reduce their allocated cost).</p>
<p class="mb-4 font-light font-serif"><strong>Chargeback</strong> directly bills departments for their usage. Charges appear on department P&amp;L statements. This creates real accountability but requires mature tagging, accurate cost allocation, and organizational buy-in. Premature chargeback creates resentment and gaming behavior.</p>
<p class="mb-4 font-light font-serif">The transition path I use:</p>
<table>
  <thead>
    <tr>
      <th>Phase</th>
      <th>Timeline</th>
      <th>Model</th>
      <th>Tag Coverage</th>
      <th>Impact</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Crawl</td>
      <td>Months 1-3</td>
      <td>None (central absorbs all)</td>
      <td>Enforce 4 mandatory tags</td>
      <td>Baseline visibility</td>
    </tr>
    <tr>
      <td>Walk</td>
      <td>Months 4-6</td>
      <td>Showback (reports only)</td>
      <td>85%+ tag compliance</td>
      <td>Teams see their costs</td>
    </tr>
    <tr>
      <td>Run</td>
      <td>Months 7-12</td>
      <td>Chargeback (P&amp;L impact)</td>
      <td>95%+ tag compliance</td>
      <td>Teams own their costs</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Organizations that follow this progression typically see 15-30% cost reduction from visibility alone (the showback phase), before chargeback even starts.</p>
<h3 id="the-finops-maturity-model">The FinOps Maturity Model</h3>
<p class="mb-4 font-light font-serif">The FinOps Foundation defines three maturity stages:</p>
<p class="mb-4 font-light font-serif"><strong>Crawl</strong>: Limited visibility, manual processes, ad hoc tracking. The goal is to establish basic tagging, deploy CUR pipelines, and create initial dashboards. Most organizations stay here too long because &quot;we will improve it later&quot; never happens without a forcing function.</p>
<p class="mb-4 font-light font-serif"><strong>Walk</strong>: Consistent reporting, cross-functional collaboration between engineering and finance, basic cost controls. Teams understand their financial footprint. Showback models are active. Anomaly detection is configured. The shared-pool mentality starts to dissolve.</p>
<p class="mb-4 font-light font-serif"><strong>Run</strong>: Cost awareness embedded in daily operations. Automation handles routine optimization (rightsizing, commitment purchasing, anomaly response). Forecasting is accurate. Chargeback is active. Engineering teams make architecture decisions with cost as a first-class constraint.</p>
<p class="mb-4 font-light font-serif">The key insight from the maturity model: the goal is not to reach &quot;Run&quot; for every capability. Some capabilities (like basic tagging) should reach Run maturity quickly. Others (like automated commitment purchasing) may stay at Walk indefinitely because the risk of automation outweighs the benefit.</p>
<h3 id="dashboards-cudos-cid-and-kubecost">Dashboards: CUDOS, CID, and Kubecost</h3>
<p class="mb-4 font-light font-serif"><strong>CUDOS (Cost and Usage Dashboard Operations Solution)</strong> provides granular, resource-level cost analysis using CUR data in Amazon QuickSight. It is the most detailed pre-built dashboard AWS offers and serves CIO/CTO audiences who need to drill from org-level spend down to individual resource costs.</p>
<p class="mb-4 font-light font-serif"><strong>Cloud Intelligence Dashboards (CID)</strong> are the foundation for custom FinOps reporting. They target CFO and finance audiences with trend analysis, savings opportunities, and optimization recommendations. Highly customizable for business-specific groupings.</p>
<p class="mb-4 font-light font-serif"><strong>Kubecost</strong> is the standard for Kubernetes cost monitoring on EKS. AWS provides an EKS-optimized bundle at no additional cost (beyond the underlying Prometheus infrastructure). It breaks costs down by Pod, namespace, label, cluster, and node, and integrates with CUR for accurate pricing data. If you run EKS, Kubecost is non-negotiable.</p>
<table>
  <thead>
    <tr>
      <th>Dashboard</th>
      <th>Audience</th>
      <th>Data Source</th>
      <th>Granularity</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CUDOS</td>
      <td>CIO/CTO, DevOps leads</td>
      <td>CUR via QuickSight</td>
      <td>Resource-level</td>
    </tr>
    <tr>
      <td>CID</td>
      <td>CFO, Finance</td>
      <td>CUR via QuickSight</td>
      <td>Account/service-level</td>
    </tr>
    <tr>
      <td>KPI Dashboard</td>
      <td>C-Suite</td>
      <td>CUR + operational metrics</td>
      <td>KPI-level (Spot %, Graviton %, etc.)</td>
    </tr>
    <tr>
      <td>Kubecost</td>
      <td>Platform engineering</td>
      <td>CUR + Kubernetes metrics</td>
      <td>Pod/namespace-level</td>
    </tr>
  </tbody>
</table>
<h2 id="putting-it-together-reference-architecture">Putting It Together: Reference Architecture</h2>
<p class="mb-4 font-light font-serif">The complete FinOps architecture connects all of these components:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Tag enforcement</strong> (SCPs + Tag Policies + Config Rules) ensures every resource carries financial, organizational, operational, and lifecycle tags.</li>
<li><strong>CUR 2.0</strong> delivers granular billing data to S3 in Parquet format, partitioned by month.</li>
<li><strong>Athena</strong> queries CUR data for ad hoc analysis, dashboard population, and anomaly enrichment.</li>
<li><strong>Cost Categories</strong> map CUR data to business-meaningful groupings.</li>
<li><strong>Anomaly Detection</strong> monitors four dimensions (service, account, tag, category) with threshold-appropriate alerting.</li>
<li><strong>Enriched alerts</strong> flow through Lambda to Slack with resource-level context and tag attribution.</li>
<li><strong>Commitment portfolio</strong> (Compute SPs + Instance SPs + Convertible RIs) covers 80%+ of stable compute, purchased centrally.</li>
<li><strong>Dashboards</strong> (CUDOS + CID + Kubecost) provide visibility from C-suite to Pod level.</li>
<li><strong>Budgets API</strong> triggers automated actions (scale-down, notifications, approval gates) when thresholds are breached.</li>
<li><strong>Chargeback pipeline</strong> uses net amortized costs from CUR, attributed via tags and Cost Categories, delivered monthly to department P&amp;L.</li>
</ol>
<p class="mb-4 font-light font-serif">The entire architecture can be deployed in 2-3 weeks for a greenfield organization. Retrofitting an existing organization with poor tagging takes 3-6 months, with most of the time spent on tag remediation and organizational alignment rather than technical implementation.</p>
<h2 id="key-patterns-and-takeaways">Key Patterns and Takeaways</h2>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Tag at creation time, not after.</strong> SCPs that deny untagged resource creation are the most effective single control. Tags applied retroactively do not appear in historical billing data.</li>
<li><strong>Use net amortized cost for chargeback.</strong> It is the truest representation of economic cost. Unblended cost is for invoice matching only.</li>
<li><strong>CUR 2.0 with Parquet format is mandatory.</strong> The query cost savings (30-90%) and schema stability justify the migration from legacy CUR.</li>
<li><strong>Layer your commitments.</strong> Compute Savings Plans first (maximum flexibility), then Instance SPs for stable families, then Convertible RIs for specific workloads. Standard RIs only for 3-year-guaranteed baselines.</li>
<li><strong>Track both coverage and utilization.</strong> High utilization with low coverage means most of your spend is On-Demand. Both metrics must move together.</li>
<li><strong>Start with showback, not chargeback.</strong> Visibility alone reduces waste 15-30%. Chargeback without mature tagging creates resentment, not savings.</li>
<li><strong>Anomaly detection needs enrichment.</strong> A raw alert is noise. An alert with resource IDs, tag values, and a Cost Explorer link is actionable.</li>
<li><strong>Centralize commitment purchases.</strong> Organization-level sharing means every account benefits. Per-team purchasing creates fragmentation and waste.</li>
<li><strong>Kubecost is non-negotiable for EKS.</strong> Without it, container costs are a black box attributed to EC2 instances with no workload-level visibility.</li>
<li><strong>FinOps is organizational, not technical.</strong> The hardest part is getting engineering and finance to collaborate on cost decisions. The tools are the easy part.</li>
</ol>
<h2 id="additional-resources">Additional Resources</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/cost-allocation-blog-series-2-aws-generated-vs-user-defined-cost-allocation-tag/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS Cost Allocation Blog Series</a>. AWS&#39;s official multi-part guide to tag-based cost allocation.</li>
<li><a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/how-and-why-you-should-move-to-cost-and-usage-report-cur-2-0/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">CUR 2.0 Migration Guide</a>. Schema differences and migration path from legacy CUR.</li>
<li><a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/understanding-your-aws-cost-datasets-a-cheat-sheet/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Understanding Your AWS Cost Datasets: A Cheat Sheet</a>. The definitive guide to amortized, unblended, and net cost types.</li>
<li><a href="https://www.finops.org/framework/maturity-model/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">FinOps Foundation Maturity Model</a>. The industry-standard framework for assessing FinOps capability maturity.</li>
<li><a href="https://docs.aws.amazon.com/guidance/latest/cloud-intelligence-dashboards/cudos-cid-kpi.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Cloud Intelligence Dashboards</a>. Deployment guide for CUDOS, CID, and KPI dashboards.</li>
<li><a href="https://docs.aws.amazon.com/eks/latest/userguide/cost-monitoring-kubecost.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Kubecost on Amazon EKS</a>. Installation and configuration for EKS cost monitoring.</li>
<li><a href="https://aws.amazon.com/blogs/aws-cloud-financial-management/how-to-build-a-chargeback-showback-model-for-savings-plans-using-the-cur/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Building a Chargeback/Showback Model for Savings Plans</a>. CUR-based chargeback implementation.</li>
<li><a href="https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/building-a-cost-allocation-strategy.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS Tagging Strategy Best Practices</a>. AWS whitepaper on tag taxonomy design.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: April 01, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-04-01-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-04-01-leverage-record.html</id>
    <updated>2026-04-01T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">A single task today, focused on content quality auditing and regeneration. The weighted average leverage factor landed at 15.0x with a supervisory leverage of 60.0x. Light day by volume but the work was straightforward and well-suited to agentic automation.</p>
<p class="mb-4 font-light font-serif">With only one task logged, there is not much to compare against recent days. The 15.0x factor reflects a routine content repair operation: identifying gaps in a structured content audit and regenerating the missing material. This type of work produces consistent mid-range leverage because the task is well-defined, the output format is known, and the agent can execute without ambiguity.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Fix 2 empty content entries from structured audit; regenerate approximately 9,700 characters each</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>1</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>4</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>0.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>28,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The sole task of the day involved identifying and fixing empty entries discovered during a structured content audit. Two entries had been flagged as having zero content despite being expected deliverables. The repair involved regenerating approximately 9,700 characters for each entry, matching the format and depth of the surrounding content.</p>
<p class="mb-4 font-light font-serif">A 15.0x leverage factor on this type of work is typical. Content regeneration within a known schema is a strong fit for agentic execution: the constraints are clear, the expected output structure is well-defined, and the quality bar can be verified programmatically. A human doing this work would spend time re-reading the audit results, understanding the expected format, writing the content, and verifying consistency. The agent collapses all of that into a few minutes.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 60.0x stands out relative to the task leverage. One minute of prompting yielded one hour of human-equivalent output. This ratio is characteristic of tasks where the prompt can be terse because the context is already established (the audit had already identified the gaps; the agent just needed to be pointed at them).</p>
<p class="mb-4 font-light font-serif">Days with a single task are not unusual. They typically occur when the primary work session is short or when the bulk of the day was spent on activities outside the agent&#39;s scope (meetings, planning, review). The numbers here are accurate but do not represent the full picture of productivity for the day.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 31, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-31-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-31-leverage-record.html</id>
    <updated>2026-03-31T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Nine tasks. March 31 was the final push: two diagram audits that cleaned up the last remaining issues across 96 figures, five CIP document builds that assembled complete filing packages (SVG conversion, PDF generation, orientation detection, LaTeX figure compilation), and a comprehensive content audit. The day ended with the patent portfolio filed.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 41.3x, a sharp rebound from the 21.1x of the rendering-library-heavy day before. The supervisory leverage was 111.4x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full diagram audit + fix 16 findings across 96 figures</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Full diagram audit (96 figures) + fix 21 findings across 8 applications</td>
      <td>20h</td>
      <td>25m</td>
      <td>0.50w</td>
      <td>48.0x</td>
      <td>400.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Build complete CIP document set for filing (SVG rename + PDF generation + orientation detection + LaTeX)</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Build complete CIP document set for filing (federation application)</td>
      <td>2h</td>
      <td>3m</td>
      <td>0.050w</td>
      <td>40.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Build complete CIP document set for filing (embodied skill application)</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Full content audit: 845 specs, 144 packages, 696K questions, 1894 labs validated exhaustively</td>
      <td>4h</td>
      <td>8.6m</td>
      <td>0.10w</td>
      <td>27.9x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Build complete CIP document set for filing (interview simulation application)</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Build complete CIP document set for filing (group learning application)</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Fix diagram findings (6 failures + 1 warning across 6 figures)</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>9</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>52.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>75.6</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>1.3</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>638,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>41.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>111.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The two diagram audits (80x and 48x) show the cumulative effect of all the rendering library work from the day before. With the library producing clean diagrams and the audit specification fully deterministic, the audit-and-fix cycle tightened dramatically. The first audit found only 16 remaining issues (down from 219 the previous day). The second found 21 across 8 applications. Both ran in under 25 minutes.</p>
<p class="mb-4 font-light font-serif">The five CIP document builds (tasks 3-5, 7-8) each assembled a complete filing package: renaming SVG files to USPTO conventions, running the generation script, converting SVGs to PDF via Chrome, detecting page orientation (portrait vs. landscape), compiling LaTeX figure pages, and merging everything into the final submission document. Each build took 3-5 minutes. A human doing this manually would spend 1.5-3 hours per application just on the file conversion and LaTeX compilation, not counting the error-prone orientation detection step.</p>
<p class="mb-4 font-light font-serif">The content audit (task 6, 27.9x) was the final validation before filing: 845 domain specifications checked against schema, 144 synthesized packages verified for completeness, 696,000 questions confirmed, 1,894 lab definitions validated. All exhaustive, no sampling.</p>
<p class="mb-4 font-light font-serif">This was the quietest day of the month by task count and total hours. But it was the most consequential: the patent portfolio shipped. Everything before this day was preparation. This was the day it mattered.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[AVIAN Patent Portfolio Filed]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-31-avian-patent-portfolio-filed.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-31-avian-patent-portfolio-filed.html</id>
    <updated>2026-03-31T06:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/pods.png" alt="AVIAN Patent Portfolio Filed" /></p><p class="mb-4 font-light font-serif">Today marks a major milestone for me. This morning around 5am, after a journey of nearly 18 years, I filed the remaining 25 AVIAN patents. The original was filed in October. This filing completes one of the most comprehensive adaptive learning patent portfolios ever assembled: 573 claims across 144 distinct inventions, divided into 29 branded platform clusters. When rendered into a single PDF, the full document is over 600 pages long and has 207 diagrams. It is truly massive in scope and in size.</p>
<p class="mb-4 font-light font-serif"><!--more--></p>
<h2 id="the-portfolio">The Portfolio</h2>
<p class="mb-4 font-light font-serif">The full list of patents is below (titles simplified for public disclosure):</p>
<table>
  <thead>
    <tr>
      <th>Application</th>
      <th>Description</th>
      <th>Application #</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Original</td>
      <td>Core adaptive learning architecture</td>
      <td>63/906,341</td>
    </tr>
    <tr>
      <td>A</td>
      <td>Automated knowledge structure creation</td>
      <td>64/019,660</td>
    </tr>
    <tr>
      <td>B</td>
      <td>Intelligent question and content generation</td>
      <td>64/019,690</td>
    </tr>
    <tr>
      <td>C</td>
      <td>Self-organizing knowledge structures</td>
      <td>64/020,070</td>
    </tr>
    <tr>
      <td>D</td>
      <td>Automatic content freshness detection</td>
      <td>64/020,198</td>
    </tr>
    <tr>
      <td>E</td>
      <td>Cross-domain knowledge transfer</td>
      <td>64/020,230</td>
    </tr>
    <tr>
      <td>F</td>
      <td>New-subject cold start</td>
      <td>64/020,247</td>
    </tr>
    <tr>
      <td>G</td>
      <td>Knowledge versioning and migration</td>
      <td>64/020,260</td>
    </tr>
    <tr>
      <td>H</td>
      <td>New-learner onboarding</td>
      <td>64/020,288</td>
    </tr>
    <tr>
      <td>I</td>
      <td>Multi-format evidence gathering</td>
      <td>64/020,699</td>
    </tr>
    <tr>
      <td>J</td>
      <td>Learning behavior analytics</td>
      <td>64/020,702</td>
    </tr>
    <tr>
      <td>K</td>
      <td>Cognitive state and focus detection</td>
      <td>64/020,703</td>
    </tr>
    <tr>
      <td>L</td>
      <td>Cheating and gaming detection</td>
      <td>64/020,706</td>
    </tr>
    <tr>
      <td>M</td>
      <td>Predictive learning path optimization</td>
      <td>64/020,708</td>
    </tr>
    <tr>
      <td>N</td>
      <td>Personalized curriculum planning</td>
      <td>64/022,553</td>
    </tr>
    <tr>
      <td>O</td>
      <td>Exam readiness prediction</td>
      <td>64/022,555</td>
    </tr>
    <tr>
      <td>P</td>
      <td>Adaptive activity generation</td>
      <td>64/022,586</td>
    </tr>
    <tr>
      <td>Q</td>
      <td>Scenario-based assessment</td>
      <td>64/022,587</td>
    </tr>
    <tr>
      <td>R</td>
      <td>Smart test assembly</td>
      <td>64/022,588</td>
    </tr>
    <tr>
      <td>S</td>
      <td>Conversational tutoring</td>
      <td>64/022,589</td>
    </tr>
    <tr>
      <td>T</td>
      <td>Interview simulation</td>
      <td>64/022,987</td>
    </tr>
    <tr>
      <td>U</td>
      <td>Explainable recommendations</td>
      <td>64/022,994</td>
    </tr>
    <tr>
      <td>V</td>
      <td>Group and peer learning</td>
      <td>64/023,002</td>
    </tr>
    <tr>
      <td>W</td>
      <td>Safety and policy enforcement</td>
      <td>64/023,012</td>
    </tr>
    <tr>
      <td>X</td>
      <td>Multi-institution federation</td>
      <td>64/023,062</td>
    </tr>
    <tr>
      <td>Y</td>
      <td>Physical skill acquisition</td>
      <td>64/023,069</td>
    </tr>
  </tbody>
</table>
<h2 id="how-it-started">How It Started</h2>
<p class="mb-4 font-light font-serif">I originally created AccelaStudy so that I could stop carrying a large deck of Turkish flashcards around with me. When I started working on it, I barely knew how to use a Mac and had never programmed anything in Objective-C, the original language required for iOS apps. Getting it done was a slog with the tools app developers had then but, on the day the App Store launched, AccelaStudy was the very first language app available. It has been in the App Store ever since and has been downloaded over 30,000,000 times.</p>
<p class="mb-4 font-light font-serif">But I never wanted to make just a flashcard app. I wanted to create a new way of learning. I wanted a system that would adapt to the student, personalize their learning experience, and optimize their trajectory to proficiency. AVIAN does all of that and more.</p>
<h2 id="from-flashcards-to-a-patent-family">From Flashcards to a Patent Family</h2>
<p class="mb-4 font-light font-serif">My first attempt at patenting an idea was an improved spaced repetition algorithm to be filed as Optimized Study Method for Accelerated Memory Consolidation. I eventually decided not to pursue it and merged it into AccelaStudy directly instead. AVIAN began to take shape in another patent I drafted called The AccelaStudy Method. Most of the core ideas from that remain unchanged in AVIAN and have expanded dramatically to include cross-domain transfer intelligence, adversarial detection, cognitive state modeling, scenario-based assessment, conversational retrieval, cohort-based collaborative learning, federated multi-node deployment, embodied skill acquisition, and policy governance. Everything and the kitchen sink.</p>
<h2 id="the-cost">The Cost</h2>
<p class="mb-4 font-light font-serif">The work it has taken to finish AVIAN has been at great cost. I&#39;ve always had a strong work ethic but this has required months of 7-day work weeks, 12+ hour days. Since the beginning of February, I&#39;ve pulled 3 all-nighters per week. I have had to work repeated 40-hour stretches proofing, expanding, revising, hardening, diagramming, and auditing the patent specifications and diagrams.</p>
<h2 id="diagrams-and-beautiful-mermaid">Diagrams and beautiful-mermaid</h2>
<p class="mb-4 font-light font-serif">I created the diagrams using the popular Mermaid diagram syntax and rendered them with the open source library beautiful-mermaid. I automated the generation of all 207 diagrams. I thought that would save me time. I was wrong. Alas, while the library does a pretty good job producing diagrams, it does not do a perfect job. Not good enough to file with the USPTO, which has exacting standards. So I spent weeks working with Anthropic&#39;s Opus 4.6 debugging and adding features to beautiful-mermaid. Hours and hours of generating diagrams, reviewing them closely, and reporting back to an LLM that cannot see visual mistakes, that an arrow connecting two boxes is not quite touching one of the boxes by 6 pixels. It was painstaking and brutal. I truly almost gave up. Last Sunday was a day of despair making progress in some areas only to have regressions in others. Only last night, after hundreds of commits, did we finally achieve USPTO-ready diagrams.</p>
<h2 id="more-than-paper">More Than Paper</h2>
<p class="mb-4 font-light font-serif">But the patents are more than paper. AVIAN does not exist only as documents and diagrams. It has a complete reference architecture and has been fully implemented and tested. There are over 4,000 tests of the core engine and it passes them all. I&#39;m pleased to say that it is so efficient that it can scale to over 1 million active students on AWS infrastructure costing less than $500 a month. It is also built for energy efficiency: one of the patents contains a novel use of GPUs that requires 1/10th the energy of existing methods.</p>
<h2 id="whats-next">What&#39;s Next</h2>
<p class="mb-4 font-light font-serif">The AVIAN patent portfolio has been filed with the USPTO provisionally but the patents themselves were written for nonprovisional examination. Prior art has been exhaustively surveyed and each application&#39;s claims are cleanly differentiated against it. The patent language is hardened and ready for examiner scrutiny. However, I will not be submitting the nonprovisional applications. Instead, the Silicon Valley law firm Wilson Sonsini will be handling the patent prosecution and securing international rights. Intellectual Ventures, in Bellevue, Washington, will be handling patent monetization and valuation.</p>
<p class="mb-4 font-light font-serif">Eighteen years ago I just wanted to stop carrying flashcards. Now AVIAN represents a fundamentally new way for humans and machines(!) to learn, adapt, and grow. Every interaction makes the system smarter. Every learner makes it better for the next one. That&#39;s the vision, and now it&#39;s protected.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 30, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-30-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-30-leverage-record.html</id>
    <updated>2026-03-30T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-two tasks. March 30 was the most diagram-intensive day of the entire project: a full patent diagram audit that found and fixed 219 issues across 96 figures, five sessions of deep work on the Mermaid rendering library (collision resolution, diamond centering, exit ports, blocker avoidance, overlap detection), and a content audit validating 845 specifications, 144 packages, and 696,000 questions.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 21.1x, pulled down by the rendering library sessions which averaged 12-13x due to genuine algorithmic complexity. The supervisory leverage held at 175.7x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full diagram audit + fix 219 issues across 96 figures in 12 applications</td>
      <td>80h</td>
      <td>45m</td>
      <td>2.0w</td>
      <td>106.7x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Rendering library: collision resolution + layer/port override system (ancestor filtering + group awareness)</td>
      <td>32h</td>
      <td>50m</td>
      <td>0.80w</td>
      <td>38.4x</td>
      <td>384.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full diagram audit + fix 17 findings across 96 figures</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Rendering library session 3: route optimizer + layout refinements for edge collision resolution</td>
      <td>40h</td>
      <td>120m</td>
      <td>1.0w</td>
      <td>20.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fix renderer regressions: phase guards + cascade logic + bezier direction + back-edge routing</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Fix numeral collisions in diagram files for 2 applications</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Fix 6 diagram visual issues: subgroup extension + micro-dogleg straightener + figure restructuring</td>
      <td>6h</td>
      <td>25m</td>
      <td>0.15w</td>
      <td>14.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Full diagram audit: 207 figures across 25 applications + numeral collision and back-edge fixes</td>
      <td>8h</td>
      <td>35m</td>
      <td>0.20w</td>
      <td>13.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Rendering library session 4: diamond centering, exit ports, blocker avoidance, overlap resolution, snapshot tests</td>
      <td>40h</td>
      <td>180m</td>
      <td>1.0w</td>
      <td>13.3x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Content audit: 57 checks across 845 specs, 144 packages, 696K questions, 1894 labs</td>
      <td>4h</td>
      <td>20m</td>
      <td>0.10w</td>
      <td>12.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Rendering library session 5: edge/back-edge fixes, reversed edges, subgroup termination, layout heuristics</td>
      <td>24h</td>
      <td>120m</td>
      <td>0.60w</td>
      <td>12.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Fix diagram issues in application (7 figures)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fix duplicate reference numeral issues across 9 figures</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Debug and fix rendering library edge staggering for multi-exit fan-out nodes</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Fix diagram warnings: move components inside subgraph, remove spurious numerals</td>
      <td>0.75h</td>
      <td>5m</td>
      <td>0.019w</td>
      <td>9.0x</td>
      <td>11.2x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Fix diagram warnings across 5 figures</td>
      <td>1.5h</td>
      <td>10m</td>
      <td>0.037w</td>
      <td>9.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Fix diagram issues (duplicate numerals + dotted edge)</td>
      <td>0.5h</td>
      <td>4m</td>
      <td>0.013w</td>
      <td>7.5x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Fix diagram issues across 6 figures</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>0.037w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Fix diagram warnings across 9 figures</td>
      <td>1.5h</td>
      <td>12m</td>
      <td>0.037w</td>
      <td>7.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Fix diagram issues across application</td>
      <td>0.5h</td>
      <td>5m</td>
      <td>0.013w</td>
      <td>6.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Fix diagram warnings across 5 figures</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Fix diagram warnings across 6 figures</td>
      <td>0.5h</td>
      <td>8m</td>
      <td>0.013w</td>
      <td>3.8x</td>
      <td>10.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>22</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>278.2</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>793</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>7.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,499,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>21.1x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>175.7x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The full diagram audit at 106.7x (task 1) was the standout. Scanning 96 figures across 12 applications, identifying 219 issues (missing numerals, duplicate references, incorrect edge styles, logic errors), and fixing all of them in 45 minutes. A human doing this work would spend two full weeks cross-referencing each figure against its specification, checking every reference numeral, and verifying every edge direction. The AI handles the cross-referencing without fatigue or drift.</p>
<p class="mb-4 font-light font-serif">The five rendering library sessions (tasks 2, 4, 9, 11, 14) consumed 515 of the 793 total Claude minutes and averaged 13.5x leverage. This is the lowest per-task leverage in the entire month, and it makes sense. Debugging visual rendering algorithms is fundamentally harder than generating code or running audits. The AI cannot see the visual output; it works from textual descriptions of pixel-level issues (&quot;the arrow is 6 pixels short of the box&quot;). Each fix risks regressions in other diagrams. The work is iterative, exploratory, and requires deep understanding of computational geometry.</p>
<p class="mb-4 font-light font-serif">The content audit (task 10, 12x) validated 845 domain specifications, 144 synthesized packages, 696,000 generated questions, and 1,894 lab definitions in 20 minutes. This is exhaustive verification, not sampling. Every spec checked against schema, every package validated for completeness, every question bank verified for count consistency.</p>
<p class="mb-4 font-light font-serif">The diagram fix tasks (12-22) represent the cleanup pass after the audit and library work. Each task fixes specific findings in specific figures. The low leverage factors (3.8x to 11.2x) reflect the precision nature of the work: small, targeted edits where the overhead of reading the spec, understanding the context, and making the edit dominates the actual change.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 175.7x held despite the library debugging sessions. Ninety-five minutes of prompt-writing time produced 278 hours of output. The rendering library sessions required longer prompts (5-10 minutes each) to describe the visual issues precisely, which is why the per-task supervisory leverage on those is lower than usual.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 29, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-29-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-29-leverage-record.html</id>
    <updated>2026-03-29T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Seven tasks. The lowest task count since early March, but still 5.5 weeks of human-equivalent output. March 29 was a deep-work day focused on intellectual property documentation: a diagram quality overhaul that touched collision detection, overlap resolution, and edge straightening across the full portfolio, plus a cross-reference audit of filed diagrams against their specifications.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 20.5x, the lowest in over a week. The supervisory leverage factor hit 244.4x, which is actually above recent averages. That inverse tells the story: fewer, longer tasks meant more Claude minutes per task but also less supervisory overhead per unit of output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Deployment readiness audit: 39 repos, 195 checks, 4218 tests, 20 findings, 10 commits pushed</td>
      <td>24h</td>
      <td>15m</td>
      <td>0.60w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Deterministic diagram audit script + fix 46 diagram issues across documentation</td>
      <td>40h</td>
      <td>55m</td>
      <td>1.0w</td>
      <td>43.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Diagram quality overhaul: collision detection, overlap resolution, edge straightening, 74 arrow fixes, 23 numeral corrections</td>
      <td>120h</td>
      <td>360m</td>
      <td>3.0w</td>
      <td>20.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cross-check filed diagrams against specifications: 61 diagrams vs. 8 specs, auditing reference numerals and figure titles</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Deployment readiness audit: 42 repos, 351 checks, 4321 tests, 8 issues fixed</td>
      <td>8h</td>
      <td>33m</td>
      <td>0.20w</td>
      <td>14.5x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Deployment readiness audit: 42 repos, 417 checks, 4321 tests, security/SEO/documentation fixes</td>
      <td>16h</td>
      <td>111m</td>
      <td>0.40w</td>
      <td>8.6x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Full portfolio audit: 7 phases across 17 applications and supporting documentation</td>
      <td>4h</td>
      <td>45m</td>
      <td>0.10w</td>
      <td>5.3x</td>
      <td>80.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>7</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>220.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>644</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>5.5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,234,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>20.5x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>244.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The diagram quality overhaul (task 3, 120 human hours, 360 Claude minutes) was the day&#39;s anchor task. Building collision detection and overlap resolution algorithms, then applying them across the full diagram set with edge straightening and arrow style corrections, is the kind of work that requires sustained attention to geometric detail. A human would spend three weeks on it. The 20x leverage factor reflects genuine algorithmic complexity rather than boilerplate generation.</p>
<p class="mb-4 font-light font-serif">The deterministic diagram audit script (task 2, 43.6x) is worth noting because it created tooling that made the overhaul possible. Building a script that programmatically identifies diagram issues (missing labels, overlapping elements, inconsistent arrow styles) and then fixing 46 issues it found is a pattern that compounds: the script will catch future regressions automatically.</p>
<p class="mb-4 font-light font-serif">The deployment readiness audits (tasks 1, 5, 6) continued their daily cadence. The first audit of the day hit 96x, which is unusually high for an audit. That 15-minute run across 39 repos found 20 findings and pushed 10 commits. The later audits (14.5x and 8.6x) were progressively more thorough and slower as they dug into the remaining issues.</p>
<p class="mb-4 font-light font-serif">The cross-reference audit (task 4, 19.2x) checked 61 filed diagrams against 8 specifications for reference numeral accuracy and figure title consistency. This is pure compliance verification work: tedious, detail-oriented, and exactly the kind of task where AI attention to detail pays off.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 244.4x reflects the deep-work nature of the day. Thirty minutes of prompt-writing time across 54 supervisory minutes generated 220 hours of output. Fewer context switches, longer autonomous runs, higher output per supervisory minute.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Achieving Determinism with LLM Agents: An Architecture Guide]]></title>
    <link href="https://charlessieg.com/articles/achieving-determinism-with-llm-agents-architecture-guide.html" />
    <id>https://charlessieg.com/articles/achieving-determinism-with-llm-agents-architecture-guide.html</id>
    <updated>2026-03-29T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/achieving-determinism-with-llm-agents-hero.png" alt="Achieving Determinism with LLM Agents: An Architecture Guide" /></p><p class="mb-4 font-light font-serif">I run a fleet of LLM agents that audit 42 repositories every day. Same code, same prompts, same model. And for weeks, every single run produced different results. Not because the codebase was changing between runs, but because the agents were sampling instead of enumerating, summarizing instead of counting, and making subjective judgments instead of executing deterministic checks. The audit results were non-reproducible, which meant they were useless as an audit.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#why-llm-outputs-are-non-deterministic" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Why LLM Outputs Are Non-Deterministic</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-temperature-equals-zero-myth" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Temperature Equals Zero Myth</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-real-problem-agents-not-models" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Real Problem: Agents, Not Models</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#building-deterministic-agent-architectures" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Building Deterministic Agent Architectures</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-idempotency-test" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Idempotency Test</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#the-hybrid-approach-deterministic-guardrails-with-semantic-reasoning" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Hybrid Approach: Deterministic Guardrails with Semantic Reasoning</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#cost-and-performance-trade-offs" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Cost and Performance Trade-Offs</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#lessons-from-production" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Lessons from Production</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#key-patterns-and-takeaways" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Key Patterns and Takeaways</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#appendix-a-sanitized-deployment-readiness-audit-specification" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Appendix A: Sanitized Deployment Readiness Audit Specification</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#appendix-b-sanitized-diagram-audit-specification" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Appendix B: Sanitized Diagram Audit Specification</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#additional-resources" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Additional Resources</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<p class="mb-4 font-light font-serif">This article is not about making LLMs themselves deterministic. That is a physics problem with no complete solution. This is about building agent architectures that produce deterministic outcomes despite the inherent non-determinism of the models powering them. The distinction matters. You do not need a deterministic model to build a deterministic system. You need deterministic scaffolding around a non-deterministic core.</p>
<h2 id="why-llm-outputs-are-non-deterministic">Why LLM Outputs Are Non-Deterministic</h2>
<p class="mb-4 font-light font-serif">Before building solutions, you need to understand why the problem exists at all. The common belief that setting <code>temperature=0</code> guarantees deterministic output is wrong. Testing Qwen 3 235B with 1,000 identical temperature-zero prompts produced 80 unique completions, with the most common response appearing only 78 times. No consensus majority. GPT-4o showed accuracy swings of up to 72 percentage points across identical runs on the same task.</p>
<p class="mb-4 font-light font-serif">Three root causes drive this behavior, and temperature is not the primary one.</p>
<h3 id="batch-invariance-failure">Batch Invariance Failure</h3>
<p class="mb-4 font-light font-serif">This is the real villain. Modern inference systems dynamically adjust batch sizes based on server load. When your request lands in a batch of 4 versus a batch of 128, the matrix multiplications execute in different orders. Running <code>torch.mm(a[:1], b)</code> separately produces a maximum absolute difference of 1,669.25 compared to extracting the same row from <code>torch.mm(a, b)[:1]</code>. During attention decoding with a 1,000-token KV cache, processing 128 tokens requires five computational blocks versus four without the cache. Different reduction order, different floating-point accumulation, different results.</p>
<h3 id="floating-point-non-associativity">Floating-Point Non-Associativity</h3>
<p class="mb-4 font-light font-serif">Floating-point addition is not associative. Summing the array <code>[1e-10, 1e-5, 1e-2, 1]</code> with its negatives produces 102 unique possible results depending on summation order. The classic example: <code>(0.1 + 1e20) - 1e20 = 0</code>, but <code>0.1 + (1e20 - 1e20) = 0.1</code>. Lower precision formats like fp16 and bfloat16 amplify the problem. Every attention layer in a transformer performs thousands of these operations, and the accumulated drift is enough to flip token selections.</p>
<h3 id="hardware-and-infrastructure-variance">Hardware and Infrastructure Variance</h3>
<p class="mb-4 font-light font-serif">Different GPU generations produce different floating-point behavior. vLLM explicitly states that reproducibility is only guaranteed on &quot;the same hardware and same vLLM version.&quot; API providers like OpenAI and Anthropic update their infrastructure multiple times per year. Each update can change the system fingerprint and break any reproducibility guarantees the seed parameter was providing.</p>
<table>
  <thead>
    <tr>
      <th>Non-Determinism Source</th>
      <th>Impact</th>
      <th>Mitigation Possible?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Temperature/sampling</td>
      <td>High</td>
      <td>Yes, set to 0 (reduces but does not eliminate)</td>
    </tr>
    <tr>
      <td>Batch size variation</td>
      <td>High</td>
      <td>Only with custom inference (20% performance cost)</td>
    </tr>
    <tr>
      <td>Floating-point accumulation</td>
      <td>Medium</td>
      <td>Requires deterministic CUDA kernels</td>
    </tr>
    <tr>
      <td>Hardware differences</td>
      <td>Medium</td>
      <td>Pin to specific hardware (expensive)</td>
    </tr>
    <tr>
      <td>Infrastructure updates</td>
      <td>Low-Medium</td>
      <td>Monitor system fingerprint changes</td>
    </tr>
    <tr>
      <td>KV cache state</td>
      <td>Low</td>
      <td>Requires stateless inference</td>
    </tr>
  </tbody>
</table>
<h2 id="the-temperature-equals-zero-myth">The Temperature Equals Zero Myth</h2>
<p class="mb-4 font-light font-serif">OpenAI introduced a <code>seed</code> parameter in late 2023 as a &quot;best effort&quot; determinism feature. You set a seed integer alongside <code>temperature=0</code> and <code>top_p=1</code>, and the API attempts to return identical outputs for identical inputs. The operative words are &quot;best effort.&quot; OpenAI&#39;s own documentation warns of a &quot;small chance that responses differ...due to inherent non-determinism.&quot; You can monitor the <code>system_fingerprint</code> field in the response to detect when the backend has changed, but there is nothing you can do about it when it does.</p>
<p class="mb-4 font-light font-serif">I tested this extensively. Even with seed pinning and fingerprint matching, I observed drift across runs separated by hours. The deterministic inference performance trade-offs tell the story:</p>
<table>
  <thead>
    <tr>
      <th>Configuration</th>
      <th>Time (1,000 sequences)</th>
      <th>Slowdown</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Default (non-deterministic)</td>
      <td>26 seconds</td>
      <td>Baseline</td>
    </tr>
    <tr>
      <td>Deterministic, unoptimized</td>
      <td>55 seconds</td>
      <td>2.1x</td>
    </tr>
    <tr>
      <td>Deterministic, optimized</td>
      <td>42 seconds</td>
      <td>1.6x</td>
    </tr>
    <tr>
      <td>Batch-invariant matmul</td>
      <td>~20% loss vs. cuBLAS</td>
      <td>Significant</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">True deterministic inference costs 1.6x to 2.1x in throughput. API providers are not absorbing that cost for you. When they say &quot;best effort,&quot; they mean it.</p>
<h2 id="the-real-problem-agents-not-models">The Real Problem: Agents, Not Models</h2>
<p class="mb-4 font-light font-serif">Here is the insight that changed everything for me. The non-determinism that was destroying my audit results was not coming from the model. It was coming from the agent architecture. The model might generate slightly different phrasing across runs, but the catastrophic variance, where one run finds 20 issues and the next finds 8, came from three agent-level failures.</p>
<h3 id="sampling-instead-of-enumerating">Sampling Instead of Enumerating</h3>
<p class="mb-4 font-light font-serif">When I told an agent to &quot;check all packages for required files,&quot; it would check a representative sample. Not because the model is lazy, but because the prompt left room for interpretation. The agent decided that checking 30 of 144 packages was sufficient to establish a pattern. Next run, it sampled a different 30. Different sample, different findings.</p>
<h3 id="subjective-judgment-instead-of-objective-measurement">Subjective Judgment Instead of Objective Measurement</h3>
<p class="mb-4 font-light font-serif">&quot;README looks comprehensive&quot; is not a check result. It is a subjective judgment that varies with the model&#39;s interpretation of &quot;comprehensive.&quot; One run might decide a README needs an environment variables section. The next run might not. Both are defensible interpretations. Neither is deterministic.</p>
<h3 id="context-pressure-under-load">Context Pressure Under Load</h3>
<p class="mb-4 font-light font-serif">When an agent covers too many repositories in a single session, it hits context window pressure and starts summarizing, skipping, and abbreviating. An agent covering 15 repos produces different results than three agents covering 5 repos each, even when checking the same things. The three-agent approach consistently finds more issues because each agent has room to be thorough.</p>
<h2 id="building-deterministic-agent-architectures">Building Deterministic Agent Architectures</h2>
<p class="mb-4 font-light font-serif">The solution is to stop trying to make the model deterministic and instead build an architecture where the model&#39;s non-determinism cannot affect the outcome. I call this approach &quot;deterministic scaffolding around a non-deterministic core.&quot;</p>
<h3 id="strategy-1-enumerate-never-sample">Strategy 1: Enumerate, Never Sample</h3>
<p class="mb-4 font-light font-serif">Every check that touches a countable set must enumerate the full set and report exact counts. Not &quot;checked several packages&quot; but &quot;checked 144/144 packages.&quot; The prompt must be explicit:</p>
<div class="highlight"><pre><span></span><span class="nx">Check</span><span class="w"> </span><span class="nx">ALL</span><span class="w"> </span><span class="mi">144</span><span class="w"> </span><span class="nx">packages</span><span class="p">.</span><span class="w"> </span><span class="nx">For</span><span class="w"> </span><span class="nx">each</span><span class="w"> </span><span class="kn">package</span><span class="p">,</span><span class="w"> </span><span class="nx">verify</span><span class="w"> </span><span class="nx">these</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="nx">files</span><span class="w"> </span><span class="nx">exist</span><span class="p">:</span>
<span class="nx">__init__</span><span class="p">.</span><span class="nx">py</span><span class="p">,</span><span class="w"> </span><span class="nx">README</span><span class="p">.</span><span class="nx">md</span><span class="p">,</span><span class="w"> </span><span class="nx">schema</span><span class="p">.</span><span class="nx">json</span><span class="p">,</span><span class="w"> </span><span class="nx">metadata</span><span class="p">.</span><span class="nx">yaml</span><span class="p">,</span><span class="w"> </span><span class="nx">tests</span><span class="o">/</span>

<span class="nx">Report</span><span class="w"> </span><span class="nx">format</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;X/144 packages have all 5 required files.&quot;</span>
<span class="nx">List</span><span class="w"> </span><span class="nx">every</span><span class="w"> </span><span class="kn">package</span><span class="w"> </span><span class="nx">that</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="nx">missing</span><span class="w"> </span><span class="nx">any</span><span class="w"> </span><span class="nx">file</span><span class="p">.</span>
</pre></div>

<p class="mb-4 font-light font-serif">The key is that the expected count (144) is in the prompt. The agent cannot decide to sample because the prompt demands a specific denominator. If the agent reports &quot;142/144,&quot; I know exactly which two failed. If it reports &quot;all packages look good,&quot; I know the agent skipped the enumeration and I reject the result.</p>
<h3 id="strategy-2-deterministic-commands-over-natural-language-inspection">Strategy 2: Deterministic Commands Over Natural Language Inspection</h3>
<p class="mb-4 font-light font-serif">Anywhere a check can be expressed as a bash command that produces a pass/fail result, use the command instead of asking the agent to inspect and judge.</p>
<table>
  <thead>
    <tr>
      <th>Check</th>
      <th>Non-Deterministic Approach</th>
      <th>Deterministic Approach</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Package file inventory</td>
      <td>&quot;Check if packages have required files&quot;</td>
      <td><code>find packages/ -maxdepth 2 -name &quot;schema.json&quot;</code></td>
    </tr>
    <tr>
      <td>Secret detection</td>
      <td>&quot;Look for hardcoded secrets&quot;</td>
      <td><code>grep -rn &#39;sk-ant-&#39; src/</code></td>
    </tr>
    <tr>
      <td>Port consistency</td>
      <td>&quot;Verify ports match the reference&quot;</td>
      <td><code>grep &#39;port&#39; docker-compose.yml</code></td>
    </tr>
    <tr>
      <td>README completeness</td>
      <td>&quot;Check if README is comprehensive&quot;</td>
      <td>Count specific required section headers</td>
    </tr>
    <tr>
      <td>Trademark consistency</td>
      <td>&quot;Verify trademark usage&quot;</td>
      <td><code>grep -rn &#39;ProductName®&#39; *.html</code> (must be 0)</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The bash command produces identical output every time. The agent&#39;s role shifts from inspector to executor: run the command, parse the output, report the result. The model&#39;s non-determinism is irrelevant because the measurement is deterministic.</p>
<h3 id="strategy-3-canonical-sources-of-truth">Strategy 3: Canonical Sources of Truth</h3>
<p class="mb-4 font-light font-serif">Every number that gets validated needs a single canonical source. I maintain a <code>canonical.json</code> file that contains every count that matters: patent application count, per-application claim counts, domain specification count, package count, lab count. Every check validates against this file, not against a number the agent remembers or derives.</p>
<div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;patent_applications&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">25</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;total_claims&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">845</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;domain_specs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">144</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;synthesized_packages&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">144</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;lab_definitions&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">89</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;per_application_claims&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;Application A&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;Application B&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">38</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">When canonical numbers change (new domains synthesized, patents added), the canonical file gets updated first, and all subsequent audits validate against the updated truth. This eliminates a class of non-determinism where agents derive counts differently depending on how they traverse directory structures or parse documents.</p>
<h3 id="strategy-4-phase-zero-automation">Strategy 4: Phase Zero Automation</h3>
<p class="mb-4 font-light font-serif">Before any agent-driven audit begins, a fully deterministic validation script runs first. This script is pure bash with no LLM involvement. It validates all mechanical checks: file counts, schema validation, git status across all repos, trademark consistency, directory structure compliance.</p>
<div class="highlight"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="c1"># Phase 0: Deterministic validation - no LLM involved</span>
<span class="nv">CANONICAL</span><span class="o">=</span><span class="k">$(</span>cat<span class="w"> </span>.audits/canonical.json<span class="k">)</span>
<span class="nv">EXPECTED_APPS</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$CANONICAL</span><span class="s2">&quot;</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>jq<span class="w"> </span><span class="s1">&#39;.patent_applications&#39;</span><span class="k">)</span>
<span class="nv">ACTUAL_APPS</span><span class="o">=</span><span class="k">$(</span>find<span class="w"> </span>CIP/<span class="w"> </span>-maxdepth<span class="w"> </span><span class="m">1</span><span class="w"> </span>-name<span class="w"> </span><span class="s2">&quot;Application *&quot;</span><span class="w"> </span>-type<span class="w"> </span>d<span class="w"> </span><span class="p">|</span><span class="w"> </span>wc<span class="w"> </span>-l<span class="k">)</span>

<span class="k">if</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="s2">&quot;</span><span class="nv">$ACTUAL_APPS</span><span class="s2">&quot;</span><span class="w"> </span>-ne<span class="w"> </span><span class="s2">&quot;</span><span class="nv">$EXPECTED_APPS</span><span class="s2">&quot;</span><span class="w"> </span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">then</span>
<span class="w">    </span><span class="nb">echo</span><span class="w"> </span><span class="s2">&quot;FAIL: Expected </span><span class="nv">$EXPECTED_APPS</span><span class="s2"> applications, found </span><span class="nv">$ACTUAL_APPS</span><span class="s2">&quot;</span>
<span class="w">    </span><span class="nb">exit</span><span class="w"> </span><span class="m">1</span>
<span class="k">fi</span>
</pre></div>

<p class="mb-4 font-light font-serif">Phase Zero catches the mechanical failures before the agents even start. This means the agent-driven phases only handle checks that genuinely require semantic understanding: documentation quality, cross-reference consistency, architecture alignment. The surface area for non-determinism shrinks to only the checks where non-determinism is unavoidable.</p>
<h3 id="strategy-5-agent-scope-limits">Strategy 5: Agent Scope Limits</h3>
<p class="mb-4 font-light font-serif">Context pressure is a determinism killer. An agent covering 15 repositories will hit context window limits and start degrading. The fix is simple: limit each agent to 4-5 repositories maximum. Split the work across more agents rather than overloading fewer.</p>
<table>
  <thead>
    <tr>
      <th>Agent Configuration</th>
      <th>Repos per Agent</th>
      <th>Findings Consistency</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1 agent, 42 repos</td>
      <td>42</td>
      <td>Poor (high variance between runs)</td>
    </tr>
    <tr>
      <td>3 agents, 14 repos each</td>
      <td>14</td>
      <td>Moderate (some summarization)</td>
    </tr>
    <tr>
      <td>7 agents, 6 repos each</td>
      <td>6</td>
      <td>Good (consistent findings)</td>
    </tr>
    <tr>
      <td>10 agents, 4-5 repos each</td>
      <td>4-5</td>
      <td>Excellent (near-deterministic)</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The trade-off is token cost. Ten agents consume more total tokens than three agents. But the ten-agent configuration produces reproducible results, and the three-agent configuration does not. Reproducibility is worth the extra tokens.</p>
<h3 id="strategy-6-structured-output-schemas">Strategy 6: Structured Output Schemas</h3>
<p class="mb-4 font-light font-serif">When agents must produce findings, force the output into a structured schema. Do not ask for free-text summaries.</p>
<p class="mb-4 font-light font-serif">Research from the Berkeley Function Calling Leaderboard shows the impact of structured output methods:</p>
<table>
  <thead>
    <tr>
      <th>Method</th>
      <th>GPT-4o Accuracy</th>
      <th>Claude 3.5 Sonnet Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Function Calling</td>
      <td>87.4%</td>
      <td>78.1%</td>
    </tr>
    <tr>
      <td>Schema-Aligned Parsing</td>
      <td>93.0%</td>
      <td>94.4%</td>
    </tr>
    <tr>
      <td>JSON Mode</td>
      <td>~90%</td>
      <td>~90%</td>
    </tr>
    <tr>
      <td>Free-text Prompting</td>
      <td>&lt;50%</td>
      <td>&lt;50%</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Schema-Aligned Parsing (SAP), where you post-process the output with schema knowledge rather than constraining generation, achieves the highest consistency. The agent generates its finding, and a deterministic parser validates and normalizes the output against the expected schema. Malformed findings get rejected and re-requested.</p>
<h3 id="strategy-7-separation-of-detection-from-remediation">Strategy 7: Separation of Detection from Remediation</h3>
<p class="mb-4 font-light font-serif">Never let the same agent detect and fix issues in a single pass. Detection and remediation are different cognitive modes with different determinism requirements.</p>
<p class="mb-4 font-light font-serif">The detection phase produces a structured findings report: every issue found, grouped by repository, with severity classification and exact counts. This report gets dumped to the terminal in full before any fixes begin. The human (or a separate remediation agent) reviews the findings and then executes fixes.</p>
<p class="mb-4 font-light font-serif">This separation matters because:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li>Detection agents can be re-run to verify reproducibility without the confounding effect of fixes from previous runs.</li>
<li>The findings report serves as an audit trail. If detection and remediation are interleaved, you cannot reconstruct what was found versus what was changed.</li>
<li>Remediation agents can be given the specific findings list rather than re-discovering issues, eliminating another source of variance.</li>
</ol>
<h3 id="strategy-8-completeness-attestation">Strategy 8: Completeness Attestation</h3>
<p class="mb-4 font-light font-serif">Every audit report must include a completeness attestation: &quot;X total checks executed across Y repos. Z items examined exhaustively (N packages, M specs, P applications).&quot; This line makes it immediately obvious if an agent skipped or sampled anything.</p>
<p class="mb-4 font-light font-serif">If the attestation says &quot;321 checks across 42 repos, 144 packages verified, 25 applications verified, 845 claims counted,&quot; I can compare that against the canonical numbers and confirm exhaustiveness. If it says &quot;checked several hundred items across the repos,&quot; I reject the audit and re-run it.</p>
<h2 id="the-idempotency-test">The Idempotency Test</h2>
<p class="mb-4 font-light font-serif">The ultimate validation for a deterministic agent architecture is the idempotency test: run the audit twice in a row with no code changes between runs. If the second run produces identical findings to the first, the architecture is working. If it finds different issues, the methodology is broken.</p>
<p class="mb-4 font-light font-serif">I failed this test for three weeks before arriving at the architecture described above. The failure modes were instructive:</p>
<table>
  <thead>
    <tr>
      <th>Failure Mode</th>
      <th>Root Cause</th>
      <th>Fix</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Different issue counts between runs</td>
      <td>Agent sampling different subsets</td>
      <td>Enumerate, never sample</td>
    </tr>
    <tr>
      <td>Issues &quot;appearing&quot; on second run</td>
      <td>First run&#39;s agent hit context limits</td>
      <td>Reduce repos per agent to 4-5</td>
    </tr>
    <tr>
      <td>Subjective findings varying</td>
      <td>&quot;Looks good&quot; vs. &quot;needs improvement&quot;</td>
      <td>Replace with deterministic commands</td>
    </tr>
    <tr>
      <td>Count mismatches</td>
      <td>Agents deriving counts differently</td>
      <td>Canonical JSON source of truth</td>
    </tr>
    <tr>
      <td>Phantom fixes</td>
      <td>Remediation interleaved with detection</td>
      <td>Separate detection from remediation</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">After implementing all eight strategies, the audit achieved idempotency. Two consecutive runs against identical code produce identical findings. The false impression that the codebase was &quot;perpetually broken&quot; disappeared. It was never the codebase. It was the audit.</p>
<h2 id="the-hybrid-approach-deterministic-guardrails-with-semantic-reasoning">The Hybrid Approach: Deterministic Guardrails with Semantic Reasoning</h2>
<p class="mb-4 font-light font-serif">Not every check can be reduced to a bash one-liner. Documentation quality assessment, cross-reference consistency between prose documents, and architecture alignment require semantic understanding that only an LLM can provide. The solution is a hybrid architecture:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Phase Zero (fully deterministic):</strong> Bash scripts validate all mechanical checks against canonical data. No LLM involvement. Produces identical results every time.</li>
<li><strong>Phase One (constrained LLM):</strong> Agents execute structured checks with enumeration requirements, scope limits, and output schemas. The LLM handles checks that require reading comprehension, but the scaffolding constrains its behavior.</li>
<li><strong>Phase Two (semantic LLM):</strong> Agents perform genuinely subjective assessments (documentation quality, naming consistency, architecture coherence). These findings are flagged as &quot;semantic&quot; in the report and are expected to have some variance between runs.</li>
<li><strong>Validation gate:</strong> Post-fix, Phase Zero re-runs to confirm mechanical checks still pass. If Phase Zero regresses, fixes are applied before finalizing.</li>
</ol>
<p class="mb-4 font-light font-serif">The key insight is that you do not need 100% determinism. You need determinism where it matters (counts, file existence, security checks, compliance validation) and can tolerate variance where it does not (documentation style suggestions, naming recommendations). Labeling which checks are deterministic and which are semantic lets you set appropriate expectations for reproducibility.</p>
<h2 id="cost-and-performance-trade-offs">Cost and Performance Trade-Offs</h2>
<p class="mb-4 font-light font-serif">Deterministic architectures cost more tokens. There is no way around this. Here are the real numbers from my production system:</p>
<table>
  <thead>
    <tr>
      <th>Approach</th>
      <th>Agents</th>
      <th>Tokens per Run</th>
      <th>Run Time</th>
      <th>Findings Consistency</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Single agent, open prompt</td>
      <td>1</td>
      <td>~50K</td>
      <td>15 min</td>
      <td>Poor (30-50% variance)</td>
    </tr>
    <tr>
      <td>Three agents, structured</td>
      <td>3</td>
      <td>~150K</td>
      <td>25 min</td>
      <td>Moderate (10-20% variance)</td>
    </tr>
    <tr>
      <td>Ten agents, full deterministic</td>
      <td>10</td>
      <td>~400K</td>
      <td>45 min</td>
      <td>Excellent (&lt;2% variance)</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The ten-agent deterministic approach costs 8x more tokens than the single-agent approach. It takes 3x longer. And it is the only approach that produces results I can trust. The cheaper approaches generate findings reports that look plausible but are not reproducible, which means every &quot;finding&quot; requires manual verification, which means the agent is not actually saving time.</p>
<p class="mb-4 font-light font-serif">The 8x token cost is the price of trustworthy automation. It is worth paying.</p>
<h2 id="lessons-from-production">Lessons from Production</h2>
<p class="mb-4 font-light font-serif">After running this architecture daily for over a month across 42 repositories, several patterns have emerged.</p>
<p class="mb-4 font-light font-serif"><strong>Agent scope is the biggest lever.</strong> Reducing repos-per-agent from 14 to 5 improved findings consistency more than any other single change. Context pressure is the silent killer of determinism.</p>
<p class="mb-4 font-light font-serif"><strong>Canonical data files eliminate an entire class of bugs.</strong> Before introducing <code>canonical.json</code>, different agents would derive different counts for the same metric depending on how they traversed the filesystem. One agent counted 143 packages because it excluded a hidden directory. Another counted 145 because it included a template directory. The canonical file ended the argument.</p>
<p class="mb-4 font-light font-serif"><strong>Phase Zero catches 60-70% of issues.</strong> Most audit failures are mechanical: missing files, wrong counts, uncommitted changes, stale documentation. A bash script finds these faster and more reliably than any LLM agent. The agents should focus on the 30-40% of checks that require semantic understanding.</p>
<p class="mb-4 font-light font-serif"><strong>The idempotency test is your quality gate.</strong> Run it weekly. When it fails, something in the architecture has drifted. Fix the architecture, not the symptoms.</p>
<p class="mb-4 font-light font-serif"><strong>Non-determinism is a feature for some tasks.</strong> Code review suggestions, documentation improvement ideas, and architecture recommendations benefit from variance. You want different perspectives across runs. Just do not mix these semantic tasks with deterministic validation in the same report.</p>
<h2 id="key-patterns-and-takeaways">Key Patterns and Takeaways</h2>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Temperature equals zero is necessary but not sufficient.</strong> It reduces variance but does not eliminate it. Batch invariance and floating-point effects dominate.</li>
<li><strong>Determinism lives in the scaffolding, not the model.</strong> Build deterministic architectures around non-deterministic models. Constrain the agent&#39;s behavior so its non-determinism cannot affect outcomes.</li>
<li><strong>Enumerate, never sample.</strong> Every check against a countable set must enumerate the full set and report exact counts. Put the expected count in the prompt.</li>
<li><strong>Prefer deterministic commands over natural language inspection.</strong> If a check can be expressed as a bash one-liner, use the command.</li>
<li><strong>Maintain canonical sources of truth.</strong> Every validated number should come from a single authoritative file, not from agent-derived counts.</li>
<li><strong>Limit agent scope to 4-5 repos.</strong> Context pressure causes non-deterministic degradation. More agents with less scope beats fewer agents with more scope.</li>
<li><strong>Separate detection from remediation.</strong> Never interleave finding issues with fixing them. The findings report is your audit trail.</li>
<li><strong>Test for idempotency.</strong> If two consecutive runs against identical code produce different findings, the architecture is broken.</li>
<li><strong>Accept that some checks are inherently non-deterministic.</strong> Label them as semantic and set appropriate expectations. Do not try to force determinism where it is not achievable.</li>
<li><strong>Pay the token cost.</strong> Deterministic architectures cost more. The alternative is untrustworthy automation, which costs more in human verification time than the tokens ever will.</li>
</ol>
<h2 id="appendix-a-sanitized-deployment-readiness-audit-specification">Appendix A: Sanitized Deployment Readiness Audit Specification</h2>
<p class="mb-4 font-light font-serif">The following is a sanitized version of the actual audit specification I use to validate deployment readiness across 42 repositories daily. Project names, domain-specific details, and proprietary references have been replaced with generic equivalents. The structure and methodology are unchanged.</p>
<p class="mb-4 font-light font-serif">This document evolved through three weeks of iteration. The first version was a paragraph of prose that said &quot;check all repos for common issues.&quot; The current version is 300+ lines of explicit checks, severity classifications, and agent scope rules. Every line exists because a previous audit produced non-deterministic results without it.</p>
<h3 id="preamble-and-philosophy">Preamble and Philosophy</h3>
<div class="highlight"><pre><span></span><span class="c1"># Full Deployment Readiness Audit</span>

<span class="n">This</span><span class="w"> </span><span class="n">audit</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">run</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">clean</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">fresh</span><span class="w"> </span><span class="n">session</span>
<span class="n">with</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">prior</span><span class="w"> </span><span class="n">conversation</span><span class="w"> </span><span class="n">history</span><span class="o">.</span>

<span class="c1">## Exhaustive Verification — Mandatory</span>

<span class="n">This</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">audit</span><span class="p">,</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">spot</span><span class="o">-</span><span class="n">check</span><span class="o">.</span><span class="w"> </span><span class="n">Every</span><span class="w"> </span><span class="n">check</span><span class="w"> </span><span class="n">described</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">this</span>
<span class="n">document</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">performed</span><span class="w"> </span><span class="n">exhaustively</span><span class="w"> </span><span class="n">against</span><span class="w"> </span><span class="n">every</span><span class="w"> </span><span class="n">applicable</span><span class="w"> </span><span class="n">item</span><span class="o">.</span>
<span class="n">No</span><span class="w"> </span><span class="n">sampling</span><span class="o">.</span><span class="w"> </span><span class="n">No</span><span class="w"> </span><span class="s2">&quot;spot-checking a representative subset.&quot;</span><span class="w"> </span><span class="n">No</span><span class="w"> </span><span class="s2">&quot;verified</span>
<span class="n">a</span><span class="w"> </span><span class="n">few</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">they</span><span class="w"> </span><span class="n">all</span><span class="w"> </span><span class="n">passed</span><span class="o">.</span><span class="s2">&quot; If a check says &quot;</span><span class="k">for</span><span class="w"> </span><span class="n">every</span><span class="w"> </span><span class="n">package</span><span class="s2">&quot; it</span>
<span class="n">means</span><span class="w"> </span><span class="n">every</span><span class="w"> </span><span class="n">single</span><span class="w"> </span><span class="n">one</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="mi">144</span><span class="o">+</span><span class="w"> </span><span class="n">packages</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">says</span><span class="w"> </span><span class="s2">&quot;for each</span>
<span class="n">service</span><span class="s2">&quot; it means all services.</span>

<span class="c1">### Rules for audit agents</span>

<span class="mf">1.</span><span class="w"> </span><span class="n">Enumerate</span><span class="p">,</span><span class="w"> </span><span class="n">don</span><span class="s1">&#39;t sample. When checking N items, check all N.</span>
<span class="w">   </span><span class="n">Report</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="n">checked</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">passed</span><span class="o">/</span><span class="n">failed</span><span class="o">.</span>
<span class="w">   </span><span class="n">Example</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;144/144 packages have all 5 required files&quot;</span>
<span class="w">   </span><span class="ow">not</span><span class="w"> </span><span class="s2">&quot;checked several packages and they all look good.&quot;</span>

<span class="mf">2.</span><span class="w"> </span><span class="n">Use</span><span class="w"> </span><span class="n">deterministic</span><span class="w"> </span><span class="n">commands</span><span class="o">.</span><span class="w"> </span><span class="n">Prefer</span><span class="w"> </span><span class="n">find</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">wc</span><span class="w"> </span><span class="o">-</span><span class="n">l</span><span class="p">,</span><span class="w"> </span><span class="n">grep</span><span class="w"> </span><span class="o">-</span><span class="n">c</span><span class="p">,</span><span class="w"> </span><span class="n">diff</span><span class="p">,</span>
<span class="w">   </span><span class="ow">and</span><span class="w"> </span><span class="n">scripted</span><span class="w"> </span><span class="n">loops</span><span class="w"> </span><span class="n">over</span><span class="w"> </span><span class="n">manual</span><span class="w"> </span><span class="n">inspection</span><span class="o">.</span>

<span class="mf">3.</span><span class="w"> </span><span class="n">Report</span><span class="w"> </span><span class="n">exact</span><span class="w"> </span><span class="n">counts</span><span class="o">.</span><span class="w"> </span><span class="n">Every</span><span class="w"> </span><span class="n">check</span><span class="w"> </span><span class="n">result</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">include</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">number</span>
<span class="w">   </span><span class="n">of</span><span class="w"> </span><span class="n">items</span><span class="w"> </span><span class="n">examined</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">passed</span><span class="o">.</span>
<span class="w">   </span><span class="s2">&quot;PASS (845/845 specs valid)&quot;</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">just</span><span class="w"> </span><span class="s2">&quot;PASS.&quot;</span>

<span class="mf">4.</span><span class="w"> </span><span class="n">No</span><span class="w"> </span><span class="n">subjective</span><span class="w"> </span><span class="n">judgments</span><span class="o">.</span><span class="w"> </span><span class="s2">&quot;README looks comprehensive&quot;</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">a</span>
<span class="w">   </span><span class="n">check</span><span class="w"> </span><span class="n">result</span><span class="o">.</span><span class="w"> </span><span class="s2">&quot;README contains: overview (line 1-15), tech stack</span>
<span class="w">   </span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="mi">16</span><span class="o">-</span><span class="mi">22</span><span class="p">),</span><span class="w"> </span><span class="n">setup</span><span class="w"> </span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="mi">23</span><span class="o">-</span><span class="mi">40</span><span class="p">),</span><span class="w"> </span><span class="n">env</span><span class="w"> </span><span class="n">vars</span><span class="w"> </span><span class="p">(</span><span class="n">line</span><span class="w"> </span><span class="mi">41</span><span class="o">-</span><span class="mi">55</span><span class="p">)</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="mi">4</span><span class="o">/</span><span class="mi">4</span>
<span class="w">   </span><span class="n">required</span><span class="w"> </span><span class="n">sections</span><span class="w"> </span><span class="n">present</span><span class="s2">&quot; is.</span>

<span class="mf">5.</span><span class="w"> </span><span class="n">Itemize</span><span class="w"> </span><span class="n">failures</span><span class="w"> </span><span class="n">completely</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="n">out</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="mi">144</span><span class="w"> </span><span class="n">packages</span><span class="w"> </span><span class="n">are</span>
<span class="w">   </span><span class="n">missing</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">file</span><span class="p">,</span><span class="w"> </span><span class="n">list</span><span class="w"> </span><span class="n">all</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="n">by</span><span class="w"> </span><span class="n">name</span><span class="o">.</span>

<span class="mf">6.</span><span class="w"> </span><span class="n">Idempotency</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">audit</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">run</span><span class="w"> </span><span class="n">twice</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">row</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">code</span>
<span class="w">   </span><span class="n">changes</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">between</span><span class="p">,</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">produce</span><span class="w"> </span><span class="n">identical</span><span class="w"> </span><span class="n">findings</span><span class="o">.</span>

<span class="mf">7.</span><span class="w"> </span><span class="n">Agent</span><span class="w"> </span><span class="n">scope</span><span class="w"> </span><span class="n">limits</span><span class="o">.</span><span class="w"> </span><span class="n">Each</span><span class="w"> </span><span class="n">audit</span><span class="w"> </span><span class="n">agent</span><span class="w"> </span><span class="n">should</span><span class="w"> </span><span class="n">cover</span><span class="w"> </span><span class="n">at</span><span class="w"> </span><span class="n">most</span><span class="w"> </span><span class="mi">4</span><span class="o">-</span><span class="mi">5</span>
<span class="w">   </span><span class="n">repos</span><span class="o">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">agent</span><span class="w"> </span><span class="n">covers</span><span class="w"> </span><span class="n">more</span><span class="p">,</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">hit</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="n">pressure</span>
<span class="w">   </span><span class="ow">and</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="n">skipping</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">summarizing</span><span class="o">.</span>
</pre></div>

<h3 id="phase-zero-deterministic-pre-flight">Phase Zero: Deterministic Pre-Flight</h3>
<div class="highlight"><pre><span></span>##<span class="w"> </span><span class="nv">Phase</span><span class="w"> </span><span class="mi">0</span>:<span class="w"> </span><span class="nv">Canonical</span><span class="w"> </span><span class="nv">Validation</span><span class="w"> </span><span class="ss">(</span><span class="nv">automated</span>,<span class="w"> </span><span class="nv">run</span><span class="w"> </span><span class="nv">first</span><span class="ss">)</span>

<span class="nv">Before</span><span class="w"> </span><span class="nv">any</span><span class="w"> </span><span class="nv">agent</span><span class="o">-</span><span class="nv">driven</span><span class="w"> </span><span class="nv">audit</span><span class="w"> </span><span class="nv">begins</span>,<span class="w"> </span><span class="nv">run</span><span class="w"> </span><span class="nv">the</span><span class="w"> </span><span class="nv">deterministic</span>
<span class="nv">validation</span><span class="w"> </span><span class="nv">script</span>:

<span class="w">  </span><span class="nv">bash</span><span class="w"> </span>.<span class="nv">audits</span><span class="o">/</span><span class="nv">scripts</span><span class="o">/</span><span class="nv">validate</span><span class="o">-</span><span class="nv">canonical</span>.<span class="nv">sh</span>

<span class="nv">This</span><span class="w"> </span><span class="nv">script</span><span class="w"> </span><span class="nv">validates</span><span class="w"> </span><span class="nv">all</span><span class="w"> </span><span class="nv">mechanical</span><span class="w"> </span><span class="nv">checks</span><span class="w"> </span><span class="nv">against</span><span class="w"> </span><span class="nv">canonical</span>.<span class="nv">json</span>:
<span class="o">-</span><span class="w"> </span><span class="nv">Component</span><span class="w"> </span><span class="nv">count</span><span class="w"> </span><span class="nv">and</span><span class="w"> </span><span class="nv">per</span><span class="o">-</span><span class="nv">component</span><span class="w"> </span><span class="nv">sub</span><span class="o">-</span><span class="nv">counts</span>
<span class="o">-</span><span class="w"> </span><span class="nv">Schema</span><span class="w"> </span><span class="nv">validation</span><span class="w"> </span><span class="ss">(</span><span class="nv">all</span><span class="w"> </span><span class="nv">specs</span><span class="w"> </span><span class="nv">against</span><span class="w"> </span><span class="nv">schema</span>.<span class="nv">json</span><span class="ss">)</span>
<span class="o">-</span><span class="w"> </span><span class="nv">Git</span><span class="w"> </span><span class="nv">status</span><span class="w"> </span><span class="nv">across</span><span class="w"> </span><span class="nv">all</span><span class="w"> </span><span class="nv">repos</span><span class="w"> </span><span class="ss">(</span><span class="nv">no</span><span class="w"> </span><span class="nv">uncommitted</span><span class="w"> </span><span class="nv">changes</span><span class="ss">)</span>
<span class="o">-</span><span class="w"> </span><span class="nv">Naming</span><span class="w"> </span><span class="nv">convention</span><span class="w"> </span><span class="nv">consistency</span>
<span class="o">-</span><span class="w"> </span><span class="nv">Cleanup</span><span class="w"> </span><span class="nv">directory</span><span class="w"> </span><span class="nv">detection</span><span class="w"> </span><span class="nv">and</span><span class="w"> </span><span class="nv">removal</span>
<span class="o">-</span><span class="w"> </span>.<span class="nv">gitignore</span><span class="w"> </span><span class="nv">completeness</span><span class="w"> </span><span class="nv">across</span><span class="w"> </span><span class="nv">all</span><span class="w"> </span><span class="nv">repos</span>

<span class="k">If</span><span class="w"> </span><span class="nv">any</span><span class="w"> </span><span class="nv">check</span><span class="w"> </span><span class="nv">fails</span>,<span class="w"> </span><span class="nv">fix</span><span class="w"> </span><span class="nv">the</span><span class="w"> </span><span class="nv">issue</span><span class="w"> </span><span class="nv">before</span><span class="w"> </span><span class="nv">proceeding</span><span class="w"> </span><span class="nv">to</span><span class="w"> </span><span class="nv">agent</span><span class="w"> </span><span class="nv">phases</span>.

<span class="nv">When</span><span class="w"> </span><span class="nv">canonical</span><span class="w"> </span><span class="nv">numbers</span><span class="w"> </span><span class="nv">change</span>,<span class="w"> </span><span class="nv">update</span><span class="w"> </span><span class="nv">canonical</span>.<span class="nv">json</span><span class="w"> </span><span class="nv">to</span><span class="w"> </span><span class="nv">match</span>
<span class="nv">reality</span>.<span class="w"> </span><span class="nv">The</span><span class="w"> </span><span class="nv">canonical</span><span class="w"> </span><span class="nv">file</span><span class="w"> </span><span class="nv">is</span><span class="w"> </span><span class="nv">the</span><span class="w"> </span><span class="nv">single</span><span class="w"> </span><span class="nv">source</span><span class="w"> </span><span class="nv">of</span><span class="w"> </span><span class="nv">truth</span><span class="w"> </span>—
<span class="nv">all</span><span class="w"> </span><span class="nv">repos</span><span class="w"> </span><span class="nv">should</span><span class="w"> </span><span class="nv">reference</span><span class="w"> </span><span class="nv">these</span><span class="w"> </span><span class="nv">numbers</span><span class="w"> </span><span class="nv">rather</span><span class="w"> </span><span class="nv">than</span><span class="w"> </span><span class="nv">maintaining</span>
<span class="nv">their</span><span class="w"> </span><span class="nv">own</span><span class="w"> </span><span class="nv">copies</span>.
</pre></div>

<h3 id="per-category-check-templates">Per-Category Check Templates</h3>
<div class="highlight"><pre><span></span><span class="c1">## Backend Services (run for EACH service)</span>

<span class="mf">1.</span><span class="w"> </span><span class="n">Git</span><span class="w"> </span><span class="n">status</span><span class="p">:</span><span class="w"> </span><span class="n">Clean</span><span class="w"> </span><span class="n">working</span><span class="w"> </span><span class="n">tree</span><span class="p">,</span><span class="w"> </span><span class="n">up</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">date</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">origin</span><span class="o">.</span>
<span class="mf">2.</span><span class="w"> </span><span class="n">Fast</span><span class="w"> </span><span class="n">tests</span><span class="p">:</span><span class="w"> </span><span class="n">Run</span><span class="w"> </span><span class="n">pytest</span><span class="w"> </span><span class="o">-</span><span class="n">m</span><span class="w"> </span><span class="s2">&quot;not slow&quot;</span><span class="w"> </span><span class="o">--</span><span class="n">tb</span><span class="o">=</span><span class="n">short</span><span class="w"> </span><span class="o">-</span><span class="n">q</span><span class="o">.</span>
<span class="w">   </span><span class="n">Record</span><span class="p">:</span><span class="w"> </span><span class="n">passed</span><span class="p">,</span><span class="w"> </span><span class="n">failed</span><span class="p">,</span><span class="w"> </span><span class="n">skipped</span><span class="o">.</span><span class="w"> </span><span class="n">Zero</span><span class="w"> </span><span class="n">failures</span><span class="o">.</span>
<span class="mf">3.</span><span class="w"> </span><span class="n">Coverage</span><span class="p">:</span><span class="w"> </span><span class="n">Run</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="o">--</span><span class="n">cov</span><span class="o">.</span><span class="w"> </span><span class="n">Must</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="o">&gt;=</span><span class="w"> </span><span class="mi">75</span><span class="o">%.</span>
<span class="mf">4.</span><span class="w"> </span><span class="n">Security</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="n">hardcoded</span><span class="w"> </span><span class="n">secrets</span><span class="p">:</span><span class="w"> </span><span class="n">Grep</span><span class="w"> </span><span class="o">.</span><span class="n">py</span><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">API</span><span class="w"> </span><span class="n">key</span>
<span class="w">   </span><span class="n">patterns</span><span class="p">,</span><span class="w"> </span><span class="n">password</span><span class="w"> </span><span class="n">literals</span><span class="p">,</span><span class="w"> </span><span class="n">secret</span><span class="w"> </span><span class="n">literals</span><span class="o">.</span>
<span class="w">   </span><span class="n">Exclude</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">example</span><span class="o">.</span>
<span class="mf">5.</span><span class="w"> </span><span class="n">Security</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">tracked</span><span class="p">:</span><span class="w"> </span><span class="n">git</span><span class="w"> </span><span class="n">ls</span><span class="o">-</span><span class="n">files</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="w"> </span><span class="n">must</span>
<span class="w">   </span><span class="k">return</span><span class="w"> </span><span class="n">empty</span><span class="o">.</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">example</span><span class="w"> </span><span class="n">SHOULD</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">tracked</span><span class="o">.</span>
<span class="mf">6.</span><span class="w"> </span><span class="n">Dependency</span><span class="w"> </span><span class="n">declaration</span><span class="p">:</span><span class="w"> </span><span class="n">Check</span><span class="w"> </span><span class="n">whether</span><span class="w"> </span><span class="n">deps</span><span class="w"> </span><span class="n">are</span><span class="w"> </span><span class="ow">in</span>
<span class="w">   </span><span class="n">pyproject</span><span class="o">.</span><span class="n">toml</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">requirements</span><span class="o">.</span><span class="n">txt</span><span class="o">.</span><span class="w"> </span><span class="n">Flag</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="n">deps</span>
<span class="w">   </span><span class="n">are</span><span class="w"> </span><span class="n">mixed</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">runtime</span><span class="w"> </span><span class="n">deps</span><span class="o">.</span>
<span class="mf">7.</span><span class="w"> </span><span class="n">Required</span><span class="w"> </span><span class="n">docs</span><span class="p">:</span><span class="w"> </span><span class="n">Verify</span><span class="w"> </span><span class="n">docs</span><span class="o">/</span><span class="w"> </span><span class="n">contains</span><span class="w"> </span><span class="n">requirements</span><span class="o">.</span><span class="n">md</span><span class="p">,</span>
<span class="w">   </span><span class="n">design</span><span class="o">.</span><span class="n">md</span><span class="p">,</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">testing</span><span class="o">-</span><span class="n">strategy</span><span class="o">.</span><span class="n">md</span><span class="o">.</span>
<span class="mf">8.</span><span class="w"> </span><span class="n">README</span><span class="w"> </span><span class="n">completeness</span><span class="p">:</span><span class="w"> </span><span class="n">Verify</span><span class="w"> </span><span class="n">README</span><span class="w"> </span><span class="n">contains</span><span class="p">:</span><span class="w"> </span><span class="n">project</span>
<span class="w">   </span><span class="n">overview</span><span class="p">,</span><span class="w"> </span><span class="n">tech</span><span class="w"> </span><span class="n">stack</span><span class="p">,</span><span class="w"> </span><span class="n">local</span><span class="w"> </span><span class="n">setup</span><span class="p">,</span><span class="w"> </span><span class="n">Docker</span><span class="w"> </span><span class="n">instructions</span><span class="p">,</span>
<span class="w">   </span><span class="n">environment</span><span class="w"> </span><span class="n">variables</span><span class="w"> </span><span class="n">list</span><span class="p">,</span><span class="w"> </span><span class="n">API</span><span class="w"> </span><span class="n">endpoint</span><span class="w"> </span><span class="n">overview</span><span class="o">.</span>
<span class="w">   </span><span class="n">Flag</span><span class="w"> </span><span class="n">any</span><span class="w"> </span><span class="n">missing</span><span class="w"> </span><span class="n">section</span><span class="o">.</span>
<span class="mf">9.</span><span class="w"> </span><span class="n">Port</span><span class="w"> </span><span class="n">consistency</span><span class="p">:</span><span class="w"> </span><span class="n">Check</span><span class="w"> </span><span class="n">that</span><span class="w"> </span><span class="n">port</span><span class="w"> </span><span class="n">numbers</span><span class="w"> </span><span class="ow">in</span>
<span class="w">   </span><span class="n">Dockerfile</span><span class="o">/</span><span class="n">docker</span><span class="o">-</span><span class="n">compose</span><span class="o">/</span><span class="n">uvicorn</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="n">the</span>
<span class="w">   </span><span class="n">canonical</span><span class="w"> </span><span class="n">port</span><span class="w"> </span><span class="n">reference</span><span class="w"> </span><span class="n">document</span><span class="o">.</span>
<span class="mf">10.</span><span class="w"> </span><span class="n">Commit</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">push</span><span class="w"> </span><span class="n">all</span><span class="w"> </span><span class="n">changes</span><span class="o">.</span>
</pre></div>

<div class="highlight"><pre><span></span><span class="c1">## Frontend Clients (run for EACH client)</span>

<span class="mf">1.</span><span class="w"> </span><span class="n">Git</span><span class="w"> </span><span class="n">status</span><span class="p">:</span><span class="w"> </span><span class="n">Clean</span><span class="w"> </span><span class="n">working</span><span class="w"> </span><span class="n">tree</span><span class="p">,</span><span class="w"> </span><span class="n">up</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">date</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">origin</span><span class="o">.</span>
<span class="mf">2.</span><span class="w"> </span><span class="n">ESLint</span><span class="p">:</span><span class="w"> </span><span class="n">Run</span><span class="w"> </span><span class="n">npx</span><span class="w"> </span><span class="n">eslint</span><span class="w"> </span><span class="n">src</span><span class="o">/</span><span class="w"> </span><span class="o">--</span><span class="nb">max</span><span class="o">-</span><span class="n">warnings</span><span class="o">=</span><span class="mf">0.</span>
<span class="w">   </span><span class="n">Zero</span><span class="w"> </span><span class="n">errors</span><span class="w"> </span><span class="n">required</span><span class="o">.</span><span class="w"> </span><span class="n">Warnings</span><span class="w"> </span><span class="n">are</span><span class="w"> </span><span class="n">MEDIUM</span><span class="o">.</span>
<span class="mf">3.</span><span class="w"> </span><span class="n">TypeScript</span><span class="p">:</span><span class="w"> </span><span class="n">Run</span><span class="w"> </span><span class="n">npx</span><span class="w"> </span><span class="n">tsc</span><span class="w"> </span><span class="o">--</span><span class="n">noEmit</span><span class="o">.</span><span class="w"> </span><span class="n">Zero</span><span class="w"> </span><span class="n">errors</span><span class="w"> </span><span class="n">required</span><span class="o">.</span>
<span class="mf">4.</span><span class="w"> </span><span class="n">Security</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">tracked</span><span class="w"> </span><span class="n">secrets</span><span class="p">:</span><span class="w"> </span><span class="n">Grep</span><span class="w"> </span><span class="n">source</span><span class="w"> </span><span class="n">files</span><span class="w"> </span><span class="k">for</span>
<span class="w">   </span><span class="n">API</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="n">patterns</span><span class="o">.</span><span class="w"> </span><span class="n">Exclude</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="n">mocks</span><span class="w"> </span><span class="n">gated</span><span class="w"> </span><span class="n">behind</span>
<span class="w">   </span><span class="n">environment</span><span class="w"> </span><span class="n">variable</span><span class="w"> </span><span class="n">checks</span><span class="o">.</span>
<span class="mf">5.</span><span class="w"> </span><span class="n">Security</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">tracked</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">example</span><span class="w"> </span><span class="n">present</span><span class="o">.</span>
<span class="mf">6.</span><span class="w"> </span><span class="n">API</span><span class="w"> </span><span class="n">endpoint</span><span class="w"> </span><span class="n">URLs</span><span class="p">:</span><span class="w"> </span><span class="n">Grep</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">localhost</span><span class="p">:</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">http</span><span class="p">:</span><span class="o">//.</span>
<span class="w">   </span><span class="n">Every</span><span class="w"> </span><span class="n">URL</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">come</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">env</span><span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">fallback</span>
<span class="w">   </span><span class="n">default</span><span class="w"> </span><span class="n">matching</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">canonical</span><span class="w"> </span><span class="n">port</span><span class="w"> </span><span class="n">reference</span><span class="o">.</span>
<span class="mf">7.</span><span class="w"> </span><span class="n">Test</span><span class="w"> </span><span class="n">script</span><span class="w"> </span><span class="n">exists</span><span class="p">:</span><span class="w"> </span><span class="n">Check</span><span class="w"> </span><span class="n">package</span><span class="o">.</span><span class="n">json</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">test</span><span class="w"> </span><span class="n">script</span><span class="o">.</span>
<span class="mf">8.</span><span class="w"> </span><span class="n">Feature</span><span class="w"> </span><span class="n">parity</span><span class="w"> </span><span class="p">(</span><span class="n">desktop</span><span class="w"> </span><span class="n">vs</span><span class="w"> </span><span class="n">web</span><span class="p">):</span><span class="w"> </span><span class="n">Compare</span><span class="w"> </span><span class="n">directory</span>
<span class="w">   </span><span class="n">listings</span><span class="w"> </span><span class="n">between</span><span class="w"> </span><span class="n">web</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">desktop</span><span class="w"> </span><span class="n">clients</span><span class="o">.</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="n">any</span>
<span class="w">   </span><span class="n">screen</span><span class="w"> </span><span class="n">present</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">one</span><span class="w"> </span><span class="n">but</span><span class="w"> </span><span class="ow">not</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">other</span><span class="o">.</span>
<span class="mf">9.</span><span class="w"> </span><span class="n">README</span><span class="w"> </span><span class="n">completeness</span><span class="p">:</span><span class="w"> </span><span class="n">overview</span><span class="p">,</span><span class="w"> </span><span class="n">tech</span><span class="w"> </span><span class="n">stack</span><span class="p">,</span><span class="w"> </span><span class="n">setup</span><span class="p">,</span>
<span class="w">   </span><span class="n">build</span><span class="w"> </span><span class="n">instructions</span><span class="p">,</span><span class="w"> </span><span class="n">env</span><span class="w"> </span><span class="n">vars</span><span class="o">.</span>
<span class="mf">10.</span><span class="w"> </span><span class="n">Commit</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">push</span><span class="w"> </span><span class="n">all</span><span class="w"> </span><span class="n">changes</span><span class="o">.</span>
</pre></div>

<h3 id="findings-report-and-fix-protocol">Findings Report and Fix Protocol</h3>
<div class="highlight"><pre><span></span><span class="err">##</span><span class="w"> </span><span class="nx">Findings</span><span class="w"> </span><span class="nx">Report</span>

<span class="nx">After</span><span class="w"> </span><span class="nx">all</span><span class="w"> </span><span class="nx">checks</span><span class="w"> </span><span class="nx">complete</span><span class="w"> </span><span class="nx">but</span><span class="w"> </span><span class="nx">BEFORE</span><span class="w"> </span><span class="nx">starting</span><span class="w"> </span><span class="nx">any</span><span class="w"> </span><span class="nx">fixes</span><span class="p">,</span>
<span class="nx">dump</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">complete</span><span class="w"> </span><span class="nx">findings</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">structured</span><span class="w"> </span><span class="nx">report</span><span class="p">:</span>

<span class="o">-</span><span class="w"> </span><span class="nx">Summary</span><span class="w"> </span><span class="nx">table</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">all</span><span class="w"> </span><span class="nx">repos</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">pass</span><span class="o">/</span><span class="nx">fail</span><span class="w"> </span><span class="nx">per</span><span class="w"> </span><span class="nx">category</span>
<span class="o">-</span><span class="w"> </span><span class="nx">Every</span><span class="w"> </span><span class="nx">issue</span><span class="w"> </span><span class="nx">grouped</span><span class="w"> </span><span class="nx">by</span><span class="w"> </span><span class="nx">repo</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">severity</span>
<span class="w">  </span><span class="p">(</span><span class="nx">CRITICAL</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">HIGH</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">MEDIUM</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nx">LOW</span><span class="p">)</span>
<span class="o">-</span><span class="w"> </span><span class="nx">Test</span><span class="w"> </span><span class="nx">results</span><span class="w"> </span><span class="p">(</span><span class="nx">pass</span><span class="o">/</span><span class="nx">fail</span><span class="w"> </span><span class="nx">counts</span><span class="p">,</span><span class="w"> </span><span class="nx">coverage</span><span class="w"> </span><span class="nx">percentages</span><span class="p">)</span>
<span class="o">-</span><span class="w"> </span><span class="nx">Security</span><span class="w"> </span><span class="nx">findings</span>
<span class="o">-</span><span class="w"> </span><span class="nx">Stale</span><span class="w"> </span><span class="nx">documentation</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="nx">incorrect</span><span class="w"> </span><span class="nx">cross</span><span class="o">-</span><span class="nx">references</span>

<span class="nx">Completeness</span><span class="w"> </span><span class="nx">attestation</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;X total checks executed across</span>
<span class="s">Y repos. Z items examined exhaustively (N packages, M specs,</span>
<span class="s">P components).&quot;</span>

<span class="nx">Only</span><span class="w"> </span><span class="nx">after</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">findings</span><span class="w"> </span><span class="nx">report</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="nx">fully</span><span class="w"> </span><span class="nx">displayed</span><span class="w"> </span><span class="nx">should</span><span class="w"> </span><span class="nx">you</span>
<span class="nx">proceed</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">fixes</span><span class="p">.</span>

<span class="err">##</span><span class="w"> </span><span class="nx">Fixes</span>

<span class="o">-</span><span class="w"> </span><span class="nx">For</span><span class="w"> </span><span class="nx">every</span><span class="w"> </span><span class="nx">defect</span><span class="w"> </span><span class="nx">found</span><span class="p">,</span><span class="w"> </span><span class="nx">write</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">regression</span><span class="w"> </span><span class="nx">test</span><span class="w"> </span><span class="nx">covering</span>
<span class="w">  </span><span class="nx">the</span><span class="w"> </span><span class="nx">errant</span><span class="w"> </span><span class="nx">code</span><span class="w"> </span><span class="nx">path</span><span class="p">.</span>
<span class="o">-</span><span class="w"> </span><span class="nx">For</span><span class="w"> </span><span class="nx">stale</span><span class="w"> </span><span class="nx">documentation</span><span class="p">,</span><span class="w"> </span><span class="nx">update</span><span class="w"> </span><span class="nx">files</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">be</span><span class="w"> </span><span class="nx">current</span><span class="p">.</span>
<span class="o">-</span><span class="w"> </span><span class="nx">After</span><span class="w"> </span><span class="nx">all</span><span class="w"> </span><span class="nx">fixes</span><span class="p">,</span><span class="w"> </span><span class="nx">re</span><span class="o">-</span><span class="nx">run</span><span class="w"> </span><span class="nx">Phase</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">confirm</span><span class="w"> </span><span class="nx">mechanical</span>
<span class="w">  </span><span class="nx">checks</span><span class="w"> </span><span class="nx">still</span><span class="w"> </span><span class="nx">pass</span><span class="p">.</span><span class="w"> </span><span class="nx">The</span><span class="w"> </span><span class="nx">goal</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="nx">that</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">hypothetical</span>
<span class="w">  </span><span class="nx">immediate</span><span class="w"> </span><span class="nx">second</span><span class="w"> </span><span class="nx">audit</span><span class="w"> </span><span class="nx">run</span><span class="w"> </span><span class="nx">would</span><span class="w"> </span><span class="nx">produce</span><span class="w"> </span><span class="nx">zero</span><span class="w"> </span><span class="nx">findings</span><span class="p">.</span>
</pre></div>

<h2 id="appendix-b-sanitized-diagram-audit-specification">Appendix B: Sanitized Diagram Audit Specification</h2>
<p class="mb-4 font-light font-serif">This is a sanitized version of the specification I use for exhaustive verification of technical diagrams against their corresponding specifications. The original audits diagrams for patent filings, but the architecture applies to any system where diagrams must accurately represent specifications: architecture diagrams vs. design docs, data flow diagrams vs. API specs, or infrastructure diagrams vs. deployment runbooks.</p>
<p class="mb-4 font-light font-serif">This specification was created after discovering that diagram audits were the most non-deterministic part of the entire system. Agents would flag different issues each run, miss obvious mismatches, and invent severity categories not in the specification. The solution was extreme explicitness: every possible finding has a pre-defined ID, severity classification is mandatory (agents cannot invent severities), and pre-flight checks handle everything that can be checked deterministically.</p>
<h3 id="severity-classification">Severity Classification</h3>
<div class="highlight"><pre><span></span><span class="p">##</span><span class="w"> </span><span class="n">Severity</span><span class="w"> </span><span class="n">Classification</span><span class="w"> </span><span class="p">(</span><span class="n">mandatory</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="n">agents</span><span class="w"> </span><span class="n">MUST</span><span class="w"> </span><span class="n">NOT</span><span class="w"> </span><span class="n">invent</span><span class="w"> </span><span class="n">severities</span><span class="p">)</span>

<span class="n">Agents</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">decide</span><span class="w"> </span><span class="n">severity</span><span class="p">.</span><span class="w"> </span><span class="n">Every</span><span class="w"> </span><span class="n">finding</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">match</span><span class="w"> </span><span class="n">exactly</span>
<span class="n">one</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">these</span><span class="w"> </span><span class="n">categories</span><span class="p">.</span><span class="w"> </span><span class="n">If</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">finding</span><span class="w"> </span><span class="n">does</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">match</span><span class="w"> </span><span class="n">any</span><span class="w"> </span><span class="n">category</span><span class="p">,</span>
<span class="n">it</span><span class="w"> </span><span class="n">is</span><span class="w"> </span><span class="n">ACCEPT</span><span class="w"> </span><span class="p">(</span><span class="k">do</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">report</span><span class="w"> </span><span class="n">it</span><span class="p">).</span>

<span class="p">###</span><span class="w"> </span><span class="n">Automatic</span><span class="w"> </span><span class="n">FAIL</span>

<span class="o">|</span><span class="w"> </span><span class="n">ID</span><span class="w">                  </span><span class="o">|</span><span class="w"> </span><span class="n">Rule</span><span class="w">                                                   </span><span class="o">|</span>
<span class="o">|---------------------|--------------------------------------------------------|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">MISSING</span><span class="o">-</span><span class="n">NODE</span><span class="w">      </span><span class="o">|</span><span class="w"> </span><span class="n">Spec</span><span class="w"> </span><span class="n">describes</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">component</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">diagram</span><span class="w"> </span><span class="n">has</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">node</span><span class="w">     </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">MISSING</span><span class="o">-</span><span class="n">NUMERAL</span><span class="w">   </span><span class="o">|</span><span class="w"> </span><span class="n">Reference</span><span class="w"> </span><span class="n">numeral</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="n">section</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">diagram</span><span class="w">       </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">DUPLICATE</span><span class="o">-</span><span class="n">NUMERAL</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Same</span><span class="w"> </span><span class="n">numeral</span><span class="w"> </span><span class="n">on</span><span class="w"> </span><span class="n">two</span><span class="w"> </span><span class="n">distinct</span><span class="w"> </span><span class="n">nodes</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">one</span><span class="w"> </span><span class="n">figure</span><span class="w">       </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">PHANTOM</span><span class="o">-</span><span class="n">NUMERAL</span><span class="w">   </span><span class="o">|</span><span class="w"> </span><span class="n">Numeral</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">diagram</span><span class="w"> </span><span class="n">does</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">exist</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">spec</span><span class="w">              </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">WRONG</span><span class="o">-</span><span class="n">CONCEPT</span><span class="w">     </span><span class="o">|</span><span class="w"> </span><span class="n">Numeral</span><span class="w"> </span><span class="n">labels</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">wrong</span><span class="w"> </span><span class="n">concept</span><span class="w"> </span><span class="n">vs</span><span class="p">.</span><span class="w"> </span><span class="n">spec</span><span class="w">              </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">EDGE</span><span class="o">-</span><span class="n">LABEL</span><span class="w">        </span><span class="o">|</span><span class="w"> </span><span class="n">Prohibited</span><span class="w"> </span><span class="k">edge</span><span class="w"> </span><span class="n">label</span><span class="w"> </span><span class="n">syntax</span><span class="w"> </span><span class="n">used</span><span class="w">                      </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">ID</span><span class="o">-</span><span class="n">COLLISION</span><span class="w">      </span><span class="o">|</span><span class="w"> </span><span class="n">Identifier</span><span class="w"> </span><span class="n">used</span><span class="w"> </span><span class="n">as</span><span class="w"> </span><span class="n">both</span><span class="w"> </span><span class="n">subgraph</span><span class="w"> </span><span class="n">ID</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="n">ID</span><span class="w">        </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">LOGIC</span><span class="o">-</span><span class="n">ERROR</span><span class="w">       </span><span class="o">|</span><span class="w"> </span><span class="n">Diagram</span><span class="w"> </span><span class="n">flow</span><span class="w"> </span><span class="n">contradicts</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="kt">logic</span><span class="w">                    </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">DOTTED</span><span class="o">-</span><span class="n">FORWARD</span><span class="w">    </span><span class="o">|</span><span class="w"> </span><span class="n">Forward</span><span class="w"> </span><span class="n">data</span><span class="w"> </span><span class="n">flow</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">dotted</span><span class="w"> </span><span class="n">arrow</span><span class="w"> </span><span class="p">(</span><span class="n">reserved</span><span class="w"> </span><span class="k">for</span><span class="w">      </span><span class="o">|</span>
<span class="o">|</span><span class="w">                     </span><span class="o">|</span><span class="w"> </span><span class="n">back</span><span class="o">-</span><span class="n">edges</span><span class="w"> </span><span class="n">only</span><span class="p">)</span><span class="w">                                       </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">SOLID</span><span class="o">-</span><span class="n">BACKEDGE</span><span class="w">    </span><span class="o">|</span><span class="w"> </span><span class="n">Back</span><span class="o">-</span><span class="k">edge</span><span class="w"> </span><span class="n">uses</span><span class="w"> </span><span class="n">solid</span><span class="w"> </span><span class="n">arrow</span><span class="w"> </span><span class="n">instead</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">dotted</span><span class="w">           </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">CROSS</span><span class="o">-</span><span class="n">CONFLICT</span><span class="w">    </span><span class="o">|</span><span class="w"> </span><span class="n">Same</span><span class="w"> </span><span class="n">numeral</span><span class="w"> </span><span class="n">refers</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">different</span><span class="w"> </span><span class="n">concepts</span><span class="w"> </span><span class="n">across</span><span class="w"> </span><span class="n">figs</span><span class="w">  </span><span class="o">|</span>

<span class="p">###</span><span class="w"> </span><span class="n">Automatic</span><span class="w"> </span><span class="n">WARN</span>

<span class="o">|</span><span class="w"> </span><span class="n">ID</span><span class="w">                     </span><span class="o">|</span><span class="w"> </span><span class="n">Rule</span><span class="w">                                                </span><span class="o">|</span>
<span class="o">|------------------------|-----------------------------------------------------|</span>
<span class="o">|</span><span class="w"> </span><span class="n">W</span><span class="o">-</span><span class="n">DECISION</span><span class="o">-</span><span class="n">INCOMPLETE</span><span class="w">  </span><span class="o">|</span><span class="w"> </span><span class="n">Decision</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="n">has</span><span class="w"> </span><span class="n">fewer</span><span class="w"> </span><span class="n">outcomes</span><span class="w"> </span><span class="n">than</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="n">describes</span><span class="w"> </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">W</span><span class="o">-</span><span class="n">MISSING</span><span class="o">-</span><span class="n">PARENT</span><span class="w">       </span><span class="o">|</span><span class="w"> </span><span class="n">Sub</span><span class="o">-</span><span class="n">components</span><span class="w"> </span><span class="n">shown</span><span class="w"> </span><span class="n">without</span><span class="w"> </span><span class="n">parent</span><span class="w"> </span><span class="n">grouping</span><span class="w">         </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">W</span><span class="o">-</span><span class="n">ORPHAN</span><span class="o">-</span><span class="n">NODE</span><span class="w">          </span><span class="o">|</span><span class="w"> </span><span class="n">Non</span><span class="o">-</span><span class="n">entry</span><span class="w"> </span><span class="n">node</span><span class="w"> </span><span class="n">has</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">incoming</span><span class="w"> </span><span class="k">edge</span><span class="w">                  </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">W</span><span class="o">-</span><span class="n">COVERAGE</span><span class="o">-</span><span class="n">GAP</span><span class="w">         </span><span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="n">element</span><span class="w"> </span><span class="n">has</span><span class="w"> </span><span class="n">no</span><span class="w"> </span><span class="n">visual</span><span class="w"> </span><span class="n">representation</span><span class="w">          </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">W</span><span class="o">-</span><span class="n">MISSING</span><span class="o">-</span><span class="n">HEADER</span><span class="w">       </span><span class="o">|</span><span class="w"> </span><span class="n">Diagram</span><span class="w"> </span><span class="n">file</span><span class="w"> </span><span class="n">lacks</span><span class="w"> </span><span class="n">required</span><span class="w"> </span><span class="n">header</span><span class="w"> </span><span class="n">comment</span><span class="w"> </span><span class="n">block</span><span class="w">     </span><span class="o">|</span>

<span class="p">###</span><span class="w"> </span><span class="n">Automatic</span><span class="w"> </span><span class="n">ACCEPT</span><span class="w"> </span><span class="p">(</span><span class="k">do</span><span class="w"> </span><span class="n">NOT</span><span class="w"> </span><span class="n">report</span><span class="p">)</span>

<span class="o">|</span><span class="w"> </span><span class="n">ID</span><span class="w">               </span><span class="o">|</span><span class="w"> </span><span class="n">Rule</span><span class="w">                                                  </span><span class="o">|</span>
<span class="o">|------------------|-------------------------------------------------------|</span>
<span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="o">-</span><span class="n">COLLAPSED</span><span class="o">-</span><span class="n">SUB</span><span class="w">  </span><span class="o">|</span><span class="w"> </span><span class="n">Sub</span><span class="o">-</span><span class="n">component</span><span class="w"> </span><span class="n">numerals</span><span class="w"> </span><span class="n">collapsed</span><span class="w"> </span><span class="n">into</span><span class="w"> </span><span class="n">parent</span><span class="w"> </span><span class="n">range</span><span class="w">     </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="o">-</span><span class="n">UNLABELED</span><span class="o">-</span><span class="n">IO</span><span class="w">   </span><span class="o">|</span><span class="w"> </span><span class="n">Input</span><span class="o">/</span><span class="k">output</span><span class="w"> </span><span class="n">nodes</span><span class="w"> </span><span class="n">without</span><span class="w"> </span><span class="n">spec</span><span class="o">-</span><span class="n">assigned</span><span class="w"> </span><span class="n">numerals</span><span class="w">      </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="o">-</span><span class="n">LONG</span><span class="o">-</span><span class="n">LABEL</span><span class="w">     </span><span class="o">|</span><span class="w"> </span><span class="n">Labels</span><span class="w"> </span><span class="n">exceeding</span><span class="w"> </span><span class="n">convention</span><span class="w"> </span><span class="n">when</span><span class="w"> </span><span class="n">improving</span><span class="w"> </span><span class="n">clarity</span><span class="w">     </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="o">-</span><span class="n">ABBREVIATION</span><span class="w">   </span><span class="o">|</span><span class="w"> </span><span class="n">Minor</span><span class="w"> </span><span class="n">label</span><span class="w"> </span><span class="n">abbreviations</span><span class="w"> </span><span class="n">vs</span><span class="p">.</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="n">wording</span><span class="w">             </span><span class="o">|</span>
<span class="o">|</span><span class="w"> </span><span class="n">A</span><span class="o">-</span><span class="n">SYNONYM</span><span class="o">-</span><span class="n">HEADER</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Header</span><span class="w"> </span><span class="n">using</span><span class="w"> </span><span class="n">synonymous</span><span class="w"> </span><span class="n">terms</span><span class="w">                          </span><span class="o">|</span>
</pre></div>

<h3 id="pre-flight-deterministic-checks">Pre-Flight Deterministic Checks</h3>
<div class="highlight"><pre><span></span><span class="err">##</span><span class="w"> </span><span class="nt">Pre-Flight</span><span class="w"> </span><span class="nt">Checks</span><span class="w"> </span><span class="o">(</span><span class="nt">deterministic</span><span class="w"> </span><span class="err">—</span><span class="w"> </span><span class="nt">run</span><span class="w"> </span><span class="nt">BEFORE</span><span class="w"> </span><span class="nt">reading</span><span class="w"> </span><span class="nt">spec</span><span class="o">)</span>

<span class="nt">For</span><span class="w"> </span><span class="nt">each</span><span class="w"> </span><span class="nt">component</span><span class="o">,</span><span class="w"> </span><span class="nt">run</span><span class="w"> </span><span class="nt">these</span><span class="w"> </span><span class="nt">bash</span><span class="w"> </span><span class="nt">checks</span><span class="w"> </span><span class="nt">FIRST</span><span class="w"> </span><span class="nt">and</span><span class="w"> </span><span class="nt">include</span>
<span class="nt">results</span><span class="w"> </span><span class="nt">in</span><span class="w"> </span><span class="nt">the</span><span class="w"> </span><span class="nt">findings</span><span class="o">.</span>

<span class="err">###</span><span class="w"> </span><span class="nt">a</span><span class="o">.</span><span class="w"> </span><span class="nt">Prohibited</span><span class="w"> </span><span class="nt">Syntax</span><span class="w"> </span><span class="nt">Patterns</span>
<span class="w">  </span><span class="nt">grep</span><span class="w"> </span><span class="nt">-nP</span><span class="w"> </span><span class="s1">&#39;PATTERN&#39;</span><span class="w"> </span><span class="nt">Diagrams</span><span class="o">/*</span><span class="p">.</span><span class="nc">mmd</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nt">echo</span><span class="w"> </span><span class="s2">&quot;CLEAN&quot;</span>
<span class="w">  </span><span class="nt">Any</span><span class="w"> </span><span class="nt">match</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="nt">F-EDGE-LABEL</span><span class="w"> </span><span class="nt">per</span><span class="w"> </span><span class="nt">file</span><span class="p">:</span><span class="nd">line</span><span class="o">.</span>

<span class="err">###</span><span class="w"> </span><span class="nt">b</span><span class="o">.</span><span class="w"> </span><span class="nt">Prohibited</span><span class="w"> </span><span class="nt">Node</span><span class="w"> </span><span class="nt">Types</span>
<span class="w">  </span><span class="nt">grep</span><span class="w"> </span><span class="nt">-n</span><span class="w"> </span><span class="s1">&#39;PATTERN&#39;</span><span class="w"> </span><span class="nt">Diagrams</span><span class="o">/*</span><span class="p">.</span><span class="nc">mmd</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nt">echo</span><span class="w"> </span><span class="s2">&quot;CLEAN&quot;</span>
<span class="w">  </span><span class="nt">Any</span><span class="w"> </span><span class="nt">match</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="nt">F-PSEUDOSTATE</span><span class="w"> </span><span class="nt">per</span><span class="w"> </span><span class="nt">file</span><span class="p">:</span><span class="nd">line</span><span class="o">.</span>

<span class="err">###</span><span class="w"> </span><span class="nt">c</span><span class="o">.</span><span class="w"> </span><span class="nt">Style</span><span class="w"> </span><span class="nt">Inventory</span>
<span class="w">  </span><span class="nt">grep</span><span class="w"> </span><span class="nt">-n</span><span class="w"> </span><span class="s1">&#39;PATTERN&#39;</span><span class="w"> </span><span class="nt">Diagrams</span><span class="o">/*</span><span class="p">.</span><span class="nc">mmd</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nt">echo</span><span class="w"> </span><span class="s2">&quot;NONE&quot;</span>
<span class="w">  </span><span class="nt">List</span><span class="w"> </span><span class="nt">every</span><span class="w"> </span><span class="nt">match</span><span class="o">.</span><span class="w"> </span><span class="nt">Agent</span><span class="w"> </span><span class="nt">classifies</span><span class="w"> </span><span class="nt">each</span><span class="w"> </span><span class="nt">using</span>
<span class="w">  </span><span class="nt">the</span><span class="w"> </span><span class="nt">cycle</span><span class="w"> </span><span class="nt">test</span><span class="w"> </span><span class="o">(</span><span class="nt">would</span><span class="w"> </span><span class="nt">removing</span><span class="w"> </span><span class="nt">the</span><span class="w"> </span><span class="nt">edge</span><span class="w"> </span><span class="nt">break</span><span class="w"> </span><span class="nt">a</span><span class="w"> </span><span class="nt">cycle</span><span class="o">?).</span>

<span class="err">###</span><span class="w"> </span><span class="nt">d</span><span class="o">.</span><span class="w"> </span><span class="nt">Header</span><span class="w"> </span><span class="nt">Validation</span>
<span class="w">  </span><span class="nt">for</span><span class="w"> </span><span class="nt">f</span><span class="w"> </span><span class="nt">in</span><span class="w"> </span><span class="nt">Diagrams</span><span class="o">/*</span><span class="p">.</span><span class="nc">mmd</span><span class="o">;</span><span class="w"> </span><span class="nt">do</span><span class="w"> </span><span class="nt">head</span><span class="w"> </span><span class="nt">-3</span><span class="w"> </span><span class="s2">&quot;$f&quot;</span><span class="o">;</span><span class="w"> </span><span class="nt">done</span>
<span class="w">  </span><span class="nt">Each</span><span class="w"> </span><span class="nt">file</span><span class="w"> </span><span class="nt">must</span><span class="w"> </span><span class="nt">have</span><span class="w"> </span><span class="nt">required</span><span class="w"> </span><span class="nt">header</span><span class="w"> </span><span class="nt">comments</span><span class="o">.</span>

<span class="err">###</span><span class="w"> </span><span class="nt">e</span><span class="o">.</span><span class="w"> </span><span class="nt">Duplicate</span><span class="w"> </span><span class="nt">Reference</span><span class="w"> </span><span class="nt">Detection</span>
<span class="w">  </span><span class="nt">for</span><span class="w"> </span><span class="nt">f</span><span class="w"> </span><span class="nt">in</span><span class="w"> </span><span class="nt">Diagrams</span><span class="o">/*</span><span class="p">.</span><span class="nc">mmd</span><span class="o">;</span><span class="w"> </span><span class="nt">do</span>
<span class="w">    </span><span class="nt">grep</span><span class="w"> </span><span class="nt">-oP</span><span class="w"> </span><span class="s1">&#39;\(\d+\)&#39;</span><span class="w"> </span><span class="s2">&quot;$f&quot;</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nt">sort</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nt">uniq</span><span class="w"> </span><span class="nt">-d</span>
<span class="w">  </span><span class="nt">done</span>
<span class="w">  </span><span class="nt">Any</span><span class="w"> </span><span class="nt">output</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="nt">potential</span><span class="w"> </span><span class="nt">F-DUPLICATE-NUMERAL</span><span class="o">.</span>

<span class="err">###</span><span class="w"> </span><span class="nt">f</span><span class="o">.</span><span class="w"> </span><span class="nt">Identifier</span><span class="w"> </span><span class="nt">Collision</span><span class="w"> </span><span class="nt">Detection</span>
<span class="w">  </span><span class="nt">Compare</span><span class="w"> </span><span class="nt">subgraph</span><span class="w"> </span><span class="nt">IDs</span><span class="w"> </span><span class="nt">against</span><span class="w"> </span><span class="nt">node</span><span class="w"> </span><span class="nt">IDs</span><span class="o">.</span>
<span class="w">  </span><span class="nt">Any</span><span class="w"> </span><span class="nt">overlap</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="nt">F-ID-COLLISION</span><span class="o">.</span>
</pre></div>

<h3 id="agent-isolation-and-output-schema">Agent Isolation and Output Schema</h3>
<div class="highlight"><pre><span></span><span class="p">##</span><span class="w"> </span><span class="n">Agent</span><span class="w"> </span><span class="n">Architecture</span>

<span class="n">One</span><span class="w"> </span><span class="n">agent</span><span class="w"> </span><span class="n">per</span><span class="w"> </span><span class="n">component</span><span class="p">.</span><span class="w"> </span><span class="n">Each</span><span class="w"> </span><span class="n">agent</span><span class="w"> </span><span class="n">gets</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">clean</span><span class="w"> </span><span class="n">context</span><span class="w"> </span><span class="n">with</span>
<span class="n">only</span><span class="w"> </span><span class="n">its</span><span class="w"> </span><span class="n">component</span><span class="p">&#39;</span><span class="n">s</span><span class="w"> </span><span class="n">spec</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">diagrams</span><span class="p">.</span><span class="w"> </span><span class="n">This</span><span class="w"> </span><span class="n">prevents</span><span class="w"> </span><span class="n">context</span>
<span class="n">pollution</span><span class="w"> </span><span class="n">across</span><span class="w"> </span><span class="n">components</span><span class="p">.</span>

<span class="p">##</span><span class="w"> </span><span class="n">Agent</span><span class="w"> </span><span class="n">Output</span><span class="w"> </span><span class="n">Schema</span>

<span class="n">Return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">findings</span><span class="w"> </span><span class="k">table</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">ONLY</span><span class="w"> </span><span class="n">FAIL</span><span class="w"> </span><span class="k">and</span><span class="w"> </span><span class="n">WARN</span><span class="w"> </span><span class="nl">rows:</span>

<span class="o">|</span><span class="w"> </span><span class="n">Fig</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">ID</span><span class="w">              </span><span class="o">|</span><span class="w"> </span><span class="n">Severity</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Detail</span><span class="w">                          </span><span class="o">|</span>
<span class="o">|-----|-----------------|----------|---------------------------------|</span>
<span class="o">|</span><span class="w"> </span><span class="mh">3</span><span class="w">   </span><span class="o">|</span><span class="w"> </span><span class="n">F</span><span class="o">-</span><span class="n">DOTTED</span><span class="o">-</span><span class="n">FORWARD</span><span class="o">|</span><span class="w"> </span><span class="n">FAIL</span><span class="w">     </span><span class="o">|</span><span class="w"> </span><span class="n">Line</span><span class="w"> </span><span class="mh">24</span><span class="o">:</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="o">-</span><span class="p">.</span><span class="o">-&gt;</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="n">is</span><span class="w"> </span><span class="n">forward</span><span class="w">    </span><span class="o">|</span>

<span class="n">Then</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">structured</span><span class="w"> </span><span class="n">JSON</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">deterministic</span><span class="w"> </span><span class="nl">aggregation:</span>

<span class="p">{</span>
<span class="w">  </span><span class="s">&quot;component&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">&quot;X&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="s">&quot;figures_checked&quot;</span><span class="o">:</span><span class="w"> </span><span class="mh">8</span><span class="p">,</span>
<span class="w">  </span><span class="s">&quot;fail_count&quot;</span><span class="o">:</span><span class="w"> </span><span class="mh">2</span><span class="p">,</span>
<span class="w">  </span><span class="s">&quot;warn_count&quot;</span><span class="o">:</span><span class="w"> </span><span class="mh">3</span><span class="p">,</span>
<span class="w">  </span><span class="s">&quot;clean_figures&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="mh">1</span><span class="p">,</span><span class="w"> </span><span class="mh">5</span><span class="p">,</span><span class="w"> </span><span class="mh">6</span><span class="p">],</span>
<span class="w">  </span><span class="s">&quot;findings&quot;</span><span class="o">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">      </span><span class="s">&quot;fig&quot;</span><span class="o">:</span><span class="w"> </span><span class="mh">3</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;id&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">&quot;F-DOTTED-FORWARD&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;severity&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">&quot;FAIL&quot;</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;line&quot;</span><span class="o">:</span><span class="w"> </span><span class="mh">24</span><span class="p">,</span>
<span class="w">      </span><span class="s">&quot;detail&quot;</span><span class="o">:</span><span class="w"> </span><span class="s">&quot;A -.-&gt; B is forward input, not back-edge&quot;</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">]</span>
<span class="p">}</span>

<span class="p">##</span><span class="w"> </span><span class="n">Baseline</span><span class="w"> </span><span class="n">Comparison</span>

<span class="n">After</span><span class="w"> </span><span class="n">all</span><span class="w"> </span><span class="n">agents</span><span class="w"> </span><span class="n">complete</span><span class="p">,</span><span class="w"> </span><span class="n">write</span><span class="w"> </span><span class="n">findings</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">baseline</span><span class="p">.</span><span class="n">json</span><span class="p">.</span>
<span class="n">On</span><span class="w"> </span><span class="n">subsequent</span><span class="w"> </span><span class="n">audits</span><span class="p">,</span><span class="w"> </span><span class="n">classify</span><span class="w"> </span><span class="n">each</span><span class="w"> </span><span class="n">finding</span><span class="w"> </span><span class="nl">as:</span>
<span class="o">-</span><span class="w"> </span><span class="nl">NEW:</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">previous</span><span class="w"> </span><span class="n">baseline</span><span class="w"> </span><span class="p">(</span><span class="n">regression</span><span class="p">)</span>
<span class="o">-</span><span class="w"> </span><span class="nl">KNOWN:</span><span class="w"> </span><span class="n">matches</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">previous</span><span class="w"> </span><span class="n">finding</span><span class="w"> </span><span class="p">(</span><span class="n">existing</span><span class="w"> </span><span class="n">debt</span><span class="p">)</span>
<span class="o">-</span><span class="w"> </span><span class="nl">FIXED:</span><span class="w"> </span><span class="n">in</span><span class="w"> </span><span class="n">previous</span><span class="w"> </span><span class="n">baseline</span><span class="w"> </span><span class="n">but</span><span class="w"> </span><span class="k">not</span><span class="w"> </span><span class="n">found</span><span class="w"> </span><span class="n">now</span><span class="w"> </span><span class="p">(</span><span class="n">resolved</span><span class="p">)</span>
</pre></div>

<h3 id="exception-suppression">Exception Suppression</h3>
<div class="highlight"><pre><span></span>##<span class="w"> </span><span class="nv">Exception</span><span class="w"> </span><span class="nv">Suppression</span>

<span class="nv">Before</span><span class="w"> </span><span class="nv">reporting</span><span class="w"> </span><span class="nv">findings</span>,<span class="w"> </span><span class="nv">read</span><span class="w"> </span><span class="nv">exceptions</span>.<span class="nv">json</span>.

<span class="o">-</span><span class="w"> </span><span class="nv">Global</span><span class="w"> </span><span class="nv">exceptions</span>:<span class="w"> </span><span class="nv">suppress</span><span class="w"> </span><span class="nv">matching</span><span class="w"> </span><span class="nv">findings</span><span class="w"> </span><span class="nv">across</span><span class="w"> </span><span class="nv">all</span>
<span class="w">  </span><span class="nv">figures</span><span class="w"> </span><span class="nv">in</span><span class="w"> </span><span class="nv">all</span><span class="w"> </span><span class="nv">components</span>.
<span class="o">-</span><span class="w"> </span><span class="nv">Per</span><span class="o">-</span><span class="nv">figure</span><span class="w"> </span><span class="nv">exceptions</span>:<span class="w"> </span><span class="nv">suppress</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="nv">specific</span><span class="w"> </span><span class="nv">figures</span><span class="w"> </span><span class="nv">only</span>.
<span class="o">-</span><span class="w"> </span><span class="nv">Per</span><span class="o">-</span><span class="nv">component</span><span class="w"> </span><span class="nv">exceptions</span>:<span class="w"> </span><span class="nv">suppress</span><span class="w"> </span><span class="nv">across</span><span class="w"> </span><span class="nv">all</span><span class="w"> </span><span class="nv">figures</span><span class="w"> </span><span class="nv">in</span>
<span class="w">  </span><span class="nv">a</span><span class="w"> </span><span class="nv">component</span>.

<span class="k">If</span><span class="w"> </span><span class="nv">a</span><span class="w"> </span><span class="nv">finding</span><span class="w"> </span><span class="nv">is</span><span class="w"> </span><span class="nv">suppressed</span><span class="w"> </span><span class="nv">by</span><span class="w"> </span><span class="nv">an</span><span class="w"> </span><span class="nv">exception</span>,<span class="w"> </span><span class="nv">omit</span><span class="w"> </span><span class="nv">it</span><span class="w"> </span><span class="nv">entirely</span>.
<span class="k">Do</span><span class="w"> </span><span class="nv">NOT</span><span class="w"> </span><span class="nv">report</span><span class="w"> </span><span class="nv">it</span><span class="w"> </span><span class="nv">as</span><span class="w"> </span><span class="s2">&quot;suppressed.&quot;</span>
</pre></div>

<p class="mb-4 font-light font-serif">The exception mechanism is critical for determinism. Without it, agents would re-report known false positives on every run, creating noise that obscures genuine regressions. The exception file is the canonical list of &quot;we know about this and it is not a problem.&quot; It turns what would be subjective agent judgment (&quot;should I flag this again?&quot;) into a deterministic lookup.</p>
<h2 id="additional-resources">Additional Resources</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><a href="https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Defeating Nondeterminism in LLM Inference</a> by Thinking Machines Lab. Deep technical analysis of batch invariance and floating-point sources of non-determinism.</li>
<li><a href="https://mbrenndoerfer.com/writing/why-llms-are-not-deterministic" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Why Temperature=0 Does Not Guarantee Deterministic LLM Outputs</a> by Michael Brenndoerfer. Empirical testing of the temperature-zero myth across multiple models.</li>
<li><a href="https://arxiv.org/html/2408.04667v5" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Non-Determinism of &quot;Deterministic&quot; LLM Settings</a> (2024, ACM Transactions on Software Engineering and Methodology). Academic study documenting 70 percentage point accuracy swings across identical conditions.</li>
<li><a href="https://arxiv.org/html/2601.09749" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">R-LAM: Reproducibility-Constrained Large Action Models</a> (2025). Framework achieving perfect reproducibility without degrading task performance.</li>
<li><a href="https://arxiv.org/html/2602.22700" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">IMMACULATE: Practical LLM Auditing Framework</a> (2025). Sampling-based audit approach requiring only 3,000 queries to detect 10% fraud with 95% confidence.</li>
<li><a href="https://www.kubiya.ai/blog/deterministic-ai-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Deterministic AI Architecture</a> by Kubiya. The &quot;Thin Agent / Fat Platform&quot; model for production agent systems.</li>
<li><a href="https://boundaryml.com/blog/schema-aligned-parsing" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Schema-Aligned Parsing vs. Function Calling</a> by BAML. Benchmark data showing SAP outperforms constrained generation for structured outputs.</li>
<li><a href="https://developers.openai.com/cookbook/examples/reproducible<em>outputs</em>with<em>the</em>seed_parameter" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">OpenAI Reproducible Outputs Cookbook</a>. Official documentation on the seed parameter and its limitations.</li>
</ul>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 28, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-28-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-28-leverage-record.html</id>
    <updated>2026-03-28T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-five tasks. March 28 was a consolidation day: deployment readiness audits continued their daily rhythm, the corporate website for Renkara got its full page suite, MCP server coverage expanded dramatically across three platforms, and a font standardization sweep hit every client app and website in the ecosystem. Lighter than the previous two days but still 5.5 weeks of human-equivalent output.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 26.3x, with a supervisory leverage of 159.5x. Every minute of prompt writing produced about 2.7 hours of engineering output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Corporate website: home, about, and intellectual property pages with full brand compliance</td>
      <td>6h</td>
      <td>4m</td>
      <td>0.15w</td>
      <td>90.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Deployment readiness audit: 37 repos, 321 checks, 4323 tests, 9 issues fixed</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Corporate website: products overview + 6 product detail pages + timeline page</td>
      <td>16h</td>
      <td>14m</td>
      <td>0.40w</td>
      <td>68.6x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Deployment readiness audit across 7 client repos (67 checks)</td>
      <td>8h</td>
      <td>7m</td>
      <td>0.20w</td>
      <td>68.6x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Build MCP server (28 tools) + expand two existing servers to 69 and 49 tools (full API coverage)</td>
      <td>24h</td>
      <td>30m</td>
      <td>0.60w</td>
      <td>48.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Port competitive game component from web to desktop client</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Deployment readiness audit across 7 client repos (73 checks)</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Backend test suite for issue tracker (5 modules: storage, attachments, notifications) to 70%+ coverage</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Expand MCP server from 10 to 49 tools covering all admin API endpoints</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Rebrand 6 websites: font swap and full color palette update across CSS/HTML</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>WebSocket broadcasting for all issue tracker mutation endpoints</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>End-to-end test suite (Playwright) for issue tracker frontend CRUD operations</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Build complete MCP server for leverage tracker (28 tools, config, client, server, venv)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Expand MCP server from 28 to 69 tools covering all 79 API endpoints</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Corporate website CSS, JavaScript, layout (navigation, footer, timeline styles)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Deployment readiness audit for 4 service repos (12 checks each)</td>
      <td>4h</td>
      <td>9m</td>
      <td>0.10w</td>
      <td>26.7x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Font standardization sweep across tools, libraries, websites, and learning platform</td>
      <td>3h</td>
      <td>7m</td>
      <td>0.075w</td>
      <td>25.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Switch 6 client apps from mixed fonts to standardized font stack</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Full deployment readiness audit: 37 repos, 292 checks, 4323 tests, 6 fixes</td>
      <td>16h</td>
      <td>40m</td>
      <td>0.40w</td>
      <td>24.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Fix 5 audit findings: website SEO/README + stale CORS configs + directory cleanup</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Full deployment readiness audit: 39 repos, 308 checks, 4323 tests, 6 fixes</td>
      <td>40h</td>
      <td>115m</td>
      <td>1.0w</td>
      <td>20.9x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Rebuild 2 client bundles with production API URLs</td>
      <td>0.5h</td>
      <td>2m</td>
      <td>0.013w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Fix 3 low-severity audit findings across 3 repos</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Full readiness audit: 37 repos + all fixes including deferred items</td>
      <td>10h</td>
      <td>88m</td>
      <td>0.25w</td>
      <td>6.8x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Full deployment readiness audit: 37 repos, 277 checks, 4323 tests, 10 fixes</td>
      <td>8h</td>
      <td>72m</td>
      <td>0.20w</td>
      <td>6.7x</td>
      <td>96.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>218.0</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>498</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>5.5</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>2,418,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>26.3x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>159.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The Renkara corporate website build dominated the top of the leverage chart. Three tasks (home/about/IP pages at 90x, product pages at 68.6x, and CSS/layout at 30x) totaled 28 human hours in 30 Claude minutes. Corporate websites are high-leverage because the content and design requirements are well-defined, the templates are conventional, and there is zero ambiguity in the output format.</p>
<p class="mb-4 font-light font-serif">MCP server expansion was the other major theme. Three servers went from partial to full API coverage: one new server built from scratch with 28 tools, one expanded from 28 to 69 tools, and one from 10 to 49 tools. The combined 48x leverage on the batch reflects the mechanical nature of tool endpoint generation once the API schema is known.</p>
<p class="mb-4 font-light font-serif">The five deployment readiness audits consumed 345 of the 498 total Claude minutes. The two longest (88 and 72 minutes, producing 6.8x and 6.7x respectively) dragged the daily average down significantly. These low-leverage audits were the most thorough runs of the day, involving deferred item resolution and cross-repo fix chains. Without them, the remaining 20 tasks averaged 42.5x.</p>
<p class="mb-4 font-light font-serif">Font standardization across the ecosystem (tasks 10, 17, 18) is a good example of work that is trivially parallelizable for AI but painful for humans. Touching CSS, HTML, and configuration files across 6+ repos requires context-switching that adds up fast. Three tasks, 8 human hours, 17 Claude minutes.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 159.5x continues to hold in the 150-170x range that has become the baseline for maintenance-heavy days. The 800x supervisory factor on the top audit (task 2) reflects a 3-minute prompt that produced 40 hours of cross-repo scanning and fixing.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 27, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-27-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-27-leverage-record.html</id>
    <updated>2026-03-27T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-seven tasks. Nine weeks of human-equivalent engineering output in a single day. March 27 was split between two themes: deployment readiness audits across the full 37-repository ecosystem and a major push on the issue tracker (sidebar navigation, hierarchical projects, Trello import of 803 cards across 13 boards, and full MCP tool coverage). The patent portfolio also got significant attention with a diagram overhaul that required building fixes into the Mermaid rendering library itself.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 31.0x, up from 24.2x the day before. The supervisory leverage factor was 155.2x, meaning every minute spent writing prompts produced over 2.5 hours of engineering output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Deployment readiness audit: 37 repos, 6 failures found and fixed (uncommitted work, stale locks, broken tests)</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Five-task batch: engine coverage + service tests + framework upgrade + bundle splitting + desktop/web feature parity</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Full readiness audit: 37 repos + 44 issues fixed + deterministic audit infrastructure (canonical schema + validation)</td>
      <td>40h</td>
      <td>39m</td>
      <td>1.0w</td>
      <td>61.5x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Build collapsible sidebar navigation for issue tracker</td>
      <td>3h</td>
      <td>4m</td>
      <td>0.075w</td>
      <td>45.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fix linter warnings across 2 client repos plus config and documentation cleanup</td>
      <td>2h</td>
      <td>3m</td>
      <td>0.050w</td>
      <td>40.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Fix 13 remaining warnings across 11 repos: service dependencies + desktop parity + environment configs</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Feature parity: port dashboard tour + competitive socket + micro-challenge components from web to desktop</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Add traceability entries (63 claims) to architecture documentation</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Add missing environment configuration templates to 3 client repos</td>
      <td>1.5h</td>
      <td>3m</td>
      <td>0.037w</td>
      <td>30.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Fix 4 warnings: shared tests + dependency lock + test scripts + service coverage</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Add 21 MCP tools to issue tracker (full API coverage)</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Deployment readiness audit: 37 repos, 4170 tests, 45 findings, 39 fixed</td>
      <td>16h</td>
      <td>34m</td>
      <td>0.40w</td>
      <td>28.2x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Fix all deferred audit items: linter warnings (55), test infra (4 repos), feature parity, documentation (8 repos)</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Service token auth + project management data import (13 boards, 803 cards)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Diagram rendering library overhaul: shape clipping, arrowheads, cycle-breaking, micro-jog snapping + 86 diagram fixes</td>
      <td>80h</td>
      <td>180m</td>
      <td>2.0w</td>
      <td>26.7x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Sync feature parity between web and desktop clients (internationalization, icons, suggestions)</td>
      <td>3h</td>
      <td>7m</td>
      <td>0.075w</td>
      <td>25.7x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Fix broken tests in document parser and empty exports in auth client</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Fix medium-severity findings across 5 repos (dependency separation + test config + declarations)</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Fix stale counts in domain specs and architecture documentation (subsystem refs, TOC, dates)</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Add dependency declarations and raise coverage thresholds across 4 services</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Fix 95 TypeScript errors across 5 client repos</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Sidebar navigation + hierarchical projects + tree API + data reorganization + documentation</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Email service: fix creation bug + 145 tests + end-to-end tests + deploy</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Full readiness audit: 37 repos, 323 checks, 4164 tests, 12 repos fixed and pushed</td>
      <td>8h</td>
      <td>23m</td>
      <td>0.20w</td>
      <td>20.9x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Fix high-severity findings across 4 library repos (documentation, exports, linting, peer dependencies)</td>
      <td>1h</td>
      <td>3m</td>
      <td>0.025w</td>
      <td>20.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Fix documentation gaps in 8 repos (environment variables, getting started, tech stack, Docker)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Deployment readiness audit: 37 repos + 5 defects fixed across 8 repos</td>
      <td>6h</td>
      <td>19m</td>
      <td>0.15w</td>
      <td>18.9x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Full deployment readiness audit: 37 repos with 7 parallel agents + 6 parallel fix agents, 79 findings, 25 auto-fixed</td>
      <td>8h</td>
      <td>30m</td>
      <td>0.20w</td>
      <td>16.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Fix medium-severity findings in 3 client repos (environment configs + linting)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>20.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Add cross-references (25 applications) to architecture interface documentation</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Add test infrastructure to 4 client repos (desktop, admin, origin, enterprise)</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Fix all linter warnings across 4 client repos (55 warnings resolved)</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Fix medium/low findings across 6 repos (cleanup + port updates + stale documentation)</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Set up end-to-end test framework for email service frontend</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Add missing cross-references and fix truncated titles in architecture documentation</td>
      <td>1.5h</td>
      <td>7m</td>
      <td>0.037w</td>
      <td>12.9x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Fix test infrastructure for 4 tool repos (dashboards, trackers, services)</td>
      <td>3h</td>
      <td>15m</td>
      <td>0.075w</td>
      <td>12.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Fix diagram rendering issues across 22 documentation files (25 edits)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>37</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>359.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>695</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>9.0</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,346,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>31.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>155.2x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The diagram rendering library overhaul (task 15) was the largest single task at 80 human-equivalent hours and 180 Claude minutes. This involved fixing core rendering bugs in the Mermaid library (shape clipping, arrowhead placement, cycle-breaking algorithms, micro-jog snapping for overlapping edges) and then applying those fixes across 86 diagrams. A human would have spent two full weeks on that. The 26.7x factor reflects the genuine algorithmic complexity involved.</p>
<p class="mb-4 font-light font-serif">The five deployment readiness audits (tasks 1, 3, 12, 24, 27, 28) consumed 167 Claude minutes combined and produced 371 human-equivalent hours of work. Scanning 37 repositories per audit with automated finding detection, fix generation, and push-to-remote is the kind of cross-cutting maintenance that absolutely buries human engineers. Context-switching across that many codebases is where AI leverage compounds most aggressively.</p>
<p class="mb-4 font-light font-serif">The issue tracker saw a full day of feature development: collapsible sidebar navigation, hierarchical project trees, a Trello import pipeline that migrated 803 cards across 13 boards, and 21 MCP tools for full API coverage. That cluster of work (tasks 4, 11, 14, 22) totaled 30 human-equivalent hours in 73 Claude minutes.</p>
<p class="mb-4 font-light font-serif">The five-task batch (task 2, 96x) stands out. Bundling five independent changes into a single prompt let the agent parallelize work that a human would execute sequentially. Engine test coverage, service tests, a major framework version upgrade, bundle splitting optimization, and desktop/web feature sync all landed in 25 minutes.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 155.2x means 139 minutes of prompt-writing time produced 359.5 hours of engineering output. That ratio held despite this being a maintenance-heavy day with many small fix-up tasks that individually have lower leverage than greenfield builds.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 26, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-26-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-26-leverage-record.html</id>
    <updated>2026-03-26T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-two tasks. The highest task count in a single day so far. March 26 was a deployment hardening marathon: three full deployment readiness audits across 37 repositories, test suites added to six separate libraries and services, security fixes, port standardization, SDK upgrades, and an Electron desktop client feature integration. The day closed with a newsletter service getting transactional email support and a full email rendering pipeline.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 24.2x. Significantly lower than recent days because three deployment readiness audits (178, 108, and 45 minutes of Claude time) dragged the average down. Those audits touched dozens of repositories each and involved real investigation time. The supervisory leverage factor was 168.8x, meaning every minute I spent writing prompts produced nearly three hours of human-equivalent output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Project management tool: hierarchy, import, model/schema/service/routes/migration/frontend/docs</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Desktop client feature parity: code lab + notification service integration</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Comprehensive OIDC auth client test suite (92 tests)</td>
      <td>4h</td>
      <td>4m</td>
      <td>0.10w</td>
      <td>60.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Deployment readiness audit: 37 repos scanned, findings report, 6 repos fixed and pushed</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>UI component library test suite (122 tests, 8 files)</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Payment webhook handler tests (19 tests: signature verification, idempotency, all event types)</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Payment SDK upgrade 8.x to 15.x</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td>40.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Console simulator test suite (182 tests, 10 files)</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Audit follow-up: service tests (101) + desktop features + SDK upgrade + auth tests (54) across 4 repos</td>
      <td>32h</td>
      <td>55m</td>
      <td>0.80w</td>
      <td>34.9x</td>
      <td>384.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Resolve audit findings: 13 issues across 12 repos (TS builds, auth regression, coverage improvements)</td>
      <td>24h</td>
      <td>45m</td>
      <td>0.60w</td>
      <td>32.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Auth service test coverage 67% to 75% (avatar/social/cert services)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Service test suite (101 tests) for email/newsletter platform</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Activity library test suite (107 tests, 11 files)</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Notification service test coverage: 6 modules from 0% to 85%</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Deprecation notices for 3 legacy repos + tracker cleanup</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Ecosystem inventory regeneration across 37 repos (LOC/test/commit data)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Full deployment readiness audit: 37 repos, fix 19 repos, push all</td>
      <td>40h</td>
      <td>108m</td>
      <td>1.0w</td>
      <td>22.2x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Fix issue tracker 36 test failures (integration conftest, event loop, rate limiter)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Auth service fix: 4 failing tests, coverage 51% to 77%</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Update stale numbers across planning repo (15 files)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Email rendering service integration (sidecar + backend + frontend)</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Transactional emails + form subscribe + welcome automation + model fixes</td>
      <td>10h</td>
      <td>30m</td>
      <td>0.25w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Revise business and marketing content for expanded portfolio maturity (7 docs)</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Ecosystem inventory generation across 37 repos with fresh data</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Fix domain spec counts and lab counts across 4 files + create 3 missing READMEs</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Migrate 3 services from deprecated JWT library to replacement</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Fix auth service port inconsistency across 2 clients + rotate signing key</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Fix port misconfigurations across 4 client repos + create port reference doc</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Deploy email service to prod (container registry + Docker + load balancer + CDN + DNS + DB)</td>
      <td>6h</td>
      <td>35m</td>
      <td>0.15w</td>
      <td>10.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>UI library type declaration fix (re-enable build plugin for .d.ts output)</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>0.013w</td>
      <td>10.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Fix 85 TypeScript errors in desktop client by correcting tsconfig</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>0.013w</td>
      <td>10.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Full deployment readiness audit: 37 repos, 44 issues found, 30+ fixed, 4700+ lines of tests</td>
      <td>8h</td>
      <td>178m</td>
      <td>0.20w</td>
      <td>2.7x</td>
      <td>96.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>32</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>309.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>766</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>7.7</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>3,751,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>24.2x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>168.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The project management tool build (96x) topped the chart. A complete project hierarchy with Trello import, database migrations, API routes, frontend components, and documentation in a single 25-minute session. That pattern of well-scoped greenfield work consistently produces the highest factors.</p>
<p class="mb-4 font-light font-serif">The desktop client feature integration (80x) and OIDC auth client test suite (60x) rounded out the top three. Both share a common trait: clear interfaces and well-defined scope. When the boundaries are crisp, the AI moves fast.</p>
<p class="mb-4 font-light font-serif">The three deployment readiness audits tell the real story of the day. Scanning 37 repositories repeatedly, identifying issues, fixing them, and pushing changes is exactly the kind of cross-repository grunt work that resists parallelization for a human engineer. A human would spend half the time just switching contexts between repos and remembering where each one left off. The longest audit (178 minutes, 2.7x) was the most thorough: 44 issues found, 30+ fixed, 4700+ lines of tests added. That low leverage factor reflects genuine complexity, not inefficiency.</p>
<p class="mb-4 font-light font-serif">Test suite generation dominated the middle of the range. Six separate test suites totaling over 600 tests were added across UI components, console simulators, activity libraries, notification services, auth clients, and payment webhooks. Each suite was generated in a single session with full coverage of edge cases. This is the kind of work that is profoundly tedious for humans and where AI leverage is most consistent.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 168.8x means that for every minute I spent writing prompts, I got back nearly three hours of engineering output. That ratio held despite this being a maintenance-heavy day rather than a greenfield day.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 25, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-25-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-25-leverage-record.html</id>
    <updated>2026-03-25T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-nine tasks. A different texture from the previous two days. Instead of patent sprints, March 25 was a hardening and shipping day: security audits across five services, a full deployment readiness audit covering 27 repositories, a complete newsletter service built from scratch, and an autonomous learning orchestrator that spanned the engine layer and all three client platforms.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor was 61x. Lower than the patent-heavy days (88x on March 24, 75x on March 23) because security auditing and infrastructure hardening produce lower but essential leverage. The supervisory leverage factor held at 245x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Full deployment readiness audit: 27 repos, 42 issues found, 31 fixed and pushed</td>
      <td>80h</td>
      <td>29m</td>
      <td>2.0w</td>
      <td>165.5x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Newsletter service: full implementation (backend+frontend+MCP+Lambda) 103 files 14349 LOC</td>
      <td>120h</td>
      <td>55m</td>
      <td>3.0w</td>
      <td>130.9x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Rewrite platform training simulator with 5-layer probabilistic architecture (8 files)</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Autonomous Learning Orchestrator - engine + 3 clients + design doc</td>
      <td>80h</td>
      <td>50m</td>
      <td>2.0w</td>
      <td>96.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Build Autopilot UI across all 3 platform clients (web/electron/iOS) - full screen with setup wiza...</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>notification service security hardening (14 fixes: JWT auth/rate limiting/PII masking/Dockerfile/...</td>
      <td>12h</td>
      <td>8m</td>
      <td>0.30w</td>
      <td>90.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Newsletter service React frontend - complete admin UI with 31 source files</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Security audit of platform-engine (deserialization/secrets/filesystem/network/crypto/deps/memory)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Add SEO essentials (OG tags, Twitter cards, canonical URLs, JSON-LD, robots.txt, sitemap.xml) to ...</td>
      <td>6h</td>
      <td>5m</td>
      <td>0.15w</td>
      <td>72.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Autonomous Learning Orchestrator engine layer (orchestrator.py + 8 REST endpoints + Pydantic mode...</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>notification service services layer (7 service classes + <strong>init</strong>)</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Build accounting app Phase 1 - monorepo scaffold, 46-table Drizzle schema, auth system, 22 UI com...</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Build accounting app Phases 2-5: Plaid banking integration, double-entry accounting, financial re...</td>
      <td>80h</td>
      <td>90m</td>
      <td>2.0w</td>
      <td>53.3x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Write Autonomous Learning Orchestrator design doc - flagship feature spec with architecture/algor...</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>services security audit + hardening (auth+notification+purchase - 37 fixes)</td>
      <td>24h</td>
      <td>28m</td>
      <td>0.60w</td>
      <td>51.4x</td>
      <td>28.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>purchase service security hardening and deployment readiness (13 fixes)</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Create PLAN.md and TESTING.md for accounting app accounting app - 42 implementation steps and 300...</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Newsletter service: third-party provider replacement requirements + technical design + repo setup</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Build notification service backend core/models/schemas (22 files)</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Create READMEs and docs for onboarding service, document parser, platform-origin (7 files)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>auth service security hardening and deployment readiness (10 fixes)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Audit deferred items: engine coverage 69-&gt;79% (706 tests), service venv rebuilds, website SEO (5 ...</td>
      <td>40h</td>
      <td>90m</td>
      <td>1.0w</td>
      <td>26.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Fix P0+P1 gaps across 3 platform clients (session endpoints/terminology/events/telemetry)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Implement 4 upstream synthesis pipeline fixes for node quality (prompt specificity / diversity en...</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Service tagging + enhanced status + resource discovery + docs/README for platform-infrastructure</td>
      <td>8h</td>
      <td>20m</td>
      <td>0.20w</td>
      <td>24.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Update auth service README with security hardening documentation</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>SSM Session Manager for platform-infrastructure prod access</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Update CLAUDE.md and README.md across 3 platform client repos (web/electron/iOS)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Security audit of platform engine REST API and auth layer - 22 findings across 6 files</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>29</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>707.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>696</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>17.7</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,486,005</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>61.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>244.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The deployment readiness audit (165.5x) topped the chart. Scanning 27 repositories, identifying 42 issues, and fixing 31 of them in a single session is the kind of broad sweep that would take a human engineer an entire week of context-switching between codebases. The AI handles the context-switching without degradation.</p>
<p class="mb-4 font-light font-serif">The newsletter service build (130.9x) was a ground-up implementation: backend, frontend, MCP integration, Lambda functions. 103 files and 14,349 lines of code. This is the pattern that consistently produces triple-digit leverage: a well-defined scope with clear boundaries, implemented start to finish in a single session.</p>
<p class="mb-4 font-light font-serif">Security work filled the middle of the range (20-90x). Five separate security audits and hardening passes across auth, notification, purchase, and engine services. The variance reflects the nature of the work: a service with clear patterns and standard fixes (notification service, 90x) hardens faster than a complex API layer with subtle authorization edge cases (engine REST API, 19x).</p>
<p class="mb-4 font-light font-serif">The accounting app tasks (53x) represent a new project bootstrapping pattern: schema design, auth system, UI components, and a comprehensive test plan all generated in two sessions. Early-project leverage tends to be high because the AI can scaffold rapidly without navigating existing constraints.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 24, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-24-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-24-leverage-record.html</id>
    <updated>2026-03-24T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-nine tasks. The theme of the day was patent implementation at industrial scale: nine new patent applications implemented as working code (180 claims, 10,789 lines), followed by porting those features to Electron desktop and iOS native. Two full platform deployments (issue tracker and analytics platform), a static marketing website, and a patent portfolio resequencing across 25 applications rounded out the session.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor hit 88.8x. The supervisory leverage factor reached 432x, meaning each minute of prompt writing produced over seven hours of human-equivalent output. The top task (implementing nine patent applications as working code) clocked a 274x factor.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Implement 9 new patent applications (D F G L O R T U V) — 180 claims across 10789 LOC in 18 new f...</td>
      <td>160h</td>
      <td>35m</td>
      <td>4.0w</td>
      <td>274.3x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Port 10 patent features web→electron (full IPC pipeline + 29 files)</td>
      <td>120h</td>
      <td>35m</td>
      <td>3.0w</td>
      <td>205.7x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Sync 10 patent features to electron (29 files 7031 LOC full IPC pipeline) and iOS (8 views 15 end...</td>
      <td>160h</td>
      <td>60m</td>
      <td>4.0w</td>
      <td>160.0x</td>
      <td>1920.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Draft patent applications S and T (Content Staleness + Assessment Composition)</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Implement 3 patent applications (R/T/V) with 60 claims as working code</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Implement 3 platform patent applications (F G O) - bootstrap+versioning+readiness</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Draft readiness application patent - Readiness Prediction and Exam Pass Probability Engine</td>
      <td>40h</td>
      <td>20m</td>
      <td>1.0w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Update prior art docs for 25 apps and regenerate 362 PDFs</td>
      <td>50h</td>
      <td>25m</td>
      <td>1.2w</td>
      <td>120.0x</td>
      <td>1000.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Implement adversarial application adversarial detection subsystem (20 claims) in platform-engine ...</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Build platform static website with 7 pages particle hero scroll animations</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Resequence patent portfolio A-Y (25 apps) across 6 repos</td>
      <td>64h</td>
      <td>35m</td>
      <td>1.6w</td>
      <td>109.7x</td>
      <td>768.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Build all 10 Tier 1+2 patent client features (init+scenario+analytics+governance+curriculum+traje...</td>
      <td>80h</td>
      <td>45m</td>
      <td>2.0w</td>
      <td>106.7x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Draft patent applications U (Explainability) and V (Cohort Intelligence) with 20 claims and 8 fig...</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Sync 10 patent features from web to iOS as SwiftUI views</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Build Tier 2 features #6-8: Trajectory/Evidence/CrossDomain UI in platform-app-web</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Build Tier 1 client features: Entity Initialization + Scenario Assessment + Analytics Panel for p...</td>
      <td>24h</td>
      <td>18m</td>
      <td>0.60w</td>
      <td>80.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Build Governance Dashboard (adversarial app) + Enhanced Curriculum (curriculum app) screens with ...</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Create Explainability subsystem (explainability application) - 3 files 1572 LOC all 20 patent claims</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Write unit tests for 3 platform subsystems (Assessment Composer + Interview Engine + Cohort Intel...</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Flesh out 3 thin API modules with 16 patent-aligned public methods</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Fix 24 failing + 2 skipped unit tests across 6 test files in platform-engine</td>
      <td>8h</td>
      <td>10m</td>
      <td>0.20w</td>
      <td>48.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Update architecture docs and unit tests for contrastive pair quality improvements</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Implement 3 contrastive pair quality prevention strategies (graph-driven + domain-aware targets +...</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Write unit tests for 3 platform subsystems (bootstrap/versioning/readiness_prediction) - 123 tests</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Deploy issue tracker to production (ECR+CloudWatch+S3+ALB+CloudFront+Route53+RDS+Docker+frontend+...</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Add bug report proxy endpoint to engine and 7 client apps</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Deploy analytics platform to production on AWS (ECR + CloudFront + ALB + RDS + S3 + Route53 + Doc...</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Build Tier 2 features #9-10: context-aware chat (context app) + cognitive state detection (App G)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Prior art hardening analysis for 15 CIP patent applications (A-P excluding G)</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Implement 4 QC fixes in platform synthesis pipeline (quality gate + readiness convergence + pair ...</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Implement hybrid model routing for contrastive pair amplification (abstract/concrete domain flag ...</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Implement staleness application staleness detection subsystem (20 claims)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Unit tests for 3 platform subsystems: staleness + adversarial + explainability (112 tests)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Research FreshBooks and QuickBooks and write comprehensive accounting app prompt</td>
      <td>8h</td>
      <td>20m</td>
      <td>0.20w</td>
      <td>24.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Write targeted unit tests for 3 packages (observation/governance/reembed) to push above 70% coverage</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Deploy analytics platform + CodePipeline for both tools + EC2 private subnet migration (NAT gatew...</td>
      <td>20h</td>
      <td>55m</td>
      <td>0.50w</td>
      <td>21.8x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>ML model bug report for partner with full data analysis</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Create ecosystem inventory document for platform docs - 37 repos catalogued</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Security quick wins: timing attack + JWT audience + Docker non-root for analytics platform</td>
      <td>0.5h</td>
      <td>2m</td>
      <td>0.013w</td>
      <td>15.0x</td>
      <td>15.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>39</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1,167.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>789</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>29.2</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>4,546,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>88.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>432.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">Patent work dominated again, but the character shifted from drafting and prior art hardening (which dominated March 23) to implementation and cross-platform deployment. The nine-application implementation sprint (274x leverage, 160 human-equivalent hours in 35 minutes) was the single most productive task in the series to date by absolute output volume.</p>
<p class="mb-4 font-light font-serif">The cross-platform porting tasks (web to Electron, web to iOS) consistently produced leverage above 100x. The pattern extraction from one platform and replication to another is exactly the kind of structured transformation that scales well with AI assistance. Manual porting of 29 files across an IPC pipeline would take a senior engineer a full sprint. It took 35 minutes.</p>
<p class="mb-4 font-light font-serif">Production deployments (issue tracker and analytics platform) ran in the 30-40x range. Infrastructure work has lower leverage than pure code generation because it involves external dependencies, network calls, and sequential cloud provisioning that can not be parallelized away.</p>
<p class="mb-4 font-light font-serif">The security hardening task at the bottom (15x) reinforces a pattern: tasks requiring careful analysis of existing code with subtle correctness requirements produce lower but still meaningful leverage. Security work is inherently harder to automate safely.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Terraform + CloudFormation StackSets: Deploying IAM Roles Across Every Account in Your Organization]]></title>
    <link href="https://charlessieg.com/articles/terraform-cloudformation-stackset-iam-role-organization.html" />
    <id>https://charlessieg.com/articles/terraform-cloudformation-stackset-iam-role-organization.html</id>
    <updated>2026-03-24T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/terraform-cloudformation-stackset-iam-role-organization-hero.jpeg" alt="Terraform + CloudFormation StackSets: Deploying IAM Roles Across Every Account in Your Organization" /></p><p class="mb-4 font-light font-serif">Every multi-account AWS organization needs a baseline IAM role in every member account. Cross-account access for security tooling, centralized billing queries, incident response, compliance scanning: the use cases pile up fast. I have deployed this pattern across six enterprise organizations, each with 50 to 400 member accounts. The approach that survives at scale is Terraform managing a CloudFormation StackSet from the management account, with service-managed permissions and auto-deployment enabled. New accounts get the role automatically. No tickets. No manual steps. No drift.</p>
<p class="mb-4 font-light font-serif">This is the reference for engineers who need to ship this pattern in production. Not a getting-started walkthrough. I assume you already run Terraform against your management account and understand IAM role trust policies. What follows is the architecture, the full Terraform configuration, the CloudFormation template, the operational gotchas, and the failure modes that will bite you if you skip them.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#why-stacksets-for-cross-account-iam" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Why StackSets for Cross-Account IAM</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#permission-models-self-managed-vs-service-managed" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Permission Models: Self-Managed vs. Service-Managed</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-terraform-configuration" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Terraform Configuration</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-cloudformation-template" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The CloudFormation Template</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#delegated-administration" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Delegated Administration</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#operational-considerations" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Operational Considerations</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#limits-and-quotas" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Limits and Quotas</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#common-failure-modes" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Common Failure Modes</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#putting-it-all-together" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Putting It All Together</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#key-patterns" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Key Patterns</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#additional-resources" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Additional Resources</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<h2 id="why-stacksets-for-cross-account-iam">Why StackSets for Cross-Account IAM</h2>
<h3 id="the-problem">The Problem</h3>
<p class="mb-4 font-light font-serif">You have an AWS Organization with dozens or hundreds of member accounts. You need an IAM role in every single one. The role trusts the management account (or a dedicated security account) so that a central automation can assume it. Common scenarios:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li>Security Hub aggregation: a central Lambda assumes a role in each member account to pull findings.</li>
<li>Cost Explorer queries: a billing dashboard assumes roles across accounts for consolidated reporting.</li>
<li>Incident response: an IR automation assumes roles in compromised accounts to isolate resources.</li>
<li>Compliance scanning: AWS Config or a third-party tool needs read access in every account.</li>
</ul>
<p class="mb-4 font-light font-serif">You could create these roles manually. You could write a script that iterates over every account and calls <code>aws iam create-role</code>. You could use Terraform with multiple provider aliases. All of these approaches break the moment someone creates a new account and forgets to run the script.</p>
<h3 id="why-not-pure-terraform">Why Not Pure Terraform</h3>
<p class="mb-4 font-light font-serif">The natural instinct for a Terraform shop is to write an <code>aws_iam_role</code> resource with a <code>for_each</code> over a list of account IDs, each with its own provider alias configured via <code>assume_role</code>. This works at small scale. At 50+ accounts, it falls apart:</p>
<table>
  <thead>
    <tr>
      <th>Approach</th>
      <th>Accounts Supported</th>
      <th>Auto-Deploy New Accounts</th>
      <th>Terraform State Size</th>
      <th>Provider Configuration</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Pure Terraform with provider aliases</td>
      <td>~20 before pain</td>
      <td>No</td>
      <td>Grows linearly</td>
      <td>One provider block per account</td>
    </tr>
    <tr>
      <td>Terraform + StackSet (self-managed)</td>
      <td>1,000+</td>
      <td>No</td>
      <td>Minimal</td>
      <td>Single management account provider</td>
    </tr>
    <tr>
      <td>Terraform + StackSet (service-managed)</td>
      <td>100,000+</td>
      <td>Yes</td>
      <td>Minimal</td>
      <td>Single management account provider</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The provider alias approach requires a provider block for every account. Terraform has to initialize credentials for every provider on every plan/apply. State files balloon. Adding a new account means editing Terraform code. It does not scale.</p>
<p class="mb-4 font-light font-serif">StackSets solve this. You define the IAM role once in a CloudFormation template, wrap it in a StackSet, target the entire organization or specific OUs, and every current and future account gets the role. Terraform manages the StackSet itself. CloudFormation handles the fan-out.</p>
<h2 id="permission-models-self-managed-vs-service-managed">Permission Models: Self-Managed vs. Service-Managed</h2>
<p class="mb-4 font-light font-serif">The most important decision when creating a StackSet is the permission model. Get this wrong and you will spend hours debugging role assumption failures.</p>
<table>
  <thead>
    <tr>
      <th>Aspect</th>
      <th>Self-Managed</th>
      <th>Service-Managed</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>IAM role creation</td>
      <td>You create <code>AWSCloudFormationStackSetAdministrationRole</code> in management account and <code>AWSCloudFormationStackSetExecutionRole</code> in every target account</td>
      <td>AWS creates roles automatically via Organizations integration</td>
    </tr>
    <tr>
      <td>Target specification</td>
      <td>List of account IDs</td>
      <td>Organizational Units (OUs) or entire organization</td>
    </tr>
    <tr>
      <td>Auto-deployment to new accounts</td>
      <td>No</td>
      <td>Yes (configurable)</td>
    </tr>
    <tr>
      <td>Delegated administration</td>
      <td>No</td>
      <td>Yes</td>
    </tr>
    <tr>
      <td>Terraform <code>permission_model</code></td>
      <td><code>&quot;SELF_MANAGED&quot;</code> (default)</td>
      <td><code>&quot;SERVICE_MANAGED&quot;</code></td>
    </tr>
    <tr>
      <td>Prerequisites</td>
      <td>Manual role creation in every target account</td>
      <td>Trusted access enabled for CloudFormation in Organizations</td>
    </tr>
  </tbody>
</table>
<h3 id="when-to-use-self-managed">When to Use Self-Managed</h3>
<p class="mb-4 font-light font-serif">Self-managed permissions make sense when you deploy to a small, fixed set of accounts outside your organization, or when you need granular control over which execution role the StackSet assumes in each account. I rarely use this model in production. The overhead of pre-creating roles in every target account defeats the purpose of using StackSets in the first place.</p>
<h3 id="when-to-use-service-managed">When to Use Service-Managed</h3>
<p class="mb-4 font-light font-serif">Service-managed is the right choice for organizational deployments. AWS handles the role plumbing. You target OUs instead of individual account IDs. New accounts added to the OU get stack instances automatically. This is the model I use for every engagement.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 411.70799999999997 1120.389" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<polyline class="edge" data-from="A" data-to="B" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="208.6438333333333,93.80000000000001 208.6438333333333,141.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="B" data-to="C" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="241.495,306.05583333333334 241.495,663.861 311.849,663.861 311.849,1031.489 298.96066666666667,1031.489 298.96066666666667,1043.489" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="B" data-to="D" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="175.79266666666666,306.0558333333334 175.79266666666666,374.907 143.49900000000002,374.907 143.49900000000002,455.207" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="E" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="114.72333333333334,599.0853333333333 114.72333333333334,732.161 76.66300000000001,732.161 76.66300000000001,1031.489 89.55133333333333,1031.489 89.55133333333333,1043.489" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="F" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="172.2746666666667,599.0853333333333 172.2746666666667,663.861 210.33499999999998,663.861 210.33499999999998,744.161" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="F" data-to="C" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Account IDs" points="240.8396666666667,896.6843333333333 240.8396666666667,963.189 242.8793333333333,963.189 242.8793333333333,1031.489 257.80733333333336,1031.489 257.80733333333336,1043.489" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="F" data-to="E" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="OUs" points="179.83033333333333,896.6843333333333 179.83033333333333,963.189 165.91066666666666,963.189 165.91066666666666,1031.489 139.10266666666666,1031.489 139.10266666666666,1043.489" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<g class="edge-label" data-from="B" data-to="C" data-label="No">
  <rect x="296.349" y="670.861" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="311.70799999999997" y="686.011" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="B" data-to="D" data-label="Yes">
  <rect x="124.99900000000002" y="381.907" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="143.32800000000003" y="397.05699999999996" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="D" data-to="E" data-label="Yes">
  <rect x="58.163000000000004" y="970.189" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="76.492" y="985.3389999999999" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="D" data-to="F" data-label="No">
  <rect x="194.83499999999998" y="670.861" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="210.194" y="686.011" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="F" data-to="C" data-label="Account IDs">
  <rect x="205.3793333333333" y="970.189" width="74.08000000000001" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="242.41933333333333" y="985.3389999999999" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Account IDs</text>
</g>
<g class="edge-label" data-from="F" data-to="E" data-label="OUs">
  <rect x="146.91066666666666" y="970.189" width="37.846000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="165.83366666666666" y="985.3389999999999" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">OUs</text>
</g>
<g class="node" data-id="A" data-label="Creating a
StackSet" data-shape="rectangle">
  <rect x="157.6583333333333" y="40" width="101.971" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="208.6438333333333" y="66.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="208.6438333333333" dy="-3.9000000000000012">Creating a</tspan><tspan x="208.6438333333333" dy="16.900000000000002">StackSet</tspan></text>
</g>
<g class="node" data-id="B" data-label="Deploying within
an AWS Organization?" data-shape="diamond">
  <polygon points="208.6438333333333,141.8 307.1973333333333,240.3535 208.6438333333333,338.907 110.0903333333333,240.3535" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="208.6438333333333" y="240.3535" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="208.6438333333333" dy="-3.9000000000000012">Deploying within</tspan><tspan x="208.6438333333333" dy="16.900000000000002">an AWS Organization?</tspan></text>
</g>
<g class="node" data-id="C" data-label="Self-Managed" data-shape="rectangle">
  <rect x="216.654" y="1043.489" width="123.46" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="278.384" y="1061.939" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">Self-Managed</text>
</g>
<g class="node" data-id="D" data-label="Need auto-deploy
for new accounts?" data-shape="diamond">
  <polygon points="143.499,455.207 229.826,541.534 143.499,627.861 57.172,541.534" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="143.499" y="541.534" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="143.499" dy="-3.9000000000000012">Need auto-deploy</tspan><tspan x="143.499" dy="16.900000000000002">for new accounts?</tspan></text>
</g>
<g class="node" data-id="E" data-label="Service-Managed" data-shape="rectangle">
  <rect x="40" y="1043.489" width="148.654" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="114.327" y="1061.939" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">Service-Managed</text>
</g>
<g class="node" data-id="F" data-label="Deploying to
specific account IDs
or entire OUs?" data-shape="diamond">
  <polygon points="210.335,744.161 301.849,835.675 210.335,927.189 118.82100000000001,835.675" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="210.335" y="835.675" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="210.335" dy="-12.350000000000001">Deploying to</tspan><tspan x="210.335" dy="16.900000000000002">specific account IDs</tspan><tspan x="210.335" dy="16.900000000000002">or entire OUs?</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Permission model decision tree</figcaption>
</div>
<h3 id="enabling-trusted-access">Enabling Trusted Access</h3>
<p class="mb-4 font-light font-serif">Before you can use service-managed permissions, you need to enable trusted access for CloudFormation StackSets in AWS Organizations. This is a one-time operation from the management account:</p>
<div class="highlight"><pre><span></span>aws<span class="w"> </span>organizations<span class="w"> </span>enable-aws-service-access<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--service-principal<span class="w"> </span>member.org.stacksets.cloudformation.amazonaws.com
</pre></div>

<p class="mb-4 font-light font-serif">Or in Terraform:</p>
<div class="highlight"><pre><span></span><span class="kr">resource</span><span class="w"> </span><span class="nc">&quot;aws_organizations_organization&quot;</span><span class="w"> </span><span class="nv">&quot;this&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">aws_service_access_principals</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span>
<span class="w">    </span><span class="s2">&quot;member.org.stacksets.cloudformation.amazonaws.com&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="p">]</span>
<span class="w">  </span><span class="na">feature_set</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;ALL&quot;</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">Skip this step and every StackSet creation will fail with a cryptic error about insufficient permissions. I have watched three different teams burn hours on this.</p>
<h2 id="the-architecture">The Architecture</h2>
<p class="mb-4 font-light font-serif">Here is how the pieces fit together. Terraform runs in the management account, creates a StackSet with a CloudFormation template that defines an IAM role, and targets the root OU (or specific OUs). CloudFormation deploys a stack instance to every member account in those OUs. Each stack instance creates the IAM role locally in that member account.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 737.868 473.7" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<polyline class="edge" data-from="TF" data-to="SS" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="197.83750000000003,107.5 197.8375000000001,169.2" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="ORG" data-to="SI1" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="368.9340000000001,247 368.9340000000001,265 111.73350000000008,265 111.73350000000008,283" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="ORG" data-to="SI2" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="368.9340000000001,247 368.9340000000001,265 283.20050000000003,265 283.20050000000003,283" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="ORG" data-to="SI3" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="368.9340000000001,247 368.9340000000001,265 454.6675,265 454.6675,283" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="ORG" data-to="SI4" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="368.9340000000001,247 368.9340000000001,265 626.1345,265 626.1345,283" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="SI1" data-to="R1" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="111.73350000000005,336.8 111.73350000000005,384.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="SI2" data-to="R2" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="283.20050000000003,336.8 283.20050000000003,384.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="SI3" data-to="R3" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="454.6675000000001,336.8 454.6675000000001,384.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="SI4" data-to="R4" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="626.1345000000001,336.8 626.1345000000001,384.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="NEW" data-to="ORG" data-style="dotted" data-arrow-start="false" data-arrow-end="true" data-label="Auto-deploy" points="368.9340000000001,107.5 368.9340000000001,210.1" fill="none" stroke="var(--_line)" stroke-width="1" stroke-dasharray="4 4" marker-end="url(#arrowhead)" />
<g class="edge-label" data-from="NEW" data-to="ORG" data-label="Auto-deploy">
  <rect x="331.4340000000001" y="136.8" width="74.08000000000001" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="368.4740000000001" y="151.95000000000002" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Auto-deploy</text>
</g>
<g class="node" data-id="TF" data-label="Terraform
Management Account" data-shape="rectangle">
  <rect x="113.87750000000005" y="53.699999999999996" width="167.92" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="197.83750000000003" y="80.6" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="197.83750000000003" dy="-3.9000000000000012">Terraform</tspan><tspan x="197.83750000000003" dy="16.900000000000002">Management Account</tspan></text>
</g>
<g class="node" data-id="SS" data-label="CloudFormation
StackSet" data-shape="rectangle">
  <rect x="130.17950000000008" y="169.2" width="135.31599999999997" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="197.83750000000006" y="196.1" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="197.83750000000006" dy="-3.9000000000000012">CloudFormation</tspan><tspan x="197.83750000000006" dy="16.900000000000002">StackSet</tspan></text>
</g>
<g class="node" data-id="ORG" data-label="ORG" data-shape="rectangle">
  <rect x="334.6210000000001" y="210.1" width="68.62599999999999" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="368.9340000000001" y="228.55" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">ORG</text>
</g>
<g class="node" data-id="SI1" data-label="Stack Instance
Account A" data-shape="rectangle">
  <rect x="47.41000000000008" y="283" width="128.647" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="111.73350000000008" y="309.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="111.73350000000008" dy="-3.9000000000000012">Stack Instance</tspan><tspan x="111.73350000000008" dy="16.900000000000002">Account A</tspan></text>
</g>
<g class="node" data-id="SI2" data-label="Stack Instance
Account B" data-shape="rectangle">
  <rect x="218.87700000000007" y="283" width="128.647" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="283.20050000000003" y="309.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="283.20050000000003" dy="-3.9000000000000012">Stack Instance</tspan><tspan x="283.20050000000003" dy="16.900000000000002">Account B</tspan></text>
</g>
<g class="node" data-id="SI3" data-label="Stack Instance
Account C" data-shape="rectangle">
  <rect x="390.34400000000005" y="283" width="128.647" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="454.6675" y="309.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="454.6675" dy="-3.9000000000000012">Stack Instance</tspan><tspan x="454.6675" dy="16.900000000000002">Account C</tspan></text>
</g>
<g class="node" data-id="SI4" data-label="Stack Instance
Account N..." data-shape="rectangle">
  <rect x="561.811" y="283" width="128.647" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="626.1345" y="309.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="626.1345" dy="-3.9000000000000012">Stack Instance</tspan><tspan x="626.1345" dy="16.900000000000002">Account N...</tspan></text>
</g>
<g class="node" data-id="R1" data-label="IAM Role Created" data-shape="rectangle">
  <rect x="40.00000000000006" y="384.8" width="143.467" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="111.73350000000006" y="403.25" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">IAM Role Created</text>
</g>
<g class="node" data-id="R2" data-label="IAM Role Created" data-shape="rectangle">
  <rect x="211.46700000000004" y="384.8" width="143.467" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="283.20050000000003" y="403.25" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">IAM Role Created</text>
</g>
<g class="node" data-id="R3" data-label="IAM Role Created" data-shape="rectangle">
  <rect x="382.9340000000001" y="384.8" width="143.467" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="454.6675000000001" y="403.25" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">IAM Role Created</text>
</g>
<g class="node" data-id="R4" data-label="IAM Role Created" data-shape="rectangle">
  <rect x="554.4010000000001" y="384.8" width="143.467" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="626.1345000000001" y="403.25" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">IAM Role Created</text>
</g>
<g class="node" data-id="NEW" data-label="New Account
Added to OU" data-shape="rectangle">
  <rect x="309.79750000000007" y="53.699999999999996" width="118.273" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="368.9340000000001" y="80.6" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="368.9340000000001" dy="-3.9000000000000012">New Account</tspan><tspan x="368.9340000000001" dy="16.900000000000002">Added to OU</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">StackSet deployment architecture</figcaption>
</div>
<h3 id="the-management-account">The Management Account</h3>
<p class="mb-4 font-light font-serif">Terraform runs here. It creates the <code>aws_cloudformation_stack_set</code> resource and the <code>aws_cloudformation_stack_instances</code> resource. The management account holds the StackSet definition and orchestrates deployments. It does not receive a stack instance itself; StackSets with service-managed permissions skip the management account.</p>
  <div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
    <div>StackSets with service-managed permissions never deploy to the management account, even if the management account is in the targeted OU. If you need the IAM role in the management account too, create it separately with a standard Terraform <code>aws_iam_role</code> resource.</div>
  </div>
<h3 id="auto-deployment">Auto-Deployment</h3>
<p class="mb-4 font-light font-serif">With <code>auto_deployment</code> enabled, any new account added to a targeted OU automatically receives a stack instance. The IAM role appears in the new account within minutes. No Terraform run required. No human intervention. This is the behavior that makes StackSets worth the complexity over pure Terraform.</p>
<p class="mb-4 font-light font-serif">You also configure what happens when an account leaves the OU. Setting <code>retain_stacks_on_account_removal = true</code> keeps the IAM role in the account even after removal. I recommend this for security roles: you do not want to lose your incident response access just because someone moved an account to a different OU.</p>
<h2 id="the-terraform-configuration">The Terraform Configuration</h2>
<p class="mb-4 font-light font-serif">Here is the complete Terraform configuration. I will walk through each resource.</p>
<h3 id="the-stackset-resource">The StackSet Resource</h3>
<div class="highlight"><pre><span></span><span class="kr">resource</span><span class="w"> </span><span class="nc">&quot;aws_cloudformation_stack_set&quot;</span><span class="w"> </span><span class="nv">&quot;cross_account_role&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">name</span><span class="w">             </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;cross-account-security-role&quot;</span>
<span class="w">  </span><span class="na">description</span><span class="w">      </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;Deploys a cross-account IAM role to all member accounts&quot;</span>
<span class="w">  </span><span class="na">permission_model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;SERVICE_MANAGED&quot;</span>

<span class="w">  </span><span class="nb">auto_deployment</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">enabled</span><span class="w">                          </span><span class="o">=</span><span class="w"> </span><span class="no">true</span>
<span class="w">    </span><span class="na">retain_stacks_on_account_removal</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="no">true</span>
<span class="w">  </span><span class="p">}</span>

<span class="w">  </span><span class="nb">operation_preferences</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">failure_tolerance_percentage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">10</span>
<span class="w">    </span><span class="na">max_concurrent_percentage</span><span class="w">    </span><span class="o">=</span><span class="w"> </span><span class="m">25</span>
<span class="w">    </span><span class="na">region_concurrency_type</span><span class="w">      </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;PARALLEL&quot;</span>
<span class="w">  </span><span class="p">}</span>

<span class="w">  </span><span class="na">capabilities</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;CAPABILITY_NAMED_IAM&quot;</span><span class="p">]</span>

<span class="w">  </span><span class="na">template_body</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">file</span><span class="p">(</span><span class="s2">&quot;${path.module}/templates/cross-account-role.yaml&quot;</span><span class="p">)</span>

<span class="w">  </span><span class="nb">parameters</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">TrustedAccountId</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">data.aws_caller_identity.current.account_id</span>
<span class="w">    </span><span class="na">RoleName</span><span class="w">         </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;OrganizationSecurityAuditRole&quot;</span>
<span class="w">    </span><span class="na">ExternalId</span><span class="w">       </span><span class="o">=</span><span class="w"> </span><span class="nv">var.external_id</span>
<span class="w">  </span><span class="p">}</span>

<span class="w">  </span><span class="nb">lifecycle</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">ignore_changes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nb">administration_role_arn</span><span class="p">]</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">Key decisions in this configuration:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li><strong><code>permission_model = &quot;SERVICE_MANAGED&quot;</code></strong> enables Organizations integration. AWS handles all the cross-account role plumbing.</li>
<li><strong><code>auto_deployment.enabled = true</code></strong> ensures new accounts get the role automatically.</li>
<li><strong><code>retain_stacks_on_account_removal = true</code></strong> keeps the role when accounts move between OUs.</li>
<li><strong><code>capabilities = [&quot;CAPABILITY_NAMED_IAM&quot;]</code></strong> is required because the CloudFormation template creates a named IAM role. Omit this and the deployment fails silently in every account.</li>
<li><strong><code>lifecycle.ignore_changes</code></strong> on <code>administration_role_arn</code> prevents a Terraform update loop. When using service-managed permissions, AWS sets this field automatically, and Terraform tries to clear it on every apply.</li>
</ul>
<h3 id="the-stack-instances">The Stack Instances</h3>
<div class="highlight"><pre><span></span><span class="kr">resource</span><span class="w"> </span><span class="nc">&quot;aws_cloudformation_stack_instances&quot;</span><span class="w"> </span><span class="nv">&quot;all_accounts&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">stack_set_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">aws_cloudformation_stack_set.cross_account_role.name</span>

<span class="w">  </span><span class="nb">deployment_targets</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">organizational_unit_ids</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nv">data.aws_organizations_organization.current.roots[0].id</span><span class="p">]</span>
<span class="w">  </span><span class="p">}</span>

<span class="w">  </span><span class="na">regions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">var.target_regions</span>

<span class="w">  </span><span class="nb">operation_preferences</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="na">failure_tolerance_percentage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">10</span>
<span class="w">    </span><span class="na">max_concurrent_percentage</span><span class="w">    </span><span class="o">=</span><span class="w"> </span><span class="m">25</span>
<span class="w">    </span><span class="na">region_concurrency_type</span><span class="w">      </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;PARALLEL&quot;</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">I target the organization root to cover every account. If you only need the role in specific OUs (production accounts, security accounts), replace the root ID with those OU IDs.</p>
<p class="mb-4 font-light font-serif">The <code>regions</code> parameter specifies which regions get stack instances. IAM is global, so you only need one region. I use <code>[&quot;us-east-1&quot;]</code> for IAM-only StackSets. If your template includes regional resources (CloudWatch alarms, Config rules), specify every region you operate in.</p>
<h3 id="operation-preferences">Operation Preferences</h3>
<p class="mb-4 font-light font-serif">Operation preferences control how fast the StackSet deploys and how many failures it tolerates before stopping.</p>
<table>
  <thead>
    <tr>
      <th>Parameter</th>
      <th>Description</th>
      <th>Recommended Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>failure_tolerance_percentage</code></td>
      <td>Percentage of accounts that can fail before the operation stops</td>
      <td>10% for initial deploy, 0% for updates</td>
    </tr>
    <tr>
      <td><code>max_concurrent_percentage</code></td>
      <td>Percentage of accounts deployed to simultaneously</td>
      <td>25% for large orgs, 100% for small orgs</td>
    </tr>
    <tr>
      <td><code>region_concurrency_type</code></td>
      <td>Deploy regions in parallel or sequentially</td>
      <td><code>PARALLEL</code> for IAM (global resource), <code>SEQUENTIAL</code> for regional resources</td>
    </tr>
    <tr>
      <td><code>region_order</code></td>
      <td>Order of region deployment</td>
      <td>Only needed with <code>SEQUENTIAL</code></td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">For an IAM-only deployment, I run parallel with 25% concurrency and 10% failure tolerance. This deploys to a quarter of your accounts simultaneously and stops if more than 10% fail. Aggressive enough to finish in minutes for a 200-account org; conservative enough to catch systemic problems before they hit every account.</p>
<h2 id="the-cloudformation-template">The CloudFormation Template</h2>
<p class="mb-4 font-light font-serif">This is the template that CloudFormation deploys to every member account. It creates a single IAM role with a trust policy that allows the management account (or any account you specify) to assume it.</p>
<div class="highlight"><pre><span></span><span class="nt">AWSTemplateFormatVersion</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;2010-09-09&quot;</span>
<span class="nt">Description</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;</span>
<span class="w">  </span><span class="no">Cross-account IAM role deployed via StackSet.</span>
<span class="w">  </span><span class="no">Grants read-only security audit access to a trusted account.</span>

<span class="nt">Parameters</span><span class="p">:</span>
<span class="w">  </span><span class="nt">TrustedAccountId</span><span class="p">:</span>
<span class="w">    </span><span class="nt">Type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">String</span>
<span class="w">    </span><span class="nt">Description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">AWS account ID allowed to assume this role</span>
<span class="w">  </span><span class="nt">RoleName</span><span class="p">:</span>
<span class="w">    </span><span class="nt">Type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">String</span>
<span class="w">    </span><span class="nt">Default</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">OrganizationSecurityAuditRole</span>
<span class="w">    </span><span class="nt">Description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Name of the IAM role to create</span>
<span class="w">  </span><span class="nt">ExternalId</span><span class="p">:</span>
<span class="w">    </span><span class="nt">Type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">String</span>
<span class="w">    </span><span class="nt">Description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">External ID for additional assume-role security</span>

<span class="nt">Resources</span><span class="p">:</span>
<span class="w">  </span><span class="nt">CrossAccountRole</span><span class="p">:</span>
<span class="w">    </span><span class="nt">Type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">AWS::IAM::Role</span>
<span class="w">    </span><span class="nt">Properties</span><span class="p">:</span>
<span class="w">      </span><span class="nt">RoleName</span><span class="p">:</span><span class="w"> </span><span class="kt">!Ref</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">RoleName</span>
<span class="w">      </span><span class="nt">MaxSessionDuration</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">3600</span>
<span class="w">      </span><span class="nt">AssumeRolePolicyDocument</span><span class="p">:</span>
<span class="w">        </span><span class="nt">Version</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;2012-10-17&quot;</span>
<span class="w">        </span><span class="nt">Statement</span><span class="p">:</span>
<span class="w">          </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">Effect</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Allow</span>
<span class="w">            </span><span class="nt">Principal</span><span class="p">:</span>
<span class="w">              </span><span class="nt">AWS</span><span class="p">:</span><span class="w"> </span><span class="kt">!Sub</span><span class="w"> </span><span class="s">&quot;arn:aws:iam::${TrustedAccountId}:root&quot;</span>
<span class="w">            </span><span class="nt">Action</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;sts:AssumeRole&quot;</span>
<span class="w">            </span><span class="nt">Condition</span><span class="p">:</span>
<span class="w">              </span><span class="nt">StringEquals</span><span class="p">:</span>
<span class="w">                </span><span class="s">&quot;sts:ExternalId&quot;</span><span class="p p-Indicator">:</span><span class="w"> </span><span class="kt">!Ref</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ExternalId</span>
<span class="w">      </span><span class="nt">ManagedPolicyArns</span><span class="p">:</span>
<span class="w">        </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;arn:aws:iam::aws:policy/SecurityAudit&quot;</span>
<span class="w">        </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;arn:aws:iam::aws:policy/ReadOnlyAccess&quot;</span>
<span class="w">      </span><span class="nt">Tags</span><span class="p">:</span>
<span class="w">        </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">Key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ManagedBy</span>
<span class="w">          </span><span class="nt">Value</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">StackSet</span>
<span class="w">        </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">Key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Purpose</span>
<span class="w">          </span><span class="nt">Value</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CrossAccountSecurityAudit</span>

<span class="nt">Outputs</span><span class="p">:</span>
<span class="w">  </span><span class="nt">RoleArn</span><span class="p">:</span>
<span class="w">    </span><span class="nt">Description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ARN of the created cross-account role</span>
<span class="w">    </span><span class="nt">Value</span><span class="p">:</span><span class="w"> </span><span class="kt">!GetAtt</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CrossAccountRole.Arn</span>
</pre></div>

<h3 id="trust-policy-design">Trust Policy Design</h3>
<p class="mb-4 font-light font-serif">The trust policy is the most security-sensitive part of this configuration. Three elements matter:</p>
<table>
  <thead>
    <tr>
      <th>Element</th>
      <th>Purpose</th>
      <th>Recommendation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>Principal</code></td>
      <td>Who can assume this role</td>
      <td>Specify the exact account ID, never use <code>*</code></td>
    </tr>
    <tr>
      <td><code>Condition: sts:ExternalId</code></td>
      <td>Prevents confused deputy attacks</td>
      <td>Always include for cross-account roles</td>
    </tr>
    <tr>
      <td><code>MaxSessionDuration</code></td>
      <td>How long assumed sessions last</td>
      <td>3600 seconds (1 hour) for automated tooling</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The <code>sts:ExternalId</code> condition is optional but strongly recommended. Without it, any principal in the trusted account that has <code>sts:AssumeRole</code> permissions can assume your role. With it, the caller must know the external ID. This prevents confused deputy scenarios where a compromised service in the trusted account pivots into your member accounts.</p>
<h3 id="choosing-managed-policies">Choosing Managed Policies</h3>
<p class="mb-4 font-light font-serif">For a security audit role, <code>SecurityAudit</code> and <code>ReadOnlyAccess</code> cover most use cases. <code>SecurityAudit</code> grants the permissions that AWS Security Hub, GuardDuty, and Config need. <code>ReadOnlyAccess</code> adds read permissions for services that <code>SecurityAudit</code> misses.</p>
<p class="mb-4 font-light font-serif">If you need write access (incident response, automated remediation), create a custom policy with precisely scoped permissions. Never attach <code>AdministratorAccess</code> to a StackSet-deployed role. One compromised credential in the trusted account gives an attacker admin access to every member account in the organization.</p>
<h2 id="delegated-administration">Delegated Administration</h2>
<p class="mb-4 font-light font-serif">Running Terraform against the management account is a security concern. The management account has god-mode permissions over the entire organization. Limiting direct access to it is an IAM best practice. StackSets support delegated administration: you register a member account (typically a dedicated security or infrastructure account) as a delegated administrator for CloudFormation StackSets.</p>
<div class="highlight"><pre><span></span><span class="kr">resource</span><span class="w"> </span><span class="nc">&quot;aws_organizations_delegated_administrator&quot;</span><span class="w"> </span><span class="nv">&quot;stacksets&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">account_id</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="nv">var.delegated_admin_account_id</span>
<span class="w">  </span><span class="na">service_principal</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;member.org.stacksets.cloudformation.amazonaws.com&quot;</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">Once registered, you run Terraform from the delegated admin account with <code>call_as = &quot;DELEGATED_ADMIN&quot;</code>:</p>
<div class="highlight"><pre><span></span><span class="kr">resource</span><span class="w"> </span><span class="nc">&quot;aws_cloudformation_stack_set&quot;</span><span class="w"> </span><span class="nv">&quot;cross_account_role&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">name</span><span class="w">             </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;cross-account-security-role&quot;</span>
<span class="w">  </span><span class="na">permission_model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;SERVICE_MANAGED&quot;</span>
<span class="w">  </span><span class="na">call_as</span><span class="w">          </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;DELEGATED_ADMIN&quot;</span>

<span class="c1">  # ... rest of configuration</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">This moves StackSet management out of the management account entirely. I recommend this for every organization with more than 10 accounts. The management account should be a locked vault, not a daily driver.</p>
<h2 id="operational-considerations">Operational Considerations</h2>
<h3 id="drift-detection">Drift Detection</h3>
<p class="mb-4 font-light font-serif">StackSets support drift detection across all stack instances. If someone manually modifies the IAM role in a member account (adds a policy, changes the trust policy), drift detection catches it.</p>
<div class="highlight"><pre><span></span>aws<span class="w"> </span>cloudformation<span class="w"> </span>detect-stack-set-drift<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--stack-set-name<span class="w"> </span>cross-account-security-role<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>--call-as<span class="w"> </span>DELEGATED_ADMIN
</pre></div>

<p class="mb-4 font-light font-serif">Run this on a schedule. I trigger it weekly via a CloudWatch Events rule. Drift in IAM roles is a security finding: someone bypassed the managed deployment to make a manual change. Investigate every instance.</p>
<h3 id="updates-and-rollbacks">Updates and Rollbacks</h3>
<p class="mb-4 font-light font-serif">When you update the CloudFormation template (change the managed policies, modify the trust policy), the StackSet rolls the update across all accounts. The <code>operation_preferences</code> control the rollout speed and failure tolerance.</p>
<p class="mb-4 font-light font-serif">For IAM changes, I recommend:</p>
<ul class="my-6 lg:mb-0 space-y-4">
<li>Set <code>failure_tolerance_percentage = 0</code> for updates. IAM changes should succeed everywhere or nowhere.</li>
<li>Set <code>max_concurrent_percentage = 10</code> for updates. Roll slowly. If something is wrong with the new template, you want to catch it early.</li>
<li>Test the template change in a sandbox account first by deploying a standalone stack, before pushing through the StackSet.</li>
</ul>
<p class="mb-4 font-light font-serif">CloudFormation handles rollbacks per-account. If a stack instance fails to update, it rolls back to the previous template. The StackSet operation continues to other accounts. You will see <code>OUTDATED</code> status on the failed instances, indicating they are running the old template.</p>
<h3 id="account-removal-behavior">Account Removal Behavior</h3>
<p class="mb-4 font-light font-serif">When <code>retain_stacks_on_account_removal = true</code>, removing an account from a targeted OU leaves the IAM role in place. The stack instance is removed from the StackSet, but the IAM role persists in the account. This is the correct behavior for security roles.</p>
<p class="mb-4 font-light font-serif">When <code>retain_stacks_on_account_removal = false</code>, CloudFormation deletes the stack (and the IAM role) when the account leaves the OU. Use this for non-critical resources where cleanup matters more than continuity.</p>
<h2 id="limits-and-quotas">Limits and Quotas</h2>
<p class="mb-4 font-light font-serif">StackSets have specific limits that matter at scale:</p>
<table>
  <thead>
    <tr>
      <th>Quota</th>
      <th>Default Value</th>
      <th>Adjustable</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Stack sets per administrator account</td>
      <td>100</td>
      <td>Yes</td>
    </tr>
    <tr>
      <td>Stack instances per stack set</td>
      <td>100,000</td>
      <td>Yes</td>
    </tr>
    <tr>
      <td>Concurrent operations per Region per administrator</td>
      <td>10,000</td>
      <td>Yes</td>
    </tr>
    <tr>
      <td>Stack sets per delegated administrator</td>
      <td>100</td>
      <td>Yes</td>
    </tr>
    <tr>
      <td>Maximum <code>MaxConcurrentCount</code></td>
      <td>Varies by org size</td>
      <td>No</td>
    </tr>
    <tr>
      <td>Concurrent StackSet operations</td>
      <td>1 per StackSet</td>
      <td>No</td>
    </tr>
    <tr>
      <td>Drift detection operations</td>
      <td>1 per StackSet at a time</td>
      <td>No</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The single concurrent operation limit per StackSet is the most operationally constraining. If a StackSet update is in progress and you try to run drift detection (or another update), the second operation fails. Sequence your operations carefully, especially in CI/CD pipelines where multiple Terraform applies might target the same StackSet.</p>
<h2 id="common-failure-modes">Common Failure Modes</h2>
<p class="mb-4 font-light font-serif">After deploying this pattern across multiple organizations, these are the failures I have seen most frequently:</p>
<table>
  <thead>
    <tr>
      <th>Failure</th>
      <th>Cause</th>
      <th>Fix</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>CAPABILITY_NAMED_IAM</code> error</td>
      <td>Template creates a named IAM resource but the capability is not declared</td>
      <td>Add <code>capabilities = [&quot;CAPABILITY_NAMED_IAM&quot;]</code> to the StackSet resource</td>
    </tr>
    <tr>
      <td>Trust policy rejection</td>
      <td>Trusted account ID is wrong or the external ID does not match</td>
      <td>Verify parameters passed to the CloudFormation template</td>
    </tr>
    <tr>
      <td><code>StackSetNotFoundException</code></td>
      <td>Targeting an OU that does not exist or that the StackSet does not cover</td>
      <td>Verify OU IDs with <code>aws organizations list-organizational-units-for-parent</code></td>
    </tr>
    <tr>
      <td>Perpetual Terraform diff on <code>administration_role_arn</code></td>
      <td>Service-managed StackSets auto-populate this field; Terraform tries to reset it</td>
      <td>Add <code>lifecycle { ignore_changes = [administration_role_arn] }</code></td>
    </tr>
    <tr>
      <td>Deployment skips management account</td>
      <td>By design: service-managed StackSets never deploy to the management account</td>
      <td>Create the role separately in the management account with <code>aws_iam_role</code></td>
    </tr>
    <tr>
      <td>New account does not get the role</td>
      <td>Account was added to an OU not targeted by the StackSet, or auto-deployment is disabled</td>
      <td>Verify <code>auto_deployment.enabled = true</code> and the account&#39;s OU is in <code>deployment_targets</code></td>
    </tr>
    <tr>
      <td>Drift detection times out</td>
      <td>Large number of accounts with many resources per stack</td>
      <td>Increase detection timeout; run during off-peak hours</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The <code>lifecycle.ignore_changes</code> on <code>administration_role_arn</code> deserves emphasis. This is a known issue in the Terraform AWS provider. Service-managed StackSets set this field automatically. Without the lifecycle block, every <code>terraform plan</code> shows a diff, and every <code>terraform apply</code> triggers an unnecessary update. I have seen this cause CI/CD pipelines to run StackSet updates on every commit.</p>
<h2 id="putting-it-all-together">Putting It All Together</h2>
<p class="mb-4 font-light font-serif">Here is the complete Terraform module structure:</p>
<div class="highlight"><pre><span></span><span class="n">modules</span><span class="o">/</span><span class="n">stackset</span><span class="o">-</span><span class="n">iam</span><span class="o">-</span><span class="n">role</span><span class="o">/</span>
<span class="w">  </span><span class="n">main</span><span class="o">.</span><span class="n">tf</span><span class="w">              </span><span class="c1"># StackSet and instance resources</span>
<span class="w">  </span><span class="n">variables</span><span class="o">.</span><span class="n">tf</span><span class="w">         </span><span class="c1"># Input variables</span>
<span class="w">  </span><span class="n">templates</span><span class="o">/</span>
<span class="w">    </span><span class="n">cross</span><span class="o">-</span><span class="n">account</span><span class="o">-</span><span class="n">role</span><span class="o">.</span><span class="n">yaml</span><span class="w">  </span><span class="c1"># CloudFormation template</span>
</pre></div>

<p class="mb-4 font-light font-serif">The variables file:</p>
<div class="highlight"><pre><span></span><span class="kr">variable</span><span class="w"> </span><span class="nv">&quot;role_name&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">type</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="kt">string</span>
<span class="w">  </span><span class="na">default</span><span class="w">     </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;OrganizationSecurityAuditRole&quot;</span>
<span class="w">  </span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;Name of the IAM role to create in each member account&quot;</span>
<span class="p">}</span>

<span class="kr">variable</span><span class="w"> </span><span class="nv">&quot;external_id&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">type</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="kt">string</span>
<span class="w">  </span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;External ID for assume-role condition&quot;</span>
<span class="w">  </span><span class="na">sensitive</span><span class="w">   </span><span class="o">=</span><span class="w"> </span><span class="no">true</span>
<span class="p">}</span>

<span class="kr">variable</span><span class="w"> </span><span class="nv">&quot;target_regions&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">type</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="kt">string</span><span class="p">)</span>
<span class="w">  </span><span class="na">default</span><span class="w">     </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;us-east-1&quot;</span><span class="p">]</span>
<span class="w">  </span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;Regions to deploy stack instances&quot;</span>
<span class="p">}</span>

<span class="kr">variable</span><span class="w"> </span><span class="nv">&quot;target_ou_ids&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">type</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="kt">string</span><span class="p">)</span>
<span class="w">  </span><span class="na">default</span><span class="w">     </span><span class="o">=</span><span class="w"> </span><span class="p">[]</span>
<span class="w">  </span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;OU IDs to target. Empty targets the organization root.&quot;</span>
<span class="p">}</span>

<span class="kr">variable</span><span class="w"> </span><span class="nv">&quot;managed_policy_arns&quot;</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="na">type</span><span class="w">        </span><span class="o">=</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="kt">string</span><span class="p">)</span>
<span class="w">  </span><span class="na">default</span><span class="w">     </span><span class="o">=</span><span class="w"> </span><span class="p">[</span>
<span class="w">    </span><span class="s2">&quot;arn:aws:iam::aws:policy/SecurityAudit&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="s2">&quot;arn:aws:iam::aws:policy/ReadOnlyAccess&quot;</span>
<span class="w">  </span><span class="p">]</span>
<span class="w">  </span><span class="na">description</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;Managed policy ARNs to attach to the role&quot;</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">This module deploys to six organizations I manage. The CloudFormation template has not changed in over a year. New accounts get the role within five minutes of creation. Zero tickets. Zero manual steps.</p>
<p class="mb-4 font-light font-serif">Cross-reference this with the <a href="https://charlessieg.com/articles/aws-iam-architecture-deep-dive.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS IAM: An Architecture Deep-Dive</a> for deeper coverage of IAM policy evaluation, and the <a href="https://charlessieg.com/articles/infrastructure-as-code-cloudformation-cdk-terraform-pulumi.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Infrastructure as Code: CloudFormation, CDK, Terraform, and Pulumi Compared</a> for a broader comparison of IaC tools.</p>
<h2 id="key-patterns">Key Patterns</h2>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Use service-managed permissions.</strong> Self-managed requires pre-creating roles in every target account. Service-managed handles it through Organizations integration. Always service-managed for organizational deployments.</li>
<li><strong>Enable auto-deployment.</strong> The whole point of StackSets is removing manual steps. Auto-deploy ensures new accounts get the role without any human intervention.</li>
<li><strong>Retain stacks on account removal.</strong> For security roles, losing access when an account moves between OUs is the wrong behavior. Retain the stacks.</li>
<li><strong>Use the <code>lifecycle.ignore_changes</code> block.</strong> The <code>administration_role_arn</code> diff is a known provider issue. Prevent unnecessary StackSet updates.</li>
<li><strong>Always include an external ID.</strong> Cross-account role assumption without an external ID is a confused deputy vulnerability. It costs nothing to include.</li>
<li><strong>Move to delegated administration.</strong> Keep the management account locked down. Run StackSet operations from a delegated admin account.</li>
<li><strong>Run drift detection on a schedule.</strong> Manual IAM changes in member accounts are a security risk. Catch them early.</li>
<li><strong>Set failure tolerance to zero for updates.</strong> IAM changes should be all-or-nothing. A partial rollout where half your accounts have different permissions is worse than a failed deployment.</li>
</ol>
<h2 id="additional-resources">Additional Resources</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS CloudFormation StackSets Documentation</a></li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">StackSets Prerequisites</a></li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-orgs-associate-stackset-with-org.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Service-Managed Permissions for StackSets</a></li>
<li><a href="https://aws.amazon.com/blogs/mt/cloudformation-stacksets-delegated-administration/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">CloudFormation StackSets Delegated Administration</a></li>
<li><a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation<em>stack</em>set" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Terraform aws<em>cloudformation</em>stack_set Resource</a></li>
<li><a href="https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation<em>stack</em>instances" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Terraform aws<em>cloudformation</em>stack_instances Resource</a></li>
<li><a href="https://aws.amazon.com/blogs/security/how-to-implement-the-principle-of-least-privilege-with-cloudformation-stacksets/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Implementing Least Privilege with CloudFormation StackSets</a></li>
<li><a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">StackSets Quotas and Limits</a></li>
</ul>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 23, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-23-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-23-leverage-record.html</id>
    <updated>2026-03-23T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Sixty-one tasks. A new single-day record by a wide margin. The bulk of the work fell into patent portfolio operations: drafting new applications, implementing claims in the engine, resequencing references across multiple repositories, and hardening prior art sections. Alongside that, 975 lab definitions generated for certification domains, a full product marketing website built from scratch, a consulting site migration, and an analytics platform stood up end to end.</p>
<p class="mb-4 font-light font-serif">The weighted average leverage factor landed at 75x. The supervisory leverage factor hit 296x, meaning each minute I spent writing prompts produced nearly five hours of human-equivalent output. The top task (105 lab definitions for 7 cloud certification domains) clocked a 280x factor and a 2,520x supervisory factor.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Generate 105 lab definitions for 7 cloud certification domains</td>
      <td>210h</td>
      <td>45m</td>
      <td>5.2w</td>
      <td>280.0x</td>
      <td>2520.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Study platform: 9 features (localization, subscription, quiz modes, progress tracking)</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Draft 2 patent applications with 20 claims and 8 diagrams each</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Implement 46 patent claim gaps across 3 phases: test coverage, endpoint wiring, and ML training infrastructure</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Patent portfolio resequencing: insert new application, shift downstream references across 3 repos</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Generate 870 lab definitions across 58 domains (15 per domain) with technology-specific enrichment</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Draft patent application: embedding versioning system (spec + 20 claims + 7 diagrams)</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Draft patent application: adaptive assessment simulation engine</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Build complete product marketing website (10 pages)</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Landing page analytics: docs + models + schemas + service + API + frontend</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Patent claim gap audit: 26 already implemented, built remaining 16, updated traceability matrix</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Patent portfolio gap analysis - 16 applications with platform requirements analysis</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Build complete product  marketing website (10 files 3598 LOC)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Strengthen 5 patent apps with new sections and claims (A C H M P)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Implement 6 partial patent claims across 6 subsystems</td>
      <td>10h</td>
      <td>8m</td>
      <td>0.25w</td>
      <td>75.0x</td>
      <td>200.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>New application: implement 14 remaining claims + traceability update</td>
      <td>24h</td>
      <td>20m</td>
      <td>0.60w</td>
      <td>72.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Patent reference remapping + cognitive state subsystem implementation</td>
      <td>24h</td>
      <td>25m</td>
      <td>0.60w</td>
      <td>57.6x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Implement 4 patent claims (4 claims) in engine</td>
      <td>4h</td>
      <td>5m</td>
      <td>0.10w</td>
      <td>48.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Write 104 interaction subsystem unit tests (7 subsystems)</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Write 94 unit tests for intelligence subsystem coverage expansion (42% to 89%)</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Implement 5 patent claims (5 claims) across engine</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td>40.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Implement 6 patent claims for new application from new application in engine cognitive state subsystem</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>new application prior art hardening - 12 fixes across claims/background/spec/examples</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Write unit tests for API and Training subsystems (185 tests) to push both above 70% coverage</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Update entire platform patent portfolio for new application addition (47 files: CLAUDE.md AGENTS.md README.md 3 gen scripts 5 CIP support docs 5 Counsel<em>Packet docs Patent</em>Family<em>Grouping Platform</em>Architecture<em>Tiers Filing</em>Cost Valuation System<em>Overview Day</em>In<em>The</em>Life NDA FAQ FAQ<em>Simplified Reading</em>Order Diagram<em>List Invention</em>List Website_Spec Documentation/README 12 use case files)</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Write 137 unit tests for API subsystem to raise coverage from 42% to 61%</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Write unit tests for API (75 tests) and Origin (91 tests) subsystems to improve coverage</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Migrate Consulting site migration with full design rebuild</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Unit tests for initialization/core/preflight subsystems (142 tests)</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Fill content gaps for 4 domains: 24 labs + certification question bank</td>
      <td>24h</td>
      <td>45m</td>
      <td>0.60w</td>
      <td>32.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Write cross-domain scale integration test (9 tests real 1024-dim embeddings)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Implement Human feedback endpoint with evidence fusion wiring</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Upgrade Approximate nearest neighbor index to graph-based nearest neighbor</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Implement Speech recognition adapter with model, endpoint, and tests</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Fix content profiles in 845 specification files + generate missing exam_tips + update manifest generator + docs</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Implement 4 patent claims (4 claims) in engine</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Implement 5 patent claims across 3 applications in engine</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Implement 8 patent claims for new application cognitive state module</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>new application prior art hardening analysis (cross-reference analysis with 20 claims and 47 prior art references)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Provision AWS infrastructure for consulting site (S3 buckets + CloudFront + Route53 + ACM + CMS build/deploy)</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Implement 3 patent claims (3 claims) in engine</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Write federation multinode integration test (8 tests 250+ LOC)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Write navigator E2E test (6 test cases covering study plan/credit/micro-challenge)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Wire Assessment engine into REST gateway with 3 endpoints</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Fix Patent<em>Family</em>Grouping.md resequencing: table ordering + tier labels + branded clusters + coverage matrix column remap</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>Prior art hardening for 6 patent applications - 21 references inserted</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Deploy leverage-manager to production - full infra provisioning (RDS + Graviton EC2 + ALB + CloudFront + DNS + seed)</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>48</td>
      <td>Restructure fiction repository for multi-volume series</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>24.0x</td>
    </tr>
    <tr>
      <td>49</td>
      <td>FAQ resequencing fixes and new Q12 cognitive state vs behavioral analytics</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>50</td>
      <td>Prior art hardening for 4 patent applications - 17 reference paragraphs added</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>51</td>
      <td>Prior art hardening for Applications E F H I - 14 references added to BACKGROUND sections</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>52</td>
      <td>Update architecture docs for patent resequencing G-P with new new application</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>53</td>
      <td>Email provider migration in analytics platform</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>54</td>
      <td>Deploy leverage-manager to production (S3+CloudFront+ECR+infra config)</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>55</td>
      <td>Fix 9 Fiction manuscript continuity fixes across 10+ files</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>56</td>
      <td>Write scenario E2E test (test<em>scenario</em>e2e.py ~300 LOC)</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>57</td>
      <td>Update reference tool letter references A-M to A-P after resequencing</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>58</td>
      <td>Fix missing reference numerals in new application Mermaid diagrams (8 files)</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>59</td>
      <td>Update prior art docs (Matrix/Defense Plan/Known Refs Log) for new application cognitive state detection</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>60</td>
      <td>Fix patent portfolio ordering/claim counts after bulk sed remap</td>
      <td>2h</td>
      <td>15m</td>
      <td>0.050w</td>
      <td>8.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>61</td>
      <td>Fix resequenced patent portfolio references in 5 Counsel Packet files</td>
      <td>4h</td>
      <td>30m</td>
      <td>0.10w</td>
      <td>8.0x</td>
      <td>48.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>61</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>1,203</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>962</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>30.1</td>
    </tr>
    <tr>
      <td>Total tokens</td>
      <td>5,252,500</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>75.0x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>295.8x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">Patent work dominated the day with 35 of the 61 tasks touching the intellectual property portfolio directly. The portfolio resequencing (inserting a new application and shifting all downstream references) was the most coordination-intensive task: 120 human-equivalent hours compressed into 45 Claude minutes across three repositories and an engine subsystem. The cognitive state detection application alone accounted for 8 separate tasks from initial drafting through claim implementation and prior art hardening.</p>
<p class="mb-4 font-light font-serif">Content generation tasks produced the highest individual leverage factors. Generating lab definitions at scale (both the 105-lab and 870-lab batches) consistently exceeds 100x because the domain knowledge synthesis is exactly the kind of structured, pattern-heavy work where AI output multiplies fastest.</p>
<p class="mb-4 font-light font-serif">The fiction manuscript tasks at the bottom of the leverage scale (15x-20x) reflect a different kind of work: continuity checking and structural reorganization require deep contextual understanding and the leverage is lower but still meaningful.</p>
<p class="mb-4 font-light font-serif">The analytics platform build (40 hours compressed to 25 minutes) and the consulting site migration (8 hours to 15 minutes) represent the full-stack infrastructure tasks that have become routine at this point. Standing up a complete system from models to API to frontend in under half an hour is the new baseline.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[AWS IAM: An Architecture Deep-Dive]]></title>
    <link href="https://charlessieg.com/articles/aws-iam-architecture-deep-dive.html" />
    <id>https://charlessieg.com/articles/aws-iam-architecture-deep-dive.html</id>
    <updated>2026-03-23T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/aws-iam-architecture-deep-dive-hero.png" alt="AWS IAM: An Architecture Deep-Dive" /></p><p class="mb-4 font-light font-serif">Every AWS architecture decision I make runs through IAM eventually. Network topology, compute strategy, data pipeline design: none of it matters if the permissions are wrong. And wrong is the default. IAM starts from a position of deny-everything, and the gap between &quot;nothing works&quot; and &quot;everything works but is wide open&quot; is exactly where most teams live. I have spent more time debugging IAM policy evaluation failures than any other category of AWS issue. Not because IAM is broken. Because it is precise, and precision punishes sloppy thinking. This is the reference for how IAM actually evaluates permissions, how the policy layers interact, and where production deployments routinely break. If you already know what an IAM role is, keep reading. If you do not, start with the AWS fundamentals documentation and come back.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-iam-policy-evaluation-algorithm" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The IAM Policy Evaluation Algorithm</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#policy-types-and-how-they-layer" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Policy Types and How They Layer</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#cross-account-access-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Cross-Account Access Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#abac-vs-rbac" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">ABAC vs. RBAC</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#iam-access-analyzer-and-least-privilege" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">IAM Access Analyzer and Least Privilege</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#quotas-and-limits-that-bite" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Quotas and Limits That Bite</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#common-failure-modes" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Common Failure Modes</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#key-patterns" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Key Patterns</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#additional-resources" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Additional Resources</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<h2 id="the-iam-policy-evaluation-algorithm">The IAM Policy Evaluation Algorithm</h2>
<p class="mb-4 font-light font-serif">Every API call to AWS passes through the same evaluation engine. The algorithm is deterministic, follows a fixed order, and produces one of two outcomes: Allow or Deny. Understanding this sequence is the single most useful thing you can know about IAM.</p>
<h3 id="the-evaluation-sequence">The Evaluation Sequence</h3>
<p class="mb-4 font-light font-serif">The enforcement code processes policies in a specific order. An explicit Deny at any step terminates evaluation immediately.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 551.5505833333333 2118.515" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<polyline class="edge" data-from="A" data-to="B" data-style="solid" data-arrow-start="false" data-arrow-end="true" points="182.30841666666666,76.9 182.30841666666666,124.9" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="B" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="157.97875,246.54833333333337 157.97875,375.178 54.5,375.178 54.5,2005.6149999999998 118.58249999999998,2005.6149999999998 118.58249999999998,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="B" data-to="C" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="206.63808333333333,246.54833333333335 206.63808333333333,306.87800000000004 225.04391666666666,306.87800000000004 225.04391666666666,387.178" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="C" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="200.22025,511.29633333333334 200.22025,640.42 96.90266666666666,640.42 96.90266666666666,1993.6149999999998 129.6565,1993.6149999999998 129.6565,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="C" data-to="D" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="249.86758333333333,511.29633333333334 249.86758333333333,572.12 273.15166666666664,572.12 273.15166666666664,652.42" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="244.7465,794.4458333333332 244.7465,927.1509999999998 142.05783333333332,927.1509999999998 142.05783333333332,2005.6149999999998 140.73049999999998,2005.6149999999998 140.73049999999998,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="E" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="301.5568333333333,794.4458333333332 301.5568333333333,858.8509999999999 329.534,858.8509999999999 329.534,939.1509999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="E" data-to="ALLOW" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes, to IAM entity" points="357.1981666666667,1077.4718333333333 357.1981666666667,1473.937 452.0215833333333,1473.937 452.0215833333333,2029.6149999999998 436.3525833333333,2029.6149999999998 436.3525833333333,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="E" data-to="F" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="301.8698333333333,1077.4718333333333 301.8698333333333,1141.136 238.32616666666667,1141.136 238.32616666666667,1221.436" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="F" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="213.626,1344.9368333333332 213.626,1473.937 183.50799999999998,1473.937 183.50799999999998,1981.6149999999998 151.8045,1981.6149999999998 151.8045,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="F" data-to="G" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="263.02633333333335,1344.9368333333332 263.02633333333335,1405.637 286.4339166666667,1405.637 286.4339166666667,1485.937" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="G" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="258.02875,1627.9628333333333 258.02875,1949.3149999999998 228.66316666666665,1949.3149999999998 228.66316666666665,1993.6149999999998 162.87849999999997,1993.6149999999998 162.87849999999997,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="G" data-to="H" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="314.8390833333333,1627.9628333333333 314.8390833333333,1692.368 344.2046666666667,1692.368 344.20466666666664,1772.668" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="H" data-to="DENY" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="No" points="318.7635,1899.873833333333 318.7635,2005.6149999999998 173.9525,2005.6149999999998 173.9525,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="H" data-to="ALLOW" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="Yes" points="369.64583333333337,1899.873833333333 369.64583333333337,2029.6149999999998 406.80825000000004,2029.6149999999998 406.80825000000004,2029.6149999999998" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<g class="edge-label" data-from="B" data-to="DENY" data-label="Yes">
  <rect x="36" y="1968.3149999999998" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="54.329" y="1983.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="B" data-to="C" data-label="No">
  <rect x="209.54391666666666" y="313.87800000000004" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="224.90291666666667" y="329.028" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="C" data-to="DENY" data-label="No">
  <rect x="81.40266666666665" y="1944.3149999999998" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="96.76166666666666" y="1959.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="C" data-to="D" data-label="Yes">
  <rect x="254.65166666666664" y="579.12" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="272.98066666666665" y="594.27" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="D" data-to="DENY" data-label="No">
  <rect x="126.55783333333332" y="1944.3149999999998" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="141.91683333333333" y="1959.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="D" data-to="E" data-label="Yes">
  <rect x="311.034" y="865.8509999999999" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="329.363" y="881.0009999999999" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="E" data-to="ALLOW" data-label="Yes, to IAM entity">
  <rect x="403.5215833333333" y="1699.368" width="96.05800000000002" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="451.5505833333333" y="1714.518" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes, to IAM entity</text>
</g>
<g class="edge-label" data-from="E" data-to="F" data-label="No">
  <rect x="222.82616666666667" y="1148.136" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="238.18516666666667" y="1163.286" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="F" data-to="DENY" data-label="No">
  <rect x="168.00799999999998" y="1944.3149999999998" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="183.367" y="1959.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="F" data-to="G" data-label="Yes">
  <rect x="267.9339166666667" y="1412.637" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="286.2629166666667" y="1427.787" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="G" data-to="DENY" data-label="No">
  <rect x="213.16316666666665" y="1956.3149999999998" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="228.52216666666666" y="1971.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="G" data-to="H" data-label="Yes">
  <rect x="325.7046666666667" y="1699.368" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="344.0336666666667" y="1714.518" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="edge-label" data-from="H" data-to="DENY" data-label="No">
  <rect x="303.2635" y="1968.3149999999998" width="30.718000000000004" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="318.6225" y="1983.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">No</text>
</g>
<g class="edge-label" data-from="H" data-to="ALLOW" data-label="Yes">
  <rect x="351.14583333333337" y="1968.3149999999998" width="36.658" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="369.4748333333334" y="1983.465" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">Yes</text>
</g>
<g class="node" data-id="A" data-label="API Request" data-shape="rectangle">
  <rect x="125.39491666666666" y="40" width="113.827" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="182.30841666666666" y="58.45" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">API Request</text>
</g>
<g class="node" data-id="B" data-label="Explicit Deny
in any policy?" data-shape="diamond">
  <polygon points="182.30841666666666,124.9 255.29741666666666,197.889 182.30841666666666,270.87800000000004 109.31941666666665,197.889" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="182.30841666666666" y="197.889" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="182.30841666666666" dy="-3.9000000000000012">Explicit Deny</tspan><tspan x="182.30841666666666" dy="16.900000000000002">in any policy?</tspan></text>
</g>
<g class="node" data-id="DENY" data-label="DENY" data-shape="rectangle">
  <rect x="107.50849999999998" y="2029.6149999999998" width="77.518" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="146.26749999999998" y="2048.0649999999996" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">DENY</text>
</g>
<g class="node" data-id="C" data-label="Organizations
SCP allows?" data-shape="diamond">
  <polygon points="225.04391666666666,387.178 299.51491666666664,461.649 225.04391666666666,536.12 150.57291666666666,461.649" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="225.04391666666666" y="461.649" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="225.04391666666666" dy="-3.9000000000000012">Organizations</tspan><tspan x="225.04391666666666" dy="16.900000000000002">SCP allows?</tspan></text>
</g>
<g class="node" data-id="D" data-label="Resource Control
Policy allows?" data-shape="diamond">
  <polygon points="273.15166666666664,652.42 358.36716666666666,737.6355 273.15166666666664,822.851 187.93616666666665,737.6355" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="273.15166666666664" y="737.6355" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="273.15166666666664" dy="-3.9000000000000012">Resource Control</tspan><tspan x="273.15166666666664" dy="16.900000000000002">Policy allows?</tspan></text>
</g>
<g class="node" data-id="E" data-label="Resource-based
policy grants
access?" data-shape="diamond">
  <polygon points="329.534,939.1509999999998 412.5265,1022.1434999999999 329.534,1105.136 246.54149999999998,1022.1434999999999" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="329.534" y="1022.1434999999999" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="329.534" dy="-12.350000000000001">Resource-based</tspan><tspan x="329.534" dy="16.900000000000002">policy grants</tspan><tspan x="329.534" dy="16.900000000000002">access?</tspan></text>
</g>
<g class="node" data-id="ALLOW" data-label="ALLOW" data-shape="rectangle">
  <rect x="377.26391666666666" y="2029.6149999999998" width="88.633" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="421.5804166666667" y="2048.0649999999996" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">ALLOW</text>
</g>
<g class="node" data-id="F" data-label="Identity-based
policy allows?" data-shape="diamond">
  <polygon points="238.32616666666667,1221.436 312.4266666666667,1295.5365 238.32616666666667,1369.637 164.22566666666665,1295.5365" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="238.32616666666667" y="1295.5365" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="238.32616666666667" dy="-3.9000000000000012">Identity-based</tspan><tspan x="238.32616666666667" dy="16.900000000000002">policy allows?</tspan></text>
</g>
<g class="node" data-id="G" data-label="Permissions
boundary allows?" data-shape="diamond">
  <polygon points="286.4339166666666,1485.937 371.64941666666664,1571.1525 286.4339166666666,1656.368 201.21841666666663,1571.1525" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="286.4339166666666" y="1571.1525" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="286.4339166666666" dy="-3.9000000000000012">Permissions</tspan><tspan x="286.4339166666666" dy="16.900000000000002">boundary allows?</tspan></text>
</g>
<g class="node" data-id="H" data-label="Session policy
allows?" data-shape="diamond">
  <polygon points="344.20466666666664,1772.668 420.5281666666666,1848.9914999999999 344.20466666666664,1925.3149999999998 267.8811666666667,1848.9914999999999" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="344.20466666666664" y="1848.9914999999999" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="344.20466666666664" dy="-3.9000000000000012">Session policy</tspan><tspan x="344.20466666666664" dy="16.900000000000002">allows?</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">IAM policy evaluation sequence for same-account requests</figcaption>
</div>
<table>
  <thead>
    <tr>
      <th>Step</th>
      <th>Policy Type</th>
      <th>Effect</th>
      <th>Scope</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Explicit Deny (any policy)</td>
      <td>Hard stop. Request denied.</td>
      <td>All policies checked</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Service Control Policy (SCP)</td>
      <td>Must allow. Absence of allow = deny.</td>
      <td>Organization-wide</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Resource Control Policy (RCP)</td>
      <td>Must allow. Absence of allow = deny.</td>
      <td>Organization-wide</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Resource-based policy</td>
      <td>Can grant access directly (same account)</td>
      <td>Per-resource</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Identity-based policy</td>
      <td>Must allow for the principal</td>
      <td>Per-identity</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Permissions boundary</td>
      <td>Must allow. Caps identity-based grants.</td>
      <td>Per-identity</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Session policy</td>
      <td>Must allow. Caps session permissions.</td>
      <td>Per-session</td>
    </tr>
  </tbody>
</table>
<h3 id="the-default-deny">The Default Deny</h3>
<p class="mb-4 font-light font-serif">Every request starts as denied. This is the implicit deny. It requires zero configuration. If no policy explicitly allows an action, the request fails. This is the correct default. The alternative (default allow) would make every new AWS account a security incident waiting to happen.</p>
<h3 id="explicit-deny-wins-everything">Explicit Deny Wins Everything</h3>
<p class="mb-4 font-light font-serif">An explicit Deny statement in any policy type overrides every Allow in every other policy type. If an SCP allows <code>s3:*</code> and an identity-based policy allows <code>s3:DeleteBucket</code>, but a resource-based policy on the bucket has an explicit Deny for <code>s3:DeleteBucket</code>, the request is denied. No exceptions. No precedence tricks. This property is what makes IAM&#39;s security model composable: you can layer restrictions without worrying about some other policy overriding your guardrail.</p>
<h3 id="the-resource-based-policy-shortcut">The Resource-Based Policy Shortcut</h3>
<p class="mb-4 font-light font-serif">Resource-based policies (S3 bucket policies, KMS key policies, SQS queue policies) have a special property in same-account scenarios: they can grant access directly to a principal without requiring a matching identity-based policy. If a bucket policy says <code>&quot;Principal&quot;: {&quot;AWS&quot;: &quot;arn:aws:iam::123456789012:role/MyRole&quot;}, &quot;Effect&quot;: &quot;Allow&quot;, &quot;Action&quot;: &quot;s3:GetObject&quot;</code>, the role can access that bucket even if its identity-based policy says nothing about S3. This shortcut does not apply cross-account. Cross-account access requires both the resource-based policy and the identity-based policy (or role trust policy) to allow the action.</p>
<h2 id="policy-types-and-how-they-layer">Policy Types and How They Layer</h2>
<p class="mb-4 font-light font-serif">AWS has six distinct policy types. They serve different purposes, attach at different levels, and interact through intersection and union operations.</p>
<table>
  <thead>
    <tr>
      <th>Policy Type</th>
      <th>Attached To</th>
      <th>Grants Permissions?</th>
      <th>Sets Maximum?</th>
      <th>Managed By</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Identity-based</td>
      <td>Users, groups, roles</td>
      <td>Yes</td>
      <td>No</td>
      <td>Account admin</td>
    </tr>
    <tr>
      <td>Resource-based</td>
      <td>S3 buckets, KMS keys, SQS queues, etc.</td>
      <td>Yes</td>
      <td>No</td>
      <td>Resource owner</td>
    </tr>
    <tr>
      <td>Permissions boundary</td>
      <td>Users, roles</td>
      <td>No (ceiling only)</td>
      <td>Yes</td>
      <td>Account admin</td>
    </tr>
    <tr>
      <td>Service Control Policy (SCP)</td>
      <td>Organization OUs, accounts</td>
      <td>No (ceiling only)</td>
      <td>Yes</td>
      <td>Org admin</td>
    </tr>
    <tr>
      <td>Resource Control Policy (RCP)</td>
      <td>Organization OUs, accounts</td>
      <td>No (ceiling only)</td>
      <td>Yes</td>
      <td>Org admin</td>
    </tr>
    <tr>
      <td>Session policy</td>
      <td>Temporary credentials</td>
      <td>No (ceiling only)</td>
      <td>Yes</td>
      <td>Caller of AssumeRole/GetFederationToken</td>
    </tr>
  </tbody>
</table>
<h3 id="identity-based-policies">Identity-Based Policies</h3>
<p class="mb-4 font-light font-serif">The workhorses. These are the policies you attach to IAM users, groups, and roles. They come in two forms:</p>
<p class="mb-4 font-light font-serif"><strong>Managed policies</strong> are standalone JSON documents with their own ARN. AWS provides over 1,000 AWS-managed policies. You can also create customer-managed policies. A single managed policy can be attached to multiple identities.</p>
<p class="mb-4 font-light font-serif"><strong>Inline policies</strong> are embedded directly in a single user, group, or role. They have no ARN and cannot be reused. Use inline policies only when you need a strict 1:1 relationship between a policy and an identity, typically for exceptions that should not be accidentally attached to another identity.</p>
<h3 id="permissions-boundaries">Permissions Boundaries</h3>
<p class="mb-4 font-light font-serif">A permissions boundary is an advanced feature that sets the maximum permissions an identity-based policy can grant. The effective permissions are the intersection of the identity-based policy and the permissions boundary. If the identity-based policy allows <code>s3:*</code> but the permissions boundary only allows <code>s3:GetObject</code> and <code>s3:PutObject</code>, the effective permissions are <code>s3:GetObject</code> and <code>s3:PutObject</code>.</p>
<p class="mb-4 font-light font-serif">The primary use case: delegating IAM administration. You want developers to create their own IAM roles for Lambda functions, but you do not want them creating roles with <code>AdministratorAccess</code>. Attach a permissions boundary to the roles they create. The boundary caps what those roles can do regardless of what identity-based policies the developers attach.</p>
<h3 id="service-control-policies-scps">Service Control Policies (SCPs)</h3>
<p class="mb-4 font-light font-serif">SCPs apply to entire AWS accounts or organizational units (OUs) within AWS Organizations. They do not grant permissions. They define the maximum permissions available to principals in the account. Even the root user of a member account is constrained by SCPs (the management account is exempt).</p>
<p class="mb-4 font-light font-serif">Common SCP patterns:</p>
<table>
  <thead>
    <tr>
      <th>Pattern</th>
      <th>SCP Statement</th>
      <th>Purpose</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Region restriction</td>
      <td>Deny all actions where <code>aws:RequestedRegion</code> is not in allowed list</td>
      <td>Prevent resource creation in unapproved regions</td>
    </tr>
    <tr>
      <td>Service restriction</td>
      <td>Deny specific service actions across the OU</td>
      <td>Block services that are not approved for use</td>
    </tr>
    <tr>
      <td>Protect security tooling</td>
      <td>Deny <code>iam:Delete*</code>, <code>cloudtrail:StopLogging</code>, <code>config:StopConfigurationRecorder</code></td>
      <td>Prevent disabling of audit/compliance infrastructure</td>
    </tr>
    <tr>
      <td>Require encryption</td>
      <td>Deny <code>s3:PutObject</code> without <code>s3:x-amz-server-side-encryption</code></td>
      <td>Enforce encryption at rest</td>
    </tr>
  </tbody>
</table>
<h3 id="session-policies">Session Policies</h3>
<p class="mb-4 font-light font-serif">When you call <code>AssumeRole</code>, <code>AssumeRoleWithSAML</code>, <code>AssumeRoleWithWebIdentity</code>, or <code>GetFederationToken</code>, you can pass an optional session policy. This policy further restricts the temporary credentials beyond what the role&#39;s identity-based policies allow. Session policies cannot grant more permissions than the role already has. They are a ceiling on a ceiling.</p>
<p class="mb-4 font-light font-serif">I use session policies for tenant isolation in multi-tenant systems. A shared IAM role serves all tenants, but each <code>AssumeRole</code> call passes a session policy scoped to that tenant&#39;s S3 prefix or DynamoDB partition key. The role itself has broad permissions; the session narrows them to exactly what the tenant should access.</p>
<h2 id="cross-account-access-architecture">Cross-Account Access Architecture</h2>
<p class="mb-4 font-light font-serif">Multi-account AWS architectures depend on cross-account role assumption. The pattern involves a trust relationship between two accounts and a set of permissions granted to the assumed role.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1005.1714999999999 650" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="seq-arrow" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" />
  </marker>
  <marker id="seq-arrow-open" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polyline points="0 0, 8 2.5, 0 5" fill="none" stroke="var(--_arrow)" stroke-width="1" />
  </marker>
</defs>
<line class="lifeline" data-actor="P" x1="111.07149999999999" y1="70" x2="111.07149999999999" y2="620" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="STS" x1="278.01699999999994" y1="70" x2="278.01699999999994" y2="620" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="R" x1="431.62449999999995" y1="70" x2="431.62449999999995" y2="620" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="S" x1="623.3934999999999" y1="70" x2="623.3934999999999" y2="620" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<g class="message" data-from="P" data-to="STS" data-label="AssumeRole(role ARN in Account B)" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="111.07149999999999" y1="90" x2="278.01699999999994" y2="90" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="194.54424999999998" y="80" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">AssumeRole(role ARN in Account B)</text>
</g>
<g class="message" data-from="STS" data-to="R" data-label="Check trust policy" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="278.01699999999994" y1="130" x2="431.62449999999995" y2="130" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="354.82075" y="120" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Check trust policy</text>
</g>
<g class="message" data-from="R" data-to="STS" data-label="Trust policy allows Account A" data-line-style="dashed" data-arrow-head="filled" data-self="false">
  <line x1="431.62449999999995" y1="170" x2="278.01699999999994" y2="170" stroke="var(--_line)" stroke-width="1" stroke-dasharray="6 4" marker-end="url(#seq-arrow)" />
  <text x="354.82075" y="160" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Trust policy allows Account A</text>
</g>
<g class="message" data-from="STS" data-to="P" data-label="Check identity-based policy" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="278.01699999999994" y1="210" x2="111.07149999999999" y2="210" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="194.54424999999998" y="200" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Check identity-based policy</text>
</g>
<g class="message" data-from="P" data-to="STS" data-label="sts:AssumeRole allowed" data-line-style="dashed" data-arrow-head="filled" data-self="false">
  <line x1="111.07149999999999" y1="250" x2="278.01699999999994" y2="250" stroke="var(--_line)" stroke-width="1" stroke-dasharray="6 4" marker-end="url(#seq-arrow)" />
  <text x="194.54424999999998" y="240" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">sts:AssumeRole allowed</text>
</g>
<g class="message" data-from="STS" data-to="STS" data-label="Check SCP (Account A)" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="278.01699999999994,290 308.01699999999994,290 308.01699999999994,310 278.01699999999994,310" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="316.01699999999994" y="300" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Check SCP (Account A)</text>
</g>
<g class="message" data-from="STS" data-to="STS" data-label="Check SCP (Account B)" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="278.01699999999994,360 308.01699999999994,360 308.01699999999994,380 278.01699999999994,380" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="316.01699999999994" y="370" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Check SCP (Account B)</text>
</g>
<g class="message" data-from="STS" data-to="P" data-label="Temporary credentials
(access key + secret + session token)" data-line-style="dashed" data-arrow-head="filled" data-self="false">
  <line x1="278.01699999999994" y1="430" x2="111.07149999999999" y2="430" stroke="var(--_line)" stroke-width="1" stroke-dasharray="6 4" marker-end="url(#seq-arrow)" />
  <text x="194.54424999999998" y="420" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)"><tspan x="194.54424999999998" dy="-3.3000000000000007">Temporary credentials</tspan><tspan x="194.54424999999998" dy="14.3">(access key + secret + session token)</tspan></text>
</g>
<g class="message" data-from="P" data-to="S" data-label="API call with temporary credentials" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="111.07149999999999" y1="470" x2="623.3934999999999" y2="470" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="367.23249999999996" y="460" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">API call with temporary credentials</text>
</g>
<g class="message" data-from="S" data-to="S" data-label="Evaluate role permissions
+ resource policy + SCPs (Account B)" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="623.3934999999999,510 653.3934999999999,510 653.3934999999999,530 623.3934999999999,530" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="661.3934999999999" y="520" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)"><tspan x="661.3934999999999" dy="-3.3000000000000007">Evaluate role permissions</tspan><tspan x="661.3934999999999" dy="14.3">+ resource policy + SCPs (Account B)</tspan></text>
</g>
<g class="message" data-from="S" data-to="P" data-label="Response" data-line-style="dashed" data-arrow-head="filled" data-self="false">
  <line x1="623.3934999999999" y1="580" x2="111.07149999999999" y2="580" stroke="var(--_line)" stroke-width="1" stroke-dasharray="6 4" marker-end="url(#seq-arrow)" />
  <text x="367.23249999999996" y="570" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Response</text>
</g>
<g class="actor" data-id="P" data-label="Principal
(Account A)" data-type="participant">
  <rect x="30" y="30" width="162.14299999999997" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="111.07149999999999" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)"><tspan x="111.07149999999999" dy="-3.9000000000000012">Principal</tspan><tspan x="111.07149999999999" dy="16.900000000000002">(Account A)</tspan></text>
</g>
<g class="actor" data-id="STS" data-label="AWS STS" data-type="participant">
  <rect x="232.14299999999994" y="30" width="91.748" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="278.01699999999994" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">AWS STS</text>
</g>
<g class="actor" data-id="R" data-label="Role
(Account B)" data-type="participant">
  <rect x="363.89099999999996" y="30" width="135.467" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="431.62449999999995" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)"><tspan x="431.62449999999995" dy="-3.9000000000000012">Role</tspan><tspan x="431.62449999999995" dy="16.900000000000002">(Account B)</tspan></text>
</g>
<g class="actor" data-id="S" data-label="Resource
(Account B)" data-type="participant">
  <rect x="539.358" y="30" width="168.07099999999997" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="623.3934999999999" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)"><tspan x="623.3934999999999" dy="-3.9000000000000012">Resource</tspan><tspan x="623.3934999999999" dy="16.900000000000002">(Account B)</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Cross-account role assumption flow</figcaption>
</div>
<h3 id="trust-policies">Trust Policies</h3>
<p class="mb-4 font-light font-serif">Every IAM role has a trust policy (also called an assume role policy) that specifies which principals can assume it. For cross-account access, the trust policy must explicitly name the source account or specific principals.</p>
<div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;Version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;2012-10-17&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;Statement&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span>
<span class="w">    </span><span class="nt">&quot;Effect&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Allow&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;Principal&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;AWS&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;arn:aws:iam::111111111111:root&quot;</span><span class="p">},</span>
<span class="w">    </span><span class="nt">&quot;Action&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;sts:AssumeRole&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="nt">&quot;Condition&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nt">&quot;StringEquals&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nt">&quot;sts:ExternalId&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;unique-external-id-here&quot;</span><span class="p">}</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}]</span>
<span class="p">}</span>
</pre></div>

<h3 id="the-external-id-problem">The External ID Problem</h3>
<p class="mb-4 font-light font-serif">When a third party assumes a role in your account, the confused deputy problem arises. The third party&#39;s service (Account C) assumes a role in your account (Account B) on behalf of multiple customers. Without an external ID, a malicious customer could provide their own Account B role ARN to the third party, tricking Account C into accessing Account B&#39;s resources on the attacker&#39;s behalf.</p>
<p class="mb-4 font-light font-serif">The <code>sts:ExternalId</code> condition key solves this. The external ID is a shared secret between you and the third party. The trust policy requires it, and the third party includes it in the <code>AssumeRole</code> call. An attacker who does not know the external ID cannot exploit the trust relationship.</p>
<h3 id="cross-account-evaluation-differences">Cross-Account Evaluation Differences</h3>
<p class="mb-4 font-light font-serif">Cross-account access has a critical difference from same-account access: both accounts must allow the action. The identity-based policy (or trust policy) in the source account must allow <code>sts:AssumeRole</code>. The trust policy in the target account must allow the source principal. And the role&#39;s permissions in the target account must allow the requested action. A resource-based policy shortcut that works same-account does not apply cross-account for most services. Both sides must explicitly permit the access.</p>
<h2 id="abac-vs-rbac">ABAC vs. RBAC</h2>
<p class="mb-4 font-light font-serif">AWS supports two authorization models. Most production environments use both.</p>
<h3 id="role-based-access-control-rbac">Role-Based Access Control (RBAC)</h3>
<p class="mb-4 font-light font-serif">RBAC assigns permissions based on job function. You create IAM roles with names like <code>DataEngineerRole</code>, <code>ApplicationDeployRole</code>, <code>ReadOnlyAuditorRole</code> and attach policies that grant the permissions each function needs. When a new service or resource appears, you update the relevant role policies.</p>
<h3 id="attribute-based-access-control-abac">Attribute-Based Access Control (ABAC)</h3>
<p class="mb-4 font-light font-serif">ABAC assigns permissions based on attributes (tags) attached to the principal and the resource. Instead of listing specific resource ARNs in policies, you write condition expressions that compare tags.</p>
<div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;Effect&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Allow&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;Action&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;ec2:StartInstances&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;ec2:StopInstances&quot;</span><span class="p">],</span>
<span class="w">  </span><span class="nt">&quot;Resource&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;*&quot;</span><span class="p">,</span>
<span class="w">  </span><span class="nt">&quot;Condition&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;StringEquals&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nt">&quot;aws:ResourceTag/Project&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;${aws:PrincipalTag/Project}&quot;</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<p class="mb-4 font-light font-serif">This policy allows starting and stopping EC2 instances only when the instance&#39;s <code>Project</code> tag matches the principal&#39;s <code>Project</code> tag. No resource ARNs. No account-specific references. The same policy works across every account in the organization without modification.</p>
<table>
  <thead>
    <tr>
      <th>Criterion</th>
      <th>RBAC</th>
      <th>ABAC</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Policy updates for new resources</td>
      <td>Required</td>
      <td>Not required (tags handle it)</td>
    </tr>
    <tr>
      <td>Number of policies</td>
      <td>Grows with resources/functions</td>
      <td>Stays small</td>
    </tr>
    <tr>
      <td>Works across accounts</td>
      <td>Requires per-account ARNs</td>
      <td>Works with tags (account-agnostic)</td>
    </tr>
    <tr>
      <td>Complexity</td>
      <td>Simple to understand</td>
      <td>Requires disciplined tagging</td>
    </tr>
    <tr>
      <td>Auditability</td>
      <td>Clear role-to-permission mapping</td>
      <td>Requires tag inventory</td>
    </tr>
    <tr>
      <td>Service support</td>
      <td>Universal</td>
      <td>Varies by service (check condition key support)</td>
    </tr>
  </tbody>
</table>
<h3 id="when-to-use-abac">When to Use ABAC</h3>
<p class="mb-4 font-light font-serif">ABAC pays off at scale. If you have 50 AWS accounts and 200 microservices, maintaining RBAC policies with specific ARNs for each resource in each account is a full-time job. ABAC policies that match on <code>Project</code>, <code>Environment</code>, and <code>Team</code> tags work identically everywhere. The tradeoff: ABAC depends entirely on consistent tagging. One untagged resource or mistagged principal and the access silently fails (or silently succeeds, which is worse).</p>
<h2 id="iam-access-analyzer-and-least-privilege">IAM Access Analyzer and Least Privilege</h2>
<p class="mb-4 font-light font-serif">IAM Access Analyzer provides two categories of findings that directly support least-privilege architecture.</p>
<h3 id="external-access-findings">External Access Findings</h3>
<p class="mb-4 font-light font-serif">Access Analyzer identifies resources shared with principals outside your account or organization. If an S3 bucket policy grants access to an external account, Access Analyzer flags it. Same for KMS keys, IAM roles with external trust policies, Lambda function resource policies, SQS queues, and Secrets Manager secrets.</p>
<h3 id="unused-access-findings">Unused Access Findings</h3>
<p class="mb-4 font-light font-serif">The more valuable capability. Access Analyzer tracks which permissions each IAM role and user has actually exercised over a configurable lookback period. It identifies:</p>
<table>
  <thead>
    <tr>
      <th>Finding Type</th>
      <th>What It Detects</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Unused roles</td>
      <td>Roles that have not been assumed in the lookback period</td>
    </tr>
    <tr>
      <td>Unused access keys</td>
      <td>Access keys with no API activity</td>
    </tr>
    <tr>
      <td>Unused passwords</td>
      <td>Console passwords with no sign-in activity</td>
    </tr>
    <tr>
      <td>Unused services</td>
      <td>Services listed in policies but never called</td>
    </tr>
    <tr>
      <td>Unused actions</td>
      <td>Specific actions allowed by policy but never invoked</td>
    </tr>
  </tbody>
</table>
<h3 id="policy-generation">Policy Generation</h3>
<p class="mb-4 font-light font-serif">Access Analyzer can generate a least-privilege policy based on CloudTrail activity. Feed it a role and a lookback window, and it produces a policy containing only the actions the role actually used. I treat these generated policies as starting points, not final products. They reflect past behavior, not future requirements. A role that has not yet processed a monthly batch job will not have those permissions in the generated policy. Always review and adjust before applying.</p>
<h3 id="integration-pattern">Integration Pattern</h3>
<p class="mb-4 font-light font-serif">The production pattern I use: enable Access Analyzer with unused access findings across the organization, pipe findings to Security Hub, create EventBridge rules that notify the team when new external access or overly broad unused permissions appear, and run quarterly reviews where generated policies replace hand-crafted ones. This creates a continuous tightening cycle rather than a one-time audit.</p>
<h2 id="quotas-and-limits-that-bite">Quotas and Limits That Bite</h2>
<p class="mb-4 font-light font-serif">IAM has limits that surprise teams when they hit production scale.</p>
<table>
  <thead>
    <tr>
      <th>Resource</th>
      <th>Default Limit</th>
      <th>Maximum (after increase)</th>
      <th>Notes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Managed policies per role</td>
      <td>10</td>
      <td>25</td>
      <td>Request increase via Service Quotas</td>
    </tr>
    <tr>
      <td>Managed policy size</td>
      <td>6,144 characters</td>
      <td>Not increasable</td>
      <td>Whitespace counts</td>
    </tr>
    <tr>
      <td>Inline policy aggregate (roles)</td>
      <td>10,240 characters</td>
      <td>Not increasable</td>
      <td>Sum of all inline policies on the role</td>
    </tr>
    <tr>
      <td>Inline policy aggregate (users)</td>
      <td>2,048 characters</td>
      <td>Not increasable</td>
      <td>Very tight; avoid inline on users</td>
    </tr>
    <tr>
      <td>Roles per account</td>
      <td>1,000</td>
      <td>5,000</td>
      <td>Request increase</td>
    </tr>
    <tr>
      <td>Instance profiles per account</td>
      <td>1,000</td>
      <td>5,000</td>
      <td>1:1 with roles in most cases</td>
    </tr>
    <tr>
      <td>SAML providers per account</td>
      <td>100</td>
      <td>Not increasable</td>
      <td>Relevant for large SSO deployments</td>
    </tr>
    <tr>
      <td>Policy versions</td>
      <td>5 per managed policy</td>
      <td>Not increasable</td>
      <td>Delete old versions before creating new ones</td>
    </tr>
    <tr>
      <td>Trust policy size</td>
      <td>2,048 characters</td>
      <td>4,096 (with increase)</td>
      <td>Cross-account patterns eat this fast</td>
    </tr>
    <tr>
      <td>Groups per account</td>
      <td>300</td>
      <td>500</td>
      <td>Often forgotten until it blocks</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">The managed policy size limit (6,144 characters) is the one that bites most often. A policy with fine-grained permissions for a complex application can hit this limit easily. Strategies: split into multiple managed policies (up to 10 or 25 per role), use wildcards strategically on resource ARNs, switch to ABAC to reduce policy size, or use inline policies to access the separate 10,240-character pool.</p>
<p class="mb-4 font-light font-serif">The trust policy size limit (2,048 characters) catches teams with many cross-account trust relationships. Each trusted principal ARN consumes ~60 characters. At around 30 trusted accounts, you hit the limit. The fix: trust the organization root or an OU, then use condition keys to restrict which accounts can assume the role, rather than listing each account individually.</p>
<h2 id="common-failure-modes">Common Failure Modes</h2>
<p class="mb-4 font-light font-serif">IAM failures in production follow predictable patterns. I have encountered every one of these at least twice.</p>
<h3 id="privilege-escalation-via-passrole">Privilege Escalation via PassRole</h3>
<p class="mb-4 font-light font-serif">The <code>iam:PassRole</code> permission is the most dangerous permission in AWS that nobody talks about. It allows a principal to assign an IAM role to an AWS service. If a developer has <code>iam:PassRole</code> with <code>Resource: &quot;*&quot;</code> and can create Lambda functions, they can create a Lambda function with an administrator role attached, then invoke it to perform any action. The Lambda function runs with the passed role&#39;s permissions, not the developer&#39;s.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960.8399999999999 198.70000000000002" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<polyline class="edge" data-from="D" data-to="R" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="1. iam:PassRole *" points="198.28699999999998,86.15833333333333 234.28700000000006,86.15833333333333 234.28700000000006,58.45 382.3450000000001,58.45" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="D" data-to="L" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="2. lambda:CreateFunction
with AdminRole" points="198.28699999999998,104.09166666666667 234.28699999999998,104.09166666666667 234.28699999999998,131.8 423.33099999999996,131.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="L" data-to="AWS" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="3. Has full admin
permissions" points="595.6969999999999,131.8 774.4089999999999,131.8" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<g class="edge-label" data-from="D" data-to="R" data-label="1. iam:PassRole *">
  <rect x="242.2870000000001" y="42.45" width="96.05800000000002" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="290.3160000000001" y="57.6" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">1. iam:PassRole *</text>
</g>
<g class="edge-label" data-from="D" data-to="L" data-label="2. lambda:CreateFunction
with AdminRole">
  <rect x="242.28699999999998" y="108.80000000000003" width="137.04399999999998" height="44.6" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="310.80899999999997" y="131.10000000000002" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)"><tspan x="310.80899999999997" dy="-3.3000000000000007">2. lambda:CreateFunction</tspan><tspan x="310.80899999999997" dy="14.3">with AdminRole</tspan></text>
</g>
<g class="edge-label" data-from="L" data-to="AWS" data-label="3. Has full admin
permissions">
  <rect x="639.6969999999999" y="108.80000000000003" width="90.71200000000002" height="44.6" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="685.0529999999999" y="131.10000000000002" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)"><tspan x="685.0529999999999" dy="-3.3000000000000007">3. Has full admin</tspan><tspan x="685.0529999999999" dy="14.3">permissions</tspan></text>
</g>
<g class="node" data-id="D" data-label="Developer
Limited permissions" data-shape="rectangle">
  <rect x="40" y="68.225" width="158.28699999999998" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="119.14349999999999" y="95.125" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="119.14349999999999" dy="-3.9000000000000012">Developer</tspan><tspan x="119.14349999999999" dy="16.900000000000002">Limited permissions</tspan></text>
</g>
<g class="node" data-id="R" data-label="AdminRole" data-shape="rectangle">
  <rect x="382.3450000000001" y="40" width="104.19400000000002" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="434.4420000000001" y="58.45" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">AdminRole</text>
</g>
<g class="node" data-id="L" data-label="Lambda Function
Running as AdminRole" data-shape="rectangle">
  <rect x="423.33099999999996" y="104.9" width="172.36599999999996" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="509.51399999999995" y="131.8" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="509.51399999999995" dy="-3.9000000000000012">Lambda Function</tspan><tspan x="509.51399999999995" dy="16.900000000000002">Running as AdminRole</tspan></text>
</g>
<g class="node" data-id="AWS" data-label="Any AWS Service" data-shape="rectangle">
  <rect x="774.4089999999999" y="113.35000000000001" width="146.43099999999998" height="36.900000000000006" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="847.6244999999999" y="131.8" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)" dy="4.55">Any AWS Service</text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Privilege escalation via iam:PassRole</figcaption>
</div>
<p class="mb-4 font-light font-serif"><strong>Fix:</strong> Always scope <code>iam:PassRole</code> to specific role ARNs. Never use <code>Resource: &quot;*&quot;</code> for PassRole.</p>
<h3 id="scp-blocking-valid-operations">SCP Blocking Valid Operations</h3>
<p class="mb-4 font-light font-serif">SCPs apply to all principals in member accounts, including service-linked roles in some cases. A region-restriction SCP that denies all actions outside <code>us-east-1</code> and <code>us-west-2</code> will break global services that operate in <code>us-east-1</code> by default (IAM itself, CloudFront, Route 53, AWS Organizations). Always include global service exceptions in region-restriction SCPs.</p>
<div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w">  </span><span class="nt">&quot;Condition&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">    </span><span class="nt">&quot;StringNotEquals&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nt">&quot;aws:RequestedRegion&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;us-east-1&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;us-west-2&quot;</span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="nt">&quot;ArnNotLike&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w">      </span><span class="nt">&quot;aws:PrincipalARN&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;arn:aws:iam::*:role/aws-service-role/*&quot;</span>
<span class="w">    </span><span class="p">}</span>
<span class="w">  </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>

<h3 id="the-wildcard-trap">The Wildcard Trap</h3>
<p class="mb-4 font-light font-serif"><code>&quot;Resource&quot;: &quot;*&quot;</code> in an identity-based policy is sometimes necessary (for <code>iam:ListUsers</code>, <code>s3:ListAllMyBuckets</code>, and other list/describe operations that do not support resource-level restrictions). The failure mode is using <code>*</code> as a lazy default for actions that do support resource-level restrictions. <code>s3:PutObject</code> with <code>Resource: &quot;*&quot;</code> grants write access to every bucket in the account. I have seen production incidents where a misconfigured Lambda function overwrote data in the wrong bucket because its role had overly broad S3 permissions.</p>
<h3 id="tag-condition-failures">Tag-Condition Failures</h3>
<p class="mb-4 font-light font-serif">ABAC policies fail silently when tags are missing. If a policy condition requires <code>aws:ResourceTag/Environment</code> to equal <code>production</code> and the resource has no <code>Environment</code> tag, the condition evaluates to false. The request is denied with a generic <code>AccessDenied</code> error. CloudTrail does not tell you which condition failed. Debugging requires reading the policy, checking every tag on the resource and the principal, and working through the evaluation logic manually. Mandate tags via SCPs or AWS Config rules to prevent this class of failure.</p>
<h3 id="session-token-expiration">Session Token Expiration</h3>
<p class="mb-4 font-light font-serif">Temporary credentials from <code>AssumeRole</code> default to one hour. Long-running batch jobs, data pipelines, or CI/CD processes that exceed this window fail mid-execution. The maximum session duration is configurable per role (up to 12 hours, or 36 hours for some session types). Set it explicitly rather than relying on the default. For processes longer than 12 hours, implement credential refresh logic using the STS client.</p>
<h2 id="key-patterns">Key Patterns</h2>
<p class="mb-4 font-light font-serif"><strong>Start with deny-everything SCPs, then allow.</strong> The allow-list SCP model (deny everything except explicitly permitted services) is more secure than the deny-list model (allow everything except explicitly denied services). It requires more upfront work but prevents entire categories of misuse.</p>
<p class="mb-4 font-light font-serif"><strong>Scope PassRole to specific role ARNs.</strong> This is the single highest-impact IAM hardening step you can take. Never grant <code>iam:PassRole</code> with <code>Resource: &quot;*&quot;</code>.</p>
<p class="mb-4 font-light font-serif"><strong>Use ABAC for multi-account, RBAC for single-account.</strong> ABAC&#39;s value scales with the number of accounts and resources. For a single-account workload, RBAC is simpler and more auditable.</p>
<p class="mb-4 font-light font-serif"><strong>Trust organization roots, not individual accounts.</strong> For cross-account trust policies, trusting <code>arn:aws:iam::*:root</code> with an <code>aws:PrincipalOrgID</code> condition is more maintainable than listing 50 account IDs. See <a href="https://charlessieg.com/articles/aws-cognito-user-authentication-architecture-deep-dive.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS Cognito User Authentication: An Architecture Deep-Dive</a> for how Cognito integrates with these IAM patterns.</p>
<p class="mb-4 font-light font-serif"><strong>Run Access Analyzer continuously.</strong> Enable unused access findings. Pipe to Security Hub. Review quarterly. Replace hand-written policies with generated ones after verification.</p>
<p class="mb-4 font-light font-serif"><strong>Set explicit session durations.</strong> Do not rely on the one-hour default. Match the session duration to the workload&#39;s actual runtime. Implement refresh logic for anything that runs longer.</p>
<p class="mb-4 font-light font-serif"><strong>Test IAM changes in a sandbox account first.</strong> IAM policy changes take effect immediately. There is no rollback. A bad SCP deployed to the wrong OU can lock out every account in the organization. I have seen it happen. The recovery involves the management account root user and a very bad afternoon.</p>
<h2 id="additional-resources">Additional Resources</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference<em>policies</em>evaluation-logic.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">IAM Policy Evaluation Logic (AWS Documentation)</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference<em>policies</em>evaluation-logic-cross-account.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Cross-Account Policy Evaluation Logic</a></li>
<li><a href="https://aws.amazon.com/blogs/security/when-and-where-to-use-iam-permissions-boundaries/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">When and Where to Use IAM Permissions Boundaries (AWS Security Blog)</a></li>
<li><a href="https://aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">How to Use Trust Policies with IAM Roles (AWS Security Blog)</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">The Confused Deputy Problem (AWS Documentation)</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">IAM Access Analyzer (AWS Documentation)</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">ABAC for AWS (AWS Documentation)</a></li>
<li><a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">IAM and STS Quotas (AWS Documentation)</a></li>
<li><a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs<em>manage</em>policies_scps.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Service Control Policies (AWS Organizations Documentation)</a></li>
<li><a href="https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS IAM Privilege Escalation Methods and Mitigation (Rhino Security Labs)</a></li>
</ul>]]></content>
  </entry>
  <entry>
    <title><![CDATA[OIDC and OAuth 2.0: An Architecture Deep-Dive]]></title>
    <link href="https://charlessieg.com/articles/oidc-oauth-2-architecture-deep-dive.html" />
    <id>https://charlessieg.com/articles/oidc-oauth-2-architecture-deep-dive.html</id>
    <updated>2026-03-23T00:00:00Z</updated>
    <content type="html"><![CDATA[<p><img src="https://charlessieg.com/images/oidc-oauth-2-architecture-deep-dive-hero.png" alt="OIDC and OAuth 2.0: An Architecture Deep-Dive" /></p><p class="mb-4 font-light font-serif">I have built OAuth integrations across web browsers, Electron desktop apps, and native iOS applications. The same protocol, three completely different implementation patterns, three different ways to store tokens, three different ways things break in production. Most documentation treats OAuth as a single flow you bolt onto your app. That works until you ship a second platform and discover that browser redirects, custom protocol handlers, and ASWebAuthenticationSession have almost nothing in common except the access token at the end. This is the reference I wish I had before building multi-platform auth from scratch: how the protocol stack actually works, how tokens move through the system, and where each platform diverges in ways that matter.</p>
<p class="mb-4 font-light font-serif"><nav style="padding:0.75rem 1rem" class="mb-1 bg-gray-50 dark:bg-gray-800 rounded-lg border border-gray-200 dark:border-gray-700">
  <div onclick="toggleTOC()" style="cursor:pointer" onmouseover="this.style.opacity=0.75" onmouseout="this.style.opacity=1">
    <span style="font-size:1.25rem;font-weight:700;margin:0;padding:0" class="text-gray-900 dark:text-white">Table of Contents</span>
    <span id="toc-chevron" style="display:inline-block;margin-left:0.4rem;transition:transform 0.2s" class="text-gray-500 dark:text-gray-400">&#9656;</span>
  </div>
  <div id="toc-content" style="display:none;margin-top:0.6rem">
    <ul style="columns:2;column-gap:2rem;margin:0;padding:0 0 0 1.25rem;font-size:0.6rem;line-height:1.6">
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#the-protocol-stack-oauth-20-oidc-and-oauth-21" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">The Protocol Stack: OAuth 2.0, OIDC, and OAuth 2.1</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#authorization-code-flow-with-pkce" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Authorization Code Flow with PKCE</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#token-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Token Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#identity-provider-internals" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Identity Provider Internals</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6;break-after:column"><a href="#multi-platform-implementation-patterns" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Multi-Platform Implementation Patterns</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#session-management-architecture" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Session Management Architecture</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#security-threat-model" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Security Threat Model</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#identity-provider-selection" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Identity Provider Selection</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#key-patterns" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Key Patterns</a>
      </li>
      <li style="font-size:0.9rem!important;line-height:1.6"><a href="#additional-resources" class="text-primary-600 hover:text-primary-800 dark:text-primary-400 dark:hover:text-primary-300 hover:underline transition-colors duration-200">Additional Resources</a>
      </li>
    </ul>
  </div>
  <script>
    function toggleTOC() {
      var c = document.getElementById("toc-content");
      var v = document.getElementById("toc-chevron");
      if (c.style.display === "none") {
        c.style.display = "block";
        v.innerHTML = "&#9662;";
      } else {
        c.style.display = "none";
        v.innerHTML = "&#9656;";
      }
    }
  </script>
</nav></p>
<h2 id="the-protocol-stack-oauth-20-oidc-and-oauth-21">The Protocol Stack: OAuth 2.0, OIDC, and OAuth 2.1</h2>
<p class="mb-4 font-light font-serif">Three specifications, layered on top of each other. Every confusion about &quot;OAuth vs. OIDC&quot; stems from not understanding what each layer does.</p>
<table>
  <thead>
    <tr>
      <th>Layer</th>
      <th>Specification</th>
      <th>Purpose</th>
      <th>Key Artifact</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Authorization</td>
      <td>OAuth 2.0 (RFC 6749)</td>
      <td>Delegated access to resources</td>
      <td>Access token</td>
    </tr>
    <tr>
      <td>Identity</td>
      <td>OpenID Connect Core 1.0</td>
      <td>Authentication and identity claims</td>
      <td>ID token (JWT)</td>
    </tr>
    <tr>
      <td>Consolidation</td>
      <td>OAuth 2.1 (draft-ietf-oauth-v2-1)</td>
      <td>Security hardening of OAuth 2.0</td>
      <td>Same tokens, stricter rules</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">OAuth 2.0 answers: &quot;Can this application access this resource on behalf of this user?&quot; It says nothing about who the user is. You get an access token. That token grants access to a protected resource. The protocol does not define the token format, does not require the client to understand the token, and does not provide user identity information.</p>
<p class="mb-4 font-light font-serif">OIDC adds an identity layer on top of OAuth 2.0. It answers: &quot;Who is this user?&quot; You get an ID token (always a JWT) containing claims about the user: subject identifier, email, name, authentication time. OIDC uses OAuth 2.0 as its authorization framework but adds the <code>openid</code> scope, the ID token, and the UserInfo endpoint.</p>
<p class="mb-4 font-light font-serif">OAuth 2.1 is not a new protocol. It consolidates a decade of security best practices into a single specification. The draft removes dangerous grant types, mandates PKCE, and tightens redirect URI validation.</p>
<h3 id="what-oauth-21-removes">What OAuth 2.1 Removes</h3>
<table>
  <thead>
    <tr>
      <th>Removed Feature</th>
      <th>Reason</th>
      <th>Replacement</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Implicit grant (<code>response_type=token</code>)</td>
      <td>Tokens exposed in URL fragments, browser history, server logs</td>
      <td>Authorization Code + PKCE</td>
    </tr>
    <tr>
      <td>Resource Owner Password Credentials (ROPC)</td>
      <td>Client handles raw credentials; no MFA support</td>
      <td>Authorization Code + PKCE</td>
    </tr>
    <tr>
      <td>Bearer tokens in query strings</td>
      <td>Tokens logged in server access logs, proxy logs, referrer headers</td>
      <td>Authorization header only</td>
    </tr>
    <tr>
      <td>Loose redirect URI matching</td>
      <td>Enables open redirect attacks, path confusion, parameter pollution</td>
      <td>Exact string matching required</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">If you are starting a new project today, build to OAuth 2.1 requirements. PKCE for every client. No implicit flow. No password grants. Exact redirect URI matching. The draft has been stable since late 2024 and every major identity provider already enforces these constraints.</p>
<h2 id="authorization-code-flow-with-pkce">Authorization Code Flow with PKCE</h2>
<p class="mb-4 font-light font-serif">The Authorization Code flow with Proof Key for Code Exchange is the only grant type you should use for interactive user authentication. PKCE was originally designed for mobile apps (RFC 7636) but OAuth 2.1 mandates it for all clients, including confidential web servers, because it prevents authorization code injection attacks regardless of client type.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 683.809 720" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="seq-arrow" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" />
  </marker>
  <marker id="seq-arrow-open" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polyline points="0 0, 8 2.5, 0 5" fill="none" stroke="var(--_arrow)" stroke-width="1" />
  </marker>
</defs>
<line class="lifeline" data-actor="U" x1="70" y1="70" x2="70" y2="690" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="C" x1="210" y1="70" x2="210" y2="690" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="AS" x1="375.093" y1="70" x2="375.093" y2="690" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="RS" x1="563.157" y1="70" x2="563.157" y2="690" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<g class="message" data-from="C" data-to="C" data-label="Generate code_verifier (random 43-128 chars)" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="210,90 240,90 240,110 210,110" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="248" y="100" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Generate code_verifier (random 43-128 chars)</text>
</g>
<g class="message" data-from="C" data-to="C" data-label="Compute code_challenge = SHA256(code_verifier)" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="210,160 240,160 240,180 210,180" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="248" y="170" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Compute code_challenge = SHA256(code_verifier)</text>
</g>
<g class="message" data-from="C" data-to="AS" data-label="GET /authorize?response_type=code
&amp;client_id=xxx
&amp;redirect_uri=xxx
&amp;scope=openid profile email
&amp;state=random
&amp;code_challenge=xxx
&amp;code_challenge_method=S256" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="210" y1="230" x2="375.093" y2="230" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="292.54650000000004" y="220" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)"><tspan x="292.54650000000004" dy="-39.050000000000004">GET /authorize?response_type=code</tspan><tspan x="292.54650000000004" dy="14.3">&amp;client_id=xxx</tspan><tspan x="292.54650000000004" dy="14.3">&amp;redirect_uri=xxx</tspan><tspan x="292.54650000000004" dy="14.3">&amp;scope=openid profile email</tspan><tspan x="292.54650000000004" dy="14.3">&amp;state=random</tspan><tspan x="292.54650000000004" dy="14.3">&amp;code_challenge=xxx</tspan><tspan x="292.54650000000004" dy="14.3">&amp;code_challenge_method=S256</tspan></text>
</g>
<g class="message" data-from="AS" data-to="U" data-label="Login prompt + consent screen" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="375.093" y1="270" x2="70" y2="270" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="222.5465" y="260" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Login prompt + consent screen</text>
</g>
<g class="message" data-from="U" data-to="AS" data-label="Authenticate + authorize" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="70" y1="310" x2="375.093" y2="310" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="222.5465" y="300" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Authenticate + authorize</text>
</g>
<g class="message" data-from="AS" data-to="C" data-label="Redirect to redirect_uri with ?code=xxx&amp;state=xxx" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="375.093" y1="350" x2="210" y2="350" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="292.54650000000004" y="340" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Redirect to redirect_uri with ?code=xxx&amp;state=xxx</text>
</g>
<g class="message" data-from="C" data-to="C" data-label="Verify state matches" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="210,390 240,390 240,410 210,410" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="248" y="400" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Verify state matches</text>
</g>
<g class="message" data-from="C" data-to="AS" data-label="POST /token with code + code_verifier + client_id" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="210" y1="460" x2="375.093" y2="460" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="292.54650000000004" y="450" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">POST /token with code + code_verifier + client_id</text>
</g>
<g class="message" data-from="AS" data-to="AS" data-label="Verify SHA256(code_verifier) == code_challenge" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="375.093,500 405.093,500 405.093,520 375.093,520" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="413.093" y="510" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Verify SHA256(code_verifier) == code_challenge</text>
</g>
<g class="message" data-from="AS" data-to="C" data-label="Return access_token + id_token + refresh_token" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="375.093" y1="570" x2="210" y2="570" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="292.54650000000004" y="560" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Return access_token + id_token + refresh_token</text>
</g>
<g class="message" data-from="C" data-to="RS" data-label="API request with Authorization: Bearer access_token" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="210" y1="610" x2="563.157" y2="610" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="386.5785" y="600" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">API request with Authorization: Bearer access_token</text>
</g>
<g class="message" data-from="RS" data-to="C" data-label="Protected resource" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="563.157" y1="650" x2="210" y2="650" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="386.5785" y="640" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Protected resource</text>
</g>
<g class="actor" data-id="U" data-label="User" data-type="participant">
  <rect x="30" y="30" width="80" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="70" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">User</text>
</g>
<g class="actor" data-id="C" data-label="Client App" data-type="participant">
  <rect x="163.75549999999998" y="30" width="92.489" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="210" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">Client App</text>
</g>
<g class="actor" data-id="AS" data-label="Authorization Server" data-type="participant">
  <rect x="296.2445" y="30" width="157.697" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="375.093" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">Authorization Server</text>
</g>
<g class="actor" data-id="RS" data-label="Resource Server" data-type="participant">
  <rect x="493.9415" y="30" width="138.43099999999998" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="563.157" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">Resource Server</text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Authorization Code flow with PKCE</figcaption>
</div>
<h3 id="why-pkce-matters">Why PKCE Matters</h3>
<p class="mb-4 font-light font-serif">Without PKCE, an attacker who intercepts the authorization code (via a malicious browser extension, a compromised redirect, or a custom URI scheme collision on mobile) can exchange it for tokens. PKCE binds the token exchange to the original client by requiring proof that the entity exchanging the code is the same entity that initiated the flow.</p>
<p class="mb-4 font-light font-serif">The <code>code_verifier</code> is a cryptographically random string (43-128 characters, unreserved URI characters). The <code>code_challenge</code> is its SHA-256 hash, Base64-URL-encoded. The authorization server stores the challenge during the authorize request and verifies the verifier during the token exchange. An attacker with only the authorization code cannot produce the correct verifier.</p>
<h3 id="the-state-parameter">The State Parameter</h3>
<p class="mb-4 font-light font-serif">The <code>state</code> parameter prevents CSRF attacks against the redirect URI. Generate a cryptographically random value, store it before redirecting to the authorization server, and verify it matches when the redirect returns. If it does not match, reject the response. This is not optional. Every authorization request must include a unique, unpredictable state value.</p>
<h2 id="token-architecture">Token Architecture</h2>
<p class="mb-4 font-light font-serif">An OIDC-based authorization flow may issue up to three token types. The ID token is OIDC&#39;s contribution; access and refresh tokens come from OAuth 2.0. Refresh tokens are optional and not always issued.</p>
<table>
  <thead>
    <tr>
      <th>Token</th>
      <th>Format</th>
      <th>Typical Lifetime</th>
      <th>Audience</th>
      <th>Storage Location</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ID token</td>
      <td>JWT (signed, optionally encrypted)</td>
      <td>5-60 minutes</td>
      <td>Client application</td>
      <td>Memory only</td>
    </tr>
    <tr>
      <td>Access token</td>
      <td>Opaque string or JWT</td>
      <td>15-60 minutes</td>
      <td>Resource server (API)</td>
      <td>Memory; secure storage if needed</td>
    </tr>
    <tr>
      <td>Refresh token</td>
      <td>Opaque string (usually; some providers use JWT)</td>
      <td>Days to weeks (with rotation)</td>
      <td>Authorization server only</td>
      <td>Secure persistent storage</td>
    </tr>
  </tbody>
</table>
<h3 id="id-token-anatomy">ID Token Anatomy</h3>
<p class="mb-4 font-light font-serif">The ID token is a JWT with three Base64-URL-encoded segments: header, payload, signature. The payload contains claims about the authentication event and the user.</p>
<table>
  <thead>
    <tr>
      <th>Claim</th>
      <th>Required</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>iss</code></td>
      <td>Yes</td>
      <td>Issuer identifier (authorization server URL)</td>
    </tr>
    <tr>
      <td><code>sub</code></td>
      <td>Yes</td>
      <td>Subject identifier (unique user ID at this issuer)</td>
    </tr>
    <tr>
      <td><code>aud</code></td>
      <td>Yes</td>
      <td>Audience (your client_id; reject if it does not match)</td>
    </tr>
    <tr>
      <td><code>exp</code></td>
      <td>Yes</td>
      <td>Expiration time (Unix timestamp)</td>
    </tr>
    <tr>
      <td><code>iat</code></td>
      <td>Yes</td>
      <td>Issued-at time (Unix timestamp)</td>
    </tr>
    <tr>
      <td><code>nonce</code></td>
      <td>Conditional</td>
      <td>Replay protection; required in implicit and hybrid flows, recommended in code flow</td>
    </tr>
    <tr>
      <td><code>auth_time</code></td>
      <td>Optional</td>
      <td>Time of original authentication</td>
    </tr>
    <tr>
      <td><code>email</code></td>
      <td>Optional</td>
      <td>User&#39;s email (requires <code>email</code> scope)</td>
    </tr>
    <tr>
      <td><code>name</code></td>
      <td>Optional</td>
      <td>User&#39;s display name (requires <code>profile</code> scope)</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Validate every ID token before trusting it. Verify the signature against the issuer&#39;s JWKS (JSON Web Key Set), rejecting <code>alg=none</code> and any unexpected signing algorithms. Check that <code>iss</code> matches your configured issuer. Check that <code>aud</code> contains your client_id. Check that <code>exp</code> is in the future. Check that <code>iat</code> is not unreasonably far in the past. If you sent a <code>nonce</code> in the authorize request, verify it matches. If multiple audiences are present, check the <code>azp</code> (authorized party) claim. Skip any of these checks and you open the door to token substitution attacks.</p>
<h3 id="access-token-lifecycle">Access Token Lifecycle</h3>
<p class="mb-4 font-light font-serif">Access tokens are deliberately short-lived. Fifteen to sixty minutes is standard. When an access token expires, the client uses the refresh token to obtain a new one without requiring user interaction. The resource server validates the access token on every request, either by introspecting it against the authorization server or (if the token is a JWT) by verifying the signature and claims locally.</p>
<h3 id="refresh-token-rotation">Refresh Token Rotation</h3>
<p class="mb-4 font-light font-serif">Refresh tokens are the most dangerous artifact in the system. A stolen refresh token grants persistent access until it expires or is revoked. Rotation mitigates this: every time a client exchanges a refresh token for a new access token, the authorization server also issues a new refresh token and invalidates the old one.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 457.3745 725" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="seq-arrow" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" />
  </marker>
  <marker id="seq-arrow-open" markerWidth="8" markerHeight="5" refX="8" refY="2.5" orient="auto-start-reverse">
    <polyline points="0 0, 8 2.5, 0 5" fill="none" stroke="var(--_arrow)" stroke-width="1" />
  </marker>
</defs>
<line class="lifeline" data-actor="C" x1="70" y1="70" x2="70" y2="695" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<line class="lifeline" data-actor="AS" x1="228.8485" y1="70" x2="228.8485" y2="695" stroke="var(--_line)" stroke-width="0.75" stroke-dasharray="6 4" />
<g class="message" data-from="AS" data-to="C" data-label="access_token_1 (15 min) + refresh_token_1" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="228.8485" y1="90" x2="70" y2="90" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="80" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">access_token_1 (15 min) + refresh_token_1</text>
</g>
<g class="message" data-from="C" data-to="AS" data-label="POST /token (grant_type=refresh_token, refresh_token_1)" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="70" y1="145" x2="228.8485" y2="145" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="135" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">POST /token (grant_type=refresh_token, refresh_token_1)</text>
</g>
<g class="message" data-from="AS" data-to="AS" data-label="Invalidate refresh_token_1" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="228.8485,185 258.8485,185 258.8485,205 228.8485,205" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="266.8485" y="195" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Invalidate refresh_token_1</text>
</g>
<g class="message" data-from="AS" data-to="C" data-label="access_token_2 (15 min) + refresh_token_2" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="228.8485" y1="255" x2="70" y2="255" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="245" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">access_token_2 (15 min) + refresh_token_2</text>
</g>
<g class="message" data-from="C" data-to="AS" data-label="POST /token (grant_type=refresh_token, refresh_token_2)" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="70" y1="310" x2="228.8485" y2="310" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="300" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">POST /token (grant_type=refresh_token, refresh_token_2)</text>
</g>
<g class="message" data-from="AS" data-to="AS" data-label="Invalidate refresh_token_2" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="228.8485,350 258.8485,350 258.8485,370 228.8485,370" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="266.8485" y="360" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Invalidate refresh_token_2</text>
</g>
<g class="message" data-from="AS" data-to="C" data-label="access_token_3 (15 min) + refresh_token_3" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="228.8485" y1="420" x2="70" y2="420" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="410" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">access_token_3 (15 min) + refresh_token_3</text>
</g>
<g class="message" data-from="C" data-to="AS" data-label="POST /token (grant_type=refresh_token, refresh_token_1)" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="70" y1="475" x2="228.8485" y2="475" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="465" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">POST /token (grant_type=refresh_token, refresh_token_1)</text>
</g>
<g class="message" data-from="AS" data-to="AS" data-label="Detect reuse of invalidated token" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="228.8485,515 258.8485,515 258.8485,535 228.8485,535" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="266.8485" y="525" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Detect reuse of invalidated token</text>
</g>
<g class="message" data-from="AS" data-to="AS" data-label="Revoke entire token family" data-line-style="solid" data-arrow-head="filled" data-self="true">
  <polyline points="228.8485,585 258.8485,585 258.8485,605 228.8485,605" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="266.8485" y="595" font-size="11" text-anchor="start" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Revoke entire token family</text>
</g>
<g class="message" data-from="AS" data-to="C" data-label="401 Unauthorized" data-line-style="solid" data-arrow-head="filled" data-self="false">
  <line x1="228.8485" y1="655" x2="70" y2="655" stroke="var(--_line)" stroke-width="1" marker-end="url(#seq-arrow)" />
  <text x="149.42425" y="645" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">401 Unauthorized</text>
</g>
<g class="note" data-position="over" data-actors="C,AS">
  <polygon points="84.92124999999999,98 207.92725000000002,98 213.92725000000002,104 213.92725000000002,121 84.92124999999999,121" fill="var(--bg)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <polygon points="207.92725000000002,98 213.92725000000002,104 207.92725000000002,104" fill="var(--_inner-stroke)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="149.42425" y="109.5" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Access token expires</text>
</g>
<g class="note" data-position="over" data-actors="C,AS">
  <polygon points="70.96224999999998,263 221.88625000000002,263 227.88625000000002,269 227.88625000000002,286 70.96224999999998,286" fill="var(--bg)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <polygon points="221.88625000000002,263 227.88625000000002,269 221.88625000000002,269" fill="var(--_inner-stroke)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="149.42425" y="274.5" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Access token expires again</text>
</g>
<g class="note" data-position="over" data-actors="C,AS">
  <polygon points="35.91624999999999,428 256.93225,428 262.93225,434 262.93225,451 35.91624999999999,451" fill="var(--bg)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <polygon points="256.93225,428 262.93225,434 256.93225,434" fill="var(--_inner-stroke)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="149.42425" y="439.5" font-size="11" text-anchor="middle" font-weight="400" fill="var(--_text-muted)" dy="3.8499999999999996">Attacker tries to use stolen refresh_token_1</text>
</g>
<g class="actor" data-id="C" data-label="Client" data-type="participant">
  <rect x="30" y="30" width="80" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="70" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">Client</text>
</g>
<g class="actor" data-id="AS" data-label="Authorization Server" data-type="participant">
  <rect x="150" y="30" width="157.697" height="40" rx="4" ry="4" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="228.8485" y="50" font-size="13" text-anchor="middle" font-weight="500" fill="var(--_text)" dy="4.55">Authorization Server</text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Token lifecycle with refresh rotation</figcaption>
</div>
<p class="mb-4 font-light font-serif">The critical property: if an attacker uses a previously rotated refresh token, the authorization server detects the reuse, revokes the entire token family (all refresh tokens issued to that session), and forces re-authentication. This turns a stolen refresh token from a persistent compromise into a detectable breach.</p>
<p class="mb-4 font-light font-serif">Configure a grace period of 15-30 seconds to handle network retries. If a client legitimately sends the same refresh token twice (due to a timeout and retry), the second request should succeed within the grace window. After the grace period, treat reuse as a theft signal.</p>
<h2 id="identity-provider-internals">Identity Provider Internals</h2>
<p class="mb-4 font-light font-serif">An OIDC-compliant identity provider (IdP) exposes a standard set of endpoints and publishes its configuration via a discovery document.</p>
<h3 id="discovery-document">Discovery Document</h3>
<p class="mb-4 font-light font-serif">Every OIDC provider publishes a JSON document at <code>/.well-known/openid-configuration</code> containing all endpoint URLs, supported scopes, supported grant types, signing algorithms, and token endpoint authentication methods. Clients should fetch this document at startup and cache it (with reasonable TTL) rather than hardcoding endpoint URLs.</p>
<h3 id="standard-endpoints">Standard Endpoints</h3>
<table>
  <thead>
    <tr>
      <th>Endpoint</th>
      <th>Purpose</th>
      <th>Method</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>/authorize</code></td>
      <td>Initiate authentication; return authorization code</td>
      <td>GET (browser redirect)</td>
    </tr>
    <tr>
      <td><code>/token</code></td>
      <td>Exchange code for tokens; refresh tokens</td>
      <td>POST</td>
    </tr>
    <tr>
      <td><code>/userinfo</code></td>
      <td>Retrieve user claims with access token</td>
      <td>GET/POST</td>
    </tr>
    <tr>
      <td><code>/revoke</code></td>
      <td>Revoke a refresh or access token</td>
      <td>POST</td>
    </tr>
    <tr>
      <td><code>/introspect</code></td>
      <td>Validate token and retrieve metadata (server-side)</td>
      <td>POST</td>
    </tr>
    <tr>
      <td><code>jwks_uri</code> (from discovery)</td>
      <td>Public signing keys for JWT verification</td>
      <td>GET</td>
    </tr>
  </tbody>
</table>
<h3 id="scopes-and-claims">Scopes and Claims</h3>
<p class="mb-4 font-light font-serif">Scopes control which claims appear in the ID token and the UserInfo response.</p>
<table>
  <thead>
    <tr>
      <th>Scope</th>
      <th>Claims Returned</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code>openid</code></td>
      <td><code>sub</code> (required for all OIDC requests)</td>
    </tr>
    <tr>
      <td><code>profile</code></td>
      <td><code>name</code>, <code>family_name</code>, <code>given_name</code>, <code>picture</code>, <code>locale</code>, <code>updated_at</code></td>
    </tr>
    <tr>
      <td><code>email</code></td>
      <td><code>email</code>, <code>email_verified</code></td>
    </tr>
    <tr>
      <td><code>address</code></td>
      <td><code>address</code> (structured JSON)</td>
    </tr>
    <tr>
      <td><code>phone</code></td>
      <td><code>phone_number</code>, <code>phone_number_verified</code></td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">Request only the scopes you need. Every additional scope increases the token size, expands the consent screen, and broadens the blast radius if tokens are compromised.</p>
<h2 id="multi-platform-implementation-patterns">Multi-Platform Implementation Patterns</h2>
<p class="mb-4 font-light font-serif">The authorization code flow is the same across all platforms. The redirect mechanism is not. Each platform has a different way to receive the authorization code callback, a different place to store tokens, and a different set of security constraints.</p>
<div class="mermaid-wrapper">
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 578.0629999999999 773.5" style="--bg:#ffffff;--fg:#1a1a2e;--line:#6b7280;--accent:#2563eb;--muted:#6b7280;--surface:#f3f4f6;--border:#d1d5db">
<style>
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&amp;display=swap');
  text { font-family: 'Inter', system-ui, sans-serif; }
  svg {
    /* Derived from --bg and --fg (overridable via --line, --accent, etc.) */
    --_text:          var(--fg);
    --_text-sec:      var(--muted, color-mix(in srgb, var(--fg) 60%, var(--bg)));
    --_text-muted:    var(--muted, color-mix(in srgb, var(--fg) 40%, var(--bg)));
    --_text-faint:    color-mix(in srgb, var(--fg) 25%, var(--bg));
    --_line:          var(--line, color-mix(in srgb, var(--fg) 50%, var(--bg)));
    --_arrow:         var(--accent, color-mix(in srgb, var(--fg) 85%, var(--bg)));
    --_node-fill:     var(--surface, color-mix(in srgb, var(--fg) 3%, var(--bg)));
    --_node-stroke:   var(--border, color-mix(in srgb, var(--fg) 20%, var(--bg)));
    --_group-fill:    var(--bg);
    --_group-hdr:     color-mix(in srgb, var(--fg) 5%, var(--bg));
    --_inner-stroke:  color-mix(in srgb, var(--fg) 12%, var(--bg));
    --_key-badge:     color-mix(in srgb, var(--fg) 10%, var(--bg));
  }
</style>
<defs>
  <marker id="arrowhead" markerWidth="8" markerHeight="5" refX="7" refY="2.5" orient="auto">
    <polygon points="0 0, 8 2.5, 0 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
  <marker id="arrowhead-start" markerWidth="8" markerHeight="5" refX="1" refY="2.5" orient="auto-start-reverse">
    <polygon points="8 0, 0 2.5, 8 5" fill="var(--_arrow)" stroke="var(--_arrow)" stroke-width="0.75" stroke-linejoin="round" />
  </marker>
</defs>
<g class="subgraph" data-id="Web" data-label="Web Browser">
  <rect x="271.906" y="40" width="238.45199999999994" height="195.60000000000002" rx="0" ry="0" fill="var(--_group-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <rect x="271.906" y="40" width="238.45199999999994" height="28" rx="0" ry="0" fill="var(--_group-hdr)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="283.906" y="54" font-size="12" font-weight="600" fill="var(--_text-sec)" dy="4.199999999999999">Web Browser</text>
</g>
<g class="subgraph" data-id="Desktop" data-label="Electron Desktop">
  <rect x="295.90599999999995" y="263.6" width="242.15699999999995" height="229.40000000000003" rx="0" ry="0" fill="var(--_group-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <rect x="295.90599999999995" y="263.6" width="242.15699999999995" height="28" rx="0" ry="0" fill="var(--_group-hdr)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="307.90599999999995" y="277.6" font-size="12" font-weight="600" fill="var(--_text-sec)" dy="4.199999999999999">Electron Desktop</text>
</g>
<g class="subgraph" data-id="iOS" data-label="iOS Native">
  <rect x="271.906" y="521" width="249.56699999999995" height="212.5" rx="0" ry="0" fill="var(--_group-fill)" stroke="var(--_node-stroke)" stroke-width="1" />
  <rect x="271.906" y="521" width="249.56699999999995" height="28" rx="0" ry="0" fill="var(--_group-hdr)" stroke="var(--_node-stroke)" stroke-width="1" />
  <text x="283.906" y="535" font-size="12" font-weight="600" fill="var(--_text-sec)" dy="4.199999999999999">iOS Native</text>
</g>
<polyline class="edge" data-from="AS" data-to="W1" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="code" points="160.49599999999998,419.75 172.496,419.75 172.496,192.70000000000002 303.467,192.70000000000002" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="AS" data-to="D1" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="code" points="160.49599999999998,433.20000000000005 303.467,433.20000000000005" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<polyline class="edge" data-from="AS" data-to="I1" data-style="solid" data-arrow-start="false" data-arrow-end="true" data-label="code" points="160.49599999999998,446.6500000000001 172.496,446.6500000000001 172.496,682.1500000000001 303.467,682.15" fill="none" stroke="var(--_line)" stroke-width="1" marker-end="url(#arrowhead)" />
<g class="edge-label" data-from="AS" data-to="W1" data-label="code">
  <rect x="180.49600000000004" y="176.70000000000002" width="41.41" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="201.20100000000002" y="191.85000000000002" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">code</text>
</g>
<g class="edge-label" data-from="AS" data-to="D1" data-label="code">
  <rect x="204.49599999999998" y="417.20000000000005" width="41.41" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="225.20099999999996" y="432.35" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">code</text>
</g>
<g class="edge-label" data-from="AS" data-to="I1" data-label="code">
  <rect x="180.49600000000004" y="666.1500000000001" width="41.41" height="30.3" rx="2" ry="2" fill="var(--bg)" stroke="var(--_inner-stroke)" stroke-width="1" />
  <text x="201.20100000000002" y="681.3000000000001" text-anchor="middle" font-size="11" font-weight="400" fill="var(--_text-sec)" dy="3.8499999999999996">code</text>
</g>
<g class="node" data-id="AS" data-label="Authorization
Server" data-shape="rectangle">
  <rect x="40" y="406.30000000000007" width="120.49599999999998" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="100.24799999999999" y="433.20000000000005" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="100.24799999999999" dy="-3.9000000000000012">Authorization</tspan><tspan x="100.24799999999999" dy="16.900000000000002">Server</tspan></text>
</g>
<g class="node" data-id="W1" data-label="HTTPS redirect URI
e.g. https://app.com/callback" data-shape="rectangle">
  <rect x="303.467" y="165.8" width="206.45199999999994" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="406.693" y="192.70000000000002" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="406.693" dy="-3.9000000000000012">HTTPS redirect URI</tspan><tspan x="406.693" dy="16.900000000000002">e.g. https://app.com/callback</tspan></text>
</g>
<g class="node" data-id="W2" data-label="Token storage:
Memory or httpOnly cookie" data-shape="rectangle">
  <rect x="303.467" y="84" width="197.55999999999997" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="402.24699999999996" y="110.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="402.24699999999996" dy="-3.9000000000000012">Token storage:</tspan><tspan x="402.24699999999996" dy="16.900000000000002">Memory or httpOnly cookie</tspan></text>
</g>
<g class="node" data-id="D1" data-label="Custom protocol handler
e.g. myapp://auth/callback
OR loopback redirect
http://127.0.0.1:PORT/callback" data-shape="rectangle">
  <rect x="303.467" y="389.40000000000003" width="210.15699999999995" height="87.60000000000001" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="408.54549999999995" y="433.20000000000005" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="408.54549999999995" dy="-20.8">Custom protocol handler</tspan><tspan x="408.54549999999995" dy="16.900000000000002">e.g. myapp://auth/callback</tspan><tspan x="408.54549999999995" dy="16.900000000000002">OR loopback redirect</tspan><tspan x="408.54549999999995" dy="16.900000000000002">http://127.0.0.1:PORT/callback</tspan></text>
</g>
<g class="node" data-id="D2" data-label="Token storage:
safeStorage + encrypted file" data-shape="rectangle">
  <rect x="303.467" y="307.6" width="205.71099999999996" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="406.3225" y="334.5" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="406.3225" dy="-3.9000000000000012">Token storage:</tspan><tspan x="406.3225" dy="16.900000000000002">safeStorage + encrypted file</tspan></text>
</g>
<g class="node" data-id="I1" data-label="ASWebAuthenticationSession
with private-use URI scheme
e.g. com.myapp://callback" data-shape="rectangle">
  <rect x="303.467" y="646.8" width="217.56699999999995" height="70.7" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="412.2505" y="682.15" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="412.2505" dy="-12.350000000000001">ASWebAuthenticationSession</tspan><tspan x="412.2505" dy="16.900000000000002">with private-use URI scheme</tspan><tspan x="412.2505" dy="16.900000000000002">e.g. com.myapp://callback</tspan></text>
</g>
<g class="node" data-id="I2" data-label="Token storage:
Keychain Services" data-shape="rectangle">
  <rect x="303.467" y="565" width="155.32299999999998" height="53.800000000000004" rx="0" ry="0" fill="var(--_node-fill)" stroke="var(--_node-stroke)" stroke-width="0.75" />
  <text x="381.1285" y="591.9" text-anchor="middle" font-size="13" font-weight="500" fill="var(--_text)"><tspan x="381.1285" dy="-3.9000000000000012">Token storage:</tspan><tspan x="381.1285" dy="16.900000000000002">Keychain Services</tspan></text>
</g>
</svg>
  <figcaption class="mermaid-caption text-center text-sm mt-2 italic">Platform-specific redirect and storage patterns</figcaption>
</div>
<h3 id="web-browser-https-redirect">Web Browser: HTTPS Redirect</h3>
<p class="mb-4 font-light font-serif">The simplest pattern. Register an HTTPS redirect URI (e.g., <code>https://app.example.com/auth/callback</code>). After authentication, the browser redirects to your callback URL with the authorization code as a query parameter.</p>
<p class="mb-4 font-light font-serif"><strong>Token storage:</strong> For server-rendered apps, exchange the code server-side and store tokens in an encrypted, httpOnly, secure, SameSite cookie. The token never touches JavaScript. For SPAs, store tokens in memory (a module-scoped variable). Do not use <code>localStorage</code> or <code>sessionStorage</code> for tokens. Both are accessible to any JavaScript on the page, which means any XSS vulnerability becomes a token theft vulnerability.</p>
<p class="mb-4 font-light font-serif"><strong>Session management:</strong> The server-side session (backed by the cookie) controls the user&#39;s authenticated state. When the access token expires, the server uses the refresh token to obtain a new one transparently. The user never sees a re-authentication prompt unless the refresh token itself expires.</p>
<h3 id="electron-desktop-custom-protocol-or-loopback-redirect">Electron Desktop: Custom Protocol or Loopback Redirect</h3>
<p class="mb-4 font-light font-serif">Desktop apps cannot receive HTTPS redirects because they do not run behind a web server with a registered domain. Two patterns work:</p>
<p class="mb-4 font-light font-serif"><strong>Custom protocol handler:</strong> Register a protocol scheme (e.g., <code>myapp://</code>) with the operating system. After authentication in the system browser, the authorization server redirects to <code>myapp://auth/callback?code=xxx</code>. On macOS, Electron receives this via the <code>open-url</code> event; on Windows and Linux, the URL arrives through command-line arguments on a second instance. This is cleaner but requires protocol registration during installation.</p>
<p class="mb-4 font-light font-serif"><strong>Loopback redirect:</strong> Start a temporary HTTP server on <code>127.0.0.1</code> with a random available port. Use <code>http://127.0.0.1:{port}/callback</code> as the redirect URI. After authentication, the browser redirects to localhost, the temporary server captures the code, and shuts down. RFC 8252 explicitly endorses this pattern for native apps. The random port prevents other local applications from intercepting the callback.</p>
<p class="mb-4 font-light font-serif"><strong>Token storage:</strong> Use Electron&#39;s <code>safeStorage</code> API. It encrypts data using the operating system&#39;s credential store (Keychain on macOS, DPAPI on Windows, libsecret/kwallet on Linux). Store the encrypted blob in a file via <code>electron-store</code> or Node&#39;s <code>fs</code> module. Never store tokens in plain text on disk.</p>
<div class="highlight"><pre><span></span><span class="c1">// Encrypt and store</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">encrypted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">safeStorage</span><span class="p">.</span><span class="nx">encryptString</span><span class="p">(</span><span class="nb">JSON</span><span class="p">.</span><span class="nx">stringify</span><span class="p">(</span><span class="nx">tokens</span><span class="p">));</span>
<span class="nx">fs</span><span class="p">.</span><span class="nx">writeFileSync</span><span class="p">(</span><span class="nx">tokenPath</span><span class="p">,</span><span class="w"> </span><span class="nx">encrypted</span><span class="p">);</span>

<span class="c1">// Retrieve and decrypt</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">encrypted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span><span class="p">(</span><span class="nx">tokenPath</span><span class="p">);</span>
<span class="kd">const</span><span class="w"> </span><span class="nx">tokens</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">safeStorage</span><span class="p">.</span><span class="nx">decryptString</span><span class="p">(</span><span class="nx">encrypted</span><span class="p">));</span>
</pre></div>

<h3 id="ios-native-aswebauthenticationsession-keychain">iOS Native: ASWebAuthenticationSession + Keychain</h3>
<p class="mb-4 font-light font-serif">iOS uses <code>ASWebAuthenticationSession</code> from the AuthenticationServices framework. It presents a system-managed browser sheet (sharing cookies with Safari), handles the redirect via a private-use URI scheme (e.g., <code>com.example.myapp://callback</code>), and returns the callback URL to your app.</p>
<p class="mb-4 font-light font-serif"><strong>Why ASWebAuthenticationSession:</strong> Apple strongly recommends it. Using <code>WKWebView</code> for OAuth is an App Store rejection risk because embedded web views allow the app to intercept credentials. <code>SFSafariViewController</code> was acceptable in earlier iOS versions but <code>ASWebAuthenticationSession</code> (introduced in iOS 12) is the current standard. It provides a browser session the app cannot inspect or modify, which is exactly the security property OAuth requires.</p>
<p class="mb-4 font-light font-serif"><strong>PKCE is mandatory on iOS.</strong> The authorization code travels through inter-process communication (from the browser sheet to your app). Without PKCE, a malicious app that has registered the same URI scheme could intercept the code. With PKCE, the intercepted code is useless without the verifier stored in your app&#39;s process memory.</p>
<p class="mb-4 font-light font-serif"><strong>Token storage:</strong> Use Keychain Services. The iOS Keychain provides hardware-backed encryption, access control with biometric authentication (Face ID/Touch ID), and data protection classes that control when items are accessible (e.g., only when the device is unlocked).</p>
<div class="highlight"><pre><span></span><span class="kd">let</span><span class="w"> </span><span class="nv">query</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="nb">Any</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">[</span>
<span class="w">    </span><span class="n">kSecClass</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="n">kSecClassGenericPassword</span><span class="p">,</span>
<span class="w">    </span><span class="n">kSecAttrAccount</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;refresh_token&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="n">kSecAttrService</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;com.example.myapp&quot;</span><span class="p">,</span>
<span class="w">    </span><span class="n">kSecValueData</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="n">tokenData</span><span class="p">,</span>
<span class="w">    </span><span class="n">kSecAttrAccessible</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nb">String</span><span class="p">:</span><span class="w"> </span><span class="n">kSecAttrAccessibleWhenUnlockedThisDeviceOnly</span>
<span class="p">]</span>
<span class="n">SecItemAdd</span><span class="p">(</span><span class="n">query</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">CFDictionary</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span><span class="p">)</span>
</pre></div>

<p class="mb-4 font-light font-serif">The <code>kSecAttrAccessibleWhenUnlockedThisDeviceOnly</code> attribute ensures the token is encrypted at rest, accessible only when the device is unlocked, and excluded from backups and device migration. This is a strong default for refresh tokens; apps that need background refresh or extension sharing may require a different accessibility class.</p>
<h3 id="platform-comparison">Platform Comparison</h3>
<table>
  <thead>
    <tr>
      <th>Concern</th>
      <th>Web</th>
      <th>Electron</th>
      <th>iOS</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Redirect mechanism</td>
      <td>HTTPS URL</td>
      <td>Custom protocol or loopback</td>
      <td>ASWebAuthenticationSession</td>
    </tr>
    <tr>
      <td>Browser used</td>
      <td>Same tab or popup</td>
      <td>System default browser</td>
      <td>System browser sheet</td>
    </tr>
    <tr>
      <td>Token storage</td>
      <td>httpOnly cookie or memory</td>
      <td>safeStorage (OS encryption)</td>
      <td>Keychain Services</td>
    </tr>
    <tr>
      <td>Refresh token location</td>
      <td>Server-side (cookie session)</td>
      <td>Encrypted local file</td>
      <td>Keychain</td>
    </tr>
    <tr>
      <td>MFA support</td>
      <td>Native (browser handles it)</td>
      <td>Native (system browser)</td>
      <td>Native (browser sheet)</td>
    </tr>
    <tr>
      <td>Biometric gate</td>
      <td>N/A</td>
      <td>OS-level (optional)</td>
      <td>Face ID / Touch ID (configurable)</td>
    </tr>
  </tbody>
</table>
<h2 id="session-management-architecture">Session Management Architecture</h2>
<p class="mb-4 font-light font-serif">Token expiration and session lifetime are not the same thing. A session outlives individual access tokens via refresh token renewal. The session ends when the refresh token expires, is revoked, or the user explicitly logs out.</p>
<h3 id="session-lifecycle">Session Lifecycle</h3>
<ol class="my-6 lg:mb-0 space-y-4">
<li><strong>Establishment:</strong> User completes the OIDC flow. Client receives tokens. Session begins.</li>
<li><strong>Maintenance:</strong> Access token expires every 15-60 minutes. Client uses refresh token to obtain a new access token silently. User sees no interruption.</li>
<li><strong>Termination:</strong> Refresh token expires (after hours or days, depending on policy), user clicks logout, or the server revokes the token family. Client clears all stored tokens and redirects to login.</li>
</ol>
<h3 id="logout-patterns">Logout Patterns</h3>
<p class="mb-4 font-light font-serif">OIDC defines several logout mechanisms:</p>
<table>
  <thead>
    <tr>
      <th>Pattern</th>
      <th>How It Works</th>
      <th>Use Case</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>RP-initiated logout</td>
      <td>Client redirects to IdP&#39;s <code>end_session_endpoint</code> with <code>id_token_hint</code></td>
      <td>Standard logout</td>
    </tr>
    <tr>
      <td>Front-channel logout</td>
      <td>IdP renders hidden iframes to each client&#39;s logout URL</td>
      <td>Multi-app SSO logout</td>
    </tr>
    <tr>
      <td>Back-channel logout</td>
      <td>IdP sends POST to each client&#39;s registered logout endpoint</td>
      <td>Server-side session cleanup</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif">For multi-application environments with SSO, back-channel logout is the most reliable. Front-channel logout depends on the browser loading iframes, which ad blockers and privacy settings can break. Back-channel logout is a server-to-server call that bypasses the browser entirely.</p>
<h3 id="silent-token-renewal">Silent Token Renewal</h3>
<p class="mb-4 font-light font-serif">Web applications can use hidden iframes to perform silent token renewal via <code>prompt=none</code> on the authorize endpoint. The authorization server checks the existing session (via its own cookie), issues a new authorization code without showing a login prompt, and the iframe captures the callback. This pattern fails when third-party cookies are blocked (Safari&#39;s ITP, Firefox&#39;s Enhanced Tracking Protection), which makes it unreliable in modern browsers. The recommended alternative is to use refresh tokens with rotation.</p>
<h2 id="security-threat-model">Security Threat Model</h2>
<p class="mb-4 font-light font-serif">Every production OAuth deployment faces the same attack surface. The specifics vary by implementation, but the threat categories are consistent.</p>
<table>
  <thead>
    <tr>
      <th>Attack</th>
      <th>Vector</th>
      <th>Mitigation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Authorization code interception</td>
      <td>Malicious browser extension, compromised redirect, URI scheme collision</td>
      <td>PKCE (binds code to verifier)</td>
    </tr>
    <tr>
      <td>Token theft via XSS</td>
      <td>JavaScript access to tokens in <code>localStorage</code> or <code>sessionStorage</code></td>
      <td>Store in httpOnly cookies or memory only</td>
    </tr>
    <tr>
      <td>CSRF against redirect URI</td>
      <td>Attacker initiates flow with victim&#39;s session</td>
      <td>State parameter (unique, unpredictable)</td>
    </tr>
    <tr>
      <td>Redirect URI manipulation</td>
      <td>Open redirect via path traversal or parameter pollution</td>
      <td>Exact string matching; no wildcards</td>
    </tr>
    <tr>
      <td>Refresh token theft</td>
      <td>Compromised device storage, insecure local storage</td>
      <td>Rotation + reuse detection; encrypted storage</td>
    </tr>
    <tr>
      <td>Token substitution</td>
      <td>Attacker swaps their ID token into victim&#39;s session</td>
      <td>Validate <code>aud</code>, <code>iss</code>, <code>sub</code> on every ID token</td>
    </tr>
    <tr>
      <td>Clickjacking</td>
      <td>Embedding authorization page in iframe</td>
      <td>X-Frame-Options / CSP frame-ancestors on authorize endpoint</td>
    </tr>
    <tr>
      <td>PKCE downgrade</td>
      <td>Attacker strips code_challenge from authorize request</td>
      <td>Server rejects requests without code_challenge (OAuth 2.1 mandate)</td>
    </tr>
  </tbody>
</table>
<h3 id="redirect-uri-security">Redirect URI Security</h3>
<p class="mb-4 font-light font-serif">Redirect URI validation is the single most exploited weakness in OAuth deployments. The rules are simple and nonnegotiable:</p>
<ol class="my-6 lg:mb-0 space-y-4">
<li>Register exact redirect URIs at the authorization server. No wildcards. No pattern matching.</li>
<li>The authorization server must compare the <code>redirect_uri</code> parameter using exact string matching against the registered URIs.</li>
<li>Do not allow subdirectory matching (e.g., registering <code>https://app.com/</code> should not permit <code>https://app.com/evil/path</code>).</li>
<li>Always include the <code>redirect_uri</code> parameter in the token exchange request so the server can verify it matches the original authorization request.</li>
</ol>
<p class="mb-4 font-light font-serif">Research published at ACM CCS 2023 demonstrated that the redirect URI validation guidance in OAuth RFCs is under-specified. Multiple identity providers were found vulnerable to path confusion and parameter pollution attacks because they implemented &quot;starts with&quot; matching rather than exact matching. OAuth 2.1 closes this by requiring exact string comparison.</p>
<h2 id="identity-provider-selection">Identity Provider Selection</h2>
<p class="mb-4 font-light font-serif">Choosing an identity provider is an architectural decision with long-term cost, operational, and security implications.</p>
<table>
  <thead>
    <tr>
      <th>Provider</th>
      <th>Type</th>
      <th>Free Tier</th>
      <th>Pricing Model</th>
      <th>Best For</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>AWS Cognito</td>
      <td>Managed SaaS</td>
      <td>10,000 MAU</td>
      <td>Pay per MAU ($0.0055/MAU after free tier)</td>
      <td>AWS-native workloads</td>
    </tr>
    <tr>
      <td>Auth0</td>
      <td>Managed SaaS</td>
      <td>25,000 MAU</td>
      <td>Tiered plans ($35-$150+/mo at entry)</td>
      <td>Developer experience, quick integration</td>
    </tr>
    <tr>
      <td>Okta</td>
      <td>Managed SaaS</td>
      <td>Trial only</td>
      <td>$2-6/user/month</td>
      <td>Enterprise, compliance-heavy</td>
    </tr>
    <tr>
      <td>Keycloak</td>
      <td>Self-hosted OSS</td>
      <td>Unlimited (self-hosted)</td>
      <td>Infrastructure cost only</td>
      <td>Full control, no vendor lock-in</td>
    </tr>
    <tr>
      <td>Microsoft Entra ID</td>
      <td>Managed SaaS</td>
      <td>50,000 MAU</td>
      <td>Free for basic; premium tiers available</td>
      <td>Microsoft ecosystem, B2C</td>
    </tr>
  </tbody>
</table>
<h3 id="decision-criteria">Decision Criteria</h3>
<p class="mb-4 font-light font-serif"><strong>Choose AWS Cognito</strong> when your infrastructure is already on AWS, your MAU is under 10,000 (free), and you need tight integration with API Gateway, ALB, and CloudFront. The developer experience is rough compared to Auth0, and advanced customization requires Lambda triggers. See <a href="https://charlessieg.com/articles/aws-cognito-user-authentication-architecture-deep-dive.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">AWS Cognito User Authentication: An Architecture Deep-Dive</a> for detailed Cognito architecture.</p>
<p class="mb-4 font-light font-serif"><strong>Choose Auth0</strong> when developer velocity matters more than cost optimization, you need extensive social login support, and your team wants comprehensive SDKs for every platform. Auth0&#39;s management dashboard and Rules/Actions pipeline is the best in class for customization.</p>
<p class="mb-4 font-light font-serif"><strong>Choose Keycloak</strong> when you need full control over the identity infrastructure, your compliance requirements prohibit sending authentication data to a third-party SaaS, or you want to avoid per-MAU pricing at scale. Running Keycloak reliably requires Kubernetes operational expertise and ongoing patching commitment.</p>
<p class="mb-4 font-light font-serif"><strong>Choose Okta</strong> when you are in a regulated industry (healthcare, finance, government) and need SOC 2 Type II, FedRAMP, or HIPAA BAA from your identity provider. Okta&#39;s compliance certification portfolio is the deepest of any managed provider.</p>
<h2 id="key-patterns">Key Patterns</h2>
<p class="mb-4 font-light font-serif"><strong>PKCE everywhere.</strong> No exceptions. Web apps, mobile apps, desktop apps, confidential clients, public clients. OAuth 2.1 mandates it and there is no reason to skip it on any client type.</p>
<p class="mb-4 font-light font-serif"><strong>Short access tokens, rotated refresh tokens.</strong> Set access token lifetime to 15-30 minutes. Enable refresh token rotation with reuse detection. Configure a 15-30 second grace period for network retries.</p>
<p class="mb-4 font-light font-serif"><strong>Platform-appropriate token storage.</strong> httpOnly cookies for web, safeStorage for Electron, Keychain for iOS. Never localStorage. Never plain text on disk.</p>
<p class="mb-4 font-light font-serif"><strong>Validate everything.</strong> Every ID token: signature, issuer, audience, expiration. Every state parameter. Every redirect URI via exact string matching. The security of the entire system depends on validation at each step.</p>
<p class="mb-4 font-light font-serif"><strong>Use the discovery document.</strong> Fetch <code>/.well-known/openid-configuration</code> at startup. Cache it. Let the identity provider tell you its endpoints and capabilities rather than hardcoding them.</p>
<p class="mb-4 font-light font-serif"><strong>Build to OAuth 2.1.</strong> The draft is stable. The requirements are correct. Every major provider already enforces them. Do not build new systems against OAuth 2.0&#39;s permissive defaults.</p>
<h2 id="additional-resources">Additional Resources</h2>
<ul class="my-6 lg:mb-0 space-y-4">
<li><a href="https://datatracker.ietf.org/doc/draft-ietf-oauth-v2-1/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">OAuth 2.1 Draft Specification (draft-ietf-oauth-v2-1-15)</a></li>
<li><a href="https://openid.net/specs/openid-connect-core-1_0.html" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">OpenID Connect Core 1.0 Specification</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc7636" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">RFC 7636: Proof Key for Code Exchange (PKCE)</a></li>
<li><a href="https://www.rfc-editor.org/rfc/rfc8252" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">RFC 8252: OAuth 2.0 for Native Applications</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/rfc6819" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">RFC 6819: OAuth 2.0 Threat Model and Security Considerations</a></li>
<li><a href="https://auth0.com/docs/secure/tokens/token-best-practices" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Auth0 Token Best Practices</a></li>
<li><a href="https://developer.okta.com/docs/concepts/token-lifecycles/" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Okta Token Lifecycle Reference</a></li>
<li><a href="https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Apple ASWebAuthenticationSession Documentation</a></li>
<li><a href="https://www.electronjs.org/docs/latest/api/safe-storage" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">Electron safeStorage API Documentation</a></li>
<li><a href="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics" class="text-primary-600 hover:text-primary-800 dark:text-primary-500 dark:hover:text-primary-600">OAuth 2.0 Security Best Current Practice (draft-ietf-oauth-security-topics)</a></li>
</ul>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 22, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-22-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-22-leverage-record.html</id>
    <updated>2026-03-22T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Fifty-two tasks. The heaviest single-day task count in this series. Patent claim implementation, traceability mapping, exam format overhaul, enterprise SSO, notification infrastructure, unit test generation, and a full portfolio resequencing. A launch readiness day.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Patent-to-code traceability matrix for patents H-O (175 claims mapped)</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>SAML 2.0 SP bridge for auth-service enterprise SSO</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Implement 34 patent claims across 6 applications with 25 tests</td>
      <td>40h</td>
      <td>20m</td>
      <td>1.0w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Implement exam question types + multi-section + adaptive testing across 3 repos</td>
      <td>40h</td>
      <td>22m</td>
      <td>1.0w</td>
      <td>109.1x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Client parity + OIDC integration + exam format overhaul (5 question types + sections + adaptive)</td>
      <td>60h</td>
      <td>35m</td>
      <td>1.5w</td>
      <td>102.9x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Patent-to-code traceability matrix for patents A-G (147 claims mapped)</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Implement 30 patent claims across 6 applications with 48 tests</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Generate exam tips for 72 certification exams</td>
      <td>8h</td>
      <td>6m</td>
      <td>0.20w</td>
      <td>80.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Implement 22 patent claims for activity synthesis subsystem + tests</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Implement 24 patent claims for cross-domain intelligence engine + tests</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>EventBridge scheduler + SAML 2.0 bridge</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Full ecosystem launch readiness audit (4 parallel agents)</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Write launch execution plan (3-week sprint + launch week day-by-day)</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Write 69 unit tests for interaction subsystem</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td>60.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>EventBridge notification scheduler implementation</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Comprehensive unit tests for API subsystem (104 tests)</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Write 116 unit tests for origin subsystem</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Social login backend (Apple/Google/Facebook) + lab JSON serving</td>
      <td>12h</td>
      <td>15m</td>
      <td>0.30w</td>
      <td>48.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Execute portfolio resequencing A-O (15 dirs + 15 specs + 119 diagrams)</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Client feature parity: Electron catalog + iOS cross-domain features</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Implement Twilio SMS, APNs, FCM push adapters for notification service</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Write unit tests for viz/strategy/operations subsystems (105 tests)</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Create portfolio document generator script (714 pages)</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Fix patent portfolio letter-to-title mappings across 6 docs</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Compile final Patent-to-Code Traceability Matrix (A-O)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Integrate OIDC auth into 2 web apps</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Content profile and manifest system for domain packages</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Generate domain status report and roadmap</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Reorganize 845 domain specs into 9 grouped categories</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Fix 9 cross-reference gaps between patent portfolio and architecture docs</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Fix cross-reference gaps in 7 architecture docs</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Update Testing Strategy doc</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Reorder patent cluster descriptions to follow data flow</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Sync CLAUDE.md/AGENTS.md checklist + FAQ update</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Add free_tier field to 67 domain specs + reorganize into 12 vendor directories</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Comprehensive consistency analysis of novel (98 checks)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Create Platform Architecture Tiers document</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Fix PDF generation defects + correct claim counts</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Domain Specification Guide v2.0 update</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Fix contrastive pair amplification pipeline</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Resequence internal references across 15 patent applications (119 diagram headers)</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Create batch synthesis script for 6 coding domain specs</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Add free_tier boolean to domain spec data model (6 files)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Sync 142 domain packages (15 new + 2 uncommitted + 2 updated)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Fix auth-client and activities-react build issues</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>Move .generated/ folder to repo root and update scripts/docs</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Move and rename 3 docs + update READMEs</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>48</td>
      <td>Remove stale ADS references + fix remaining refs</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td>15.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>49</td>
      <td>Add 3 dependent claims to patent application (cross-modality proficiency)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>50</td>
      <td>Add 3 dependent claims to patent application (rubric errors, adaptive TTS)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>51</td>
      <td>Update ecosystem inventory patent section</td>
      <td>0.5h</td>
      <td>3m</td>
      <td>0.013w</td>
      <td>10.0x</td>
      <td>15.0x</td>
    </tr>
    <tr>
      <td>52</td>
      <td>Patent portfolio resequencing: update all supporting documents</td>
      <td>4h</td>
      <td>35m</td>
      <td>0.10w</td>
      <td>6.9x</td>
      <td>48.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>52</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>618h (77.2 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>713m (11.9h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>194m (3.2h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~4,533,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>52.0x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>191.1x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">This was a launch preparation day. Fifty-two tasks, the highest single-day count in 28 days of tracking, focused on closing the gap between a patent portfolio and its codebase, then preparing everything for a product launch.</p>
<p class="mb-4 font-light font-serif">The patent-to-code traceability matrix at 200x was the day&#39;s peak. Mapping 175 patent claims to specific engine code locations in 12 minutes. A patent analyst doing that by hand would spend a full work week cross-referencing specification language against function signatures and class hierarchies.</p>
<p class="mb-4 font-light font-serif">Patent claim implementation dominated the upper half of the board. Four batches of claims (110 total) were implemented across 12 patent applications, each batch producing the code, the tests, and the documentation updates together. These ranged from 80x to 120x. The pattern is consistent: patent claims describe algorithms and data structures precisely enough that the AI can translate them directly into working implementations.</p>
<p class="mb-4 font-light font-serif">The exam format overhaul at 109x touched three repositories to add five new question types, multi-section exam support, and adaptive testing algorithms. The SAML 2.0 bridge at 120x delivered a complete enterprise SSO implementation (service provider metadata, assertion parsing, attribute mapping, session management) in 12 minutes.</p>
<p class="mb-4 font-light font-serif">Unit test generation was a recurring theme: 394 tests written across four subsystems at 32-60x leverage. The AI reads the production code, understands the interfaces and edge cases, and generates comprehensive test suites. A developer writing 394 well-structured unit tests by hand would need two to three full days.</p>
<p class="mb-4 font-light font-serif">The portfolio resequencing at the bottom of the list (6.9x) was the most tedious task: updating cross-references across dozens of documents after changing the ordering scheme for 15 patent applications. Lots of reading, lots of small edits, lots of validation. The kind of work where AI leverage compresses toward its floor.</p>
<p class="mb-4 font-light font-serif">Three and a quarter hours of supervisory time produced 77 working days of output. Day 28.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 21, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-21-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-21-leverage-record.html</id>
    <updated>2026-03-21T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-nine tasks. A big architecture and patent day on the engineering side, with novel editing and documentation sync rounding out the mix. The architecture-to-code gap closure at 288x and domain spec generation at 240x drove the top of the board. Two long-running compute tasks (tribunal validation and synthesis generation) dragged the weighted average down to 20.9x despite the high-leverage work above them.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Close all gaps between architecture docs and engine code (4 phases)</td>
      <td>120h</td>
      <td>25m</td>
      <td>3.0w</td>
      <td>288.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Create 9 domain specification JSON files (PRINCE2, ServiceNow, CFA, Confluent, Docker, HubSpot)</td>
      <td>48h</td>
      <td>12m</td>
      <td>1.2w</td>
      <td>240.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Implement Scenario Assessment Engine (11 files, 3,420 LOC, 52 tests)</td>
      <td>24h</td>
      <td>8m</td>
      <td>0.60w</td>
      <td>180.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Implementation plan + 9 domain specs + domain roadmap tracking</td>
      <td>60h</td>
      <td>30m</td>
      <td>1.5w</td>
      <td>120.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Write patent application specification + 8 Mermaid diagrams</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Patent application + embodiments to 6 existing apps + 27 portfolio docs</td>
      <td>60h</td>
      <td>45m</td>
      <td>1.5w</td>
      <td>80.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Update 4 architecture docs with 20 undocumented features</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Cross-Domain Intelligence Engine (8 files, 2,072 LOC, 34 tests)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Integrate scenario assessment into 6 architecture docs</td>
      <td>24h</td>
      <td>25m</td>
      <td>0.60w</td>
      <td>57.6x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Update 4 marketing sites and create 15 provider pages (52 files)</td>
      <td>24h</td>
      <td>35m</td>
      <td>0.60w</td>
      <td>41.1x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Implement 5 engine files + 5 test files for embodied subsystems</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Implementation plan document (12 sections, 1,168 lines)</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Create 15 provider pages + update index + components for certification website</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Create comprehensive domain tracking roadmap document</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Update certification website for product restructure</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Update AP website: pricing to standalone product across 13 files</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Add LLM embodiment paragraphs to 6 patent applications</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Novel scene fixes: mode switch explanation + character dramatization</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Update patent portfolio docs for new application (14 files)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Update patent portfolio metadata (15 apps across 20+ files)</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Update AI website for 8-product-line structure across 11 files</td>
      <td>4h</td>
      <td>15m</td>
      <td>0.10w</td>
      <td>16.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Update patent filing cost and valuation docs</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Build and launch priority synthesis batch for 48 certification domains</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Novel craft fixes: reduce repetitive cadence + roughen character voices</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Comprehensive background doc consistency audit for novel</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Novel editing: compress denouement + cut narrator codas + remove parentheses across 22 chapters</td>
      <td>3h</td>
      <td>18m</td>
      <td>0.075w</td>
      <td>10.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Sync chapter synopsis with manuscript (13 chapters updated)</td>
      <td>3h</td>
      <td>25m</td>
      <td>0.075w</td>
      <td>7.2x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Certification synthesis and question bank generation (10,460 MCQs)</td>
      <td>8h</td>
      <td>90m</td>
      <td>0.20w</td>
      <td>5.3x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Tribunal validation repair for 17 low-validation domains (6,824 fragments)</td>
      <td>8h</td>
      <td>960m</td>
      <td>0.20w</td>
      <td>0.5x</td>
      <td>160.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>29</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>530.5h (66.3 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>1,526m (25.4h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>119m (2.0h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~3,247,500</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>20.9x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>267.5x</td>
    </tr>
  </tbody>
</table>
<h3 id="by-workstream">By Workstream</h3>
<table>
  <thead>
    <tr>
      <th>Workstream</th>
      <th>Tasks</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Leverage</th>
      <th>Sup. Leverage</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Engineering</td>
      <td>24</td>
      <td>509.5h</td>
      <td>1,414m</td>
      <td>21.6x</td>
      <td>325.2x</td>
    </tr>
    <tr>
      <td>Novel</td>
      <td>5</td>
      <td>21h</td>
      <td>112m</td>
      <td>11.2x</td>
      <td>50.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">Two long-running compute jobs consumed 1,050 of the day&#39;s 1,526 Claude minutes and pulled the weighted average to 20.9x. The tribunal validation repair (960 minutes, 0.5x) ran an AI quality gate across 6,824 content fragments with multi-model consensus scoring. The synthesis generation (90 minutes, 5.3x) produced 10,460 multiple-choice questions. Both tasks have high supervisory leverage (160x each) because they require only a brief prompt to kick off hours of autonomous processing.</p>
<p class="mb-4 font-light font-serif">Without those two tasks, the remaining 27 tasks averaged 56.5x leverage across 466 Claude minutes. That is more representative of the actual work profile.</p>
<p class="mb-4 font-light font-serif">The architecture gap closure at 288x was the day&#39;s standout: four sequential phases that updated documentation, built two new engine subsystems (Cross-Domain Intelligence Engine at 2,072 LOC and Scenario Assessment Engine at 3,420 LOC with 52 tests), and reconciled everything against the existing codebase. A senior architect doing that work by hand would spend three weeks reading code, updating docs, and writing the new subsystems.</p>
<p class="mb-4 font-light font-serif">Domain specification generation continues to be a leverage machine at 240x: nine structured JSON files with 60-66 leaf goals each across six different certification vendors, produced in 12 minutes.</p>
<p class="mb-4 font-light font-serif">Patent work clustered at 80-96x. The new application required a full specification, 8 figures, and cross-pollination of LLM embodiment language into 6 existing applications. The portfolio metadata and cost updates that followed were lower leverage (15-20x) because they are cross-referencing work rather than generation.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 267.5x means two hours of my time produced over 66 working days of output. Even with the compute-heavy outliers dragging down the task-level leverage, the ratio of supervisory effort to total output remains high.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 20, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-20-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-20-leverage-record.html</id>
    <updated>2026-03-20T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Eleven tasks across patent drafting, novel scene writing, worldbuilding assets, and documentation sync. The patent application at 160x carried the day. The rest was a mix of creative writing and content management for a novel in final preparation.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Draft patent application (full spec + 20 claims + 8 figures + diagrams + portfolio doc updates)</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Write fictional academic research paper for novel worldbuilding</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Write four novel scenes (hospital, origin, day-to-day, diner) matching existing voice</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Write fictional provisional patent application for novel worldbuilding</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Create careers and investors pages for fictional company website plus nav updates</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Update patent portfolio docs for new application (numeric counts, figures, claims, clusters)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Write three novel scenes (character motivation + phone call + woodshop) and insert into chapters</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Sync all background docs with current novel state (16 files updated)</td>
      <td>6h</td>
      <td>20m</td>
      <td>0.15w</td>
      <td>18.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Add research page to fictional company website with patent and paper content</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Update comparative literary analysis to reflect current novel state</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Restructure fictional company research section into 3 pages</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>11</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>162h (20.2 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>153m (2.5h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>45m</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~1,030,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>63.5x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>216.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The patent application dominated at 160x: a full specification with 20 claims, 8 figures, supporting diagrams, and updates to portfolio documentation, all delivered in 45 minutes. A patent attorney would bill three weeks for that scope.</p>
<p class="mb-4 font-light font-serif">The novel scene writing tasks at 20-40x are interesting because they involve matching an existing authorial voice across a 66,000-word manuscript. Writing four new scenes (40x) was higher leverage than writing three and inserting them into existing chapters (20x) because the insertion work required reading surrounding context and ensuring continuity with adjacent scenes.</p>
<p class="mb-4 font-light font-serif">The worldbuilding assets (fictional patent application and academic paper) at 30-45x produced documents that exist as props within the novel&#39;s universe. These are fully structured technical documents that a reader could examine and find internally consistent. The academic paper at 45x was faster because it followed a rigid format (abstract, methodology, results, discussion). The patent at 30x took longer because patent language requires more careful structural construction.</p>
<p class="mb-4 font-light font-serif">Background documentation sync at 18x was the day&#39;s maintenance task: updating 16 character profiles, timeline documents, outlines, and query materials to reflect the current state of a manuscript that has changed substantially over the past week. Reading comprehension work, not generation.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 19, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-19-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-19-leverage-record.html</id>
    <updated>2026-03-19T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">A light day. Six tasks, mostly cross-platform feature syncing and domain specification writing. The last day of spring break, wrapping up loose ends before heading home.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cross-platform sync: electron endpoints + study plan polish + iOS dashboard + daily rings + 6 coding domain specs</td>
      <td>40h</td>
      <td>30m</td>
      <td>1.0w</td>
      <td>80.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Create 6 coding domain specs (Python, JS/TS, DSA, SQL, Git, Linux) + update domain catalog</td>
      <td>16h</td>
      <td>15m</td>
      <td>0.40w</td>
      <td>64.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Sync engine endpoints + study plan polish from web to electron</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>iOS dashboard 3-section redesign + daily rings persistence</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Create image generation prompts for 16 characters + 2 locations + 3 book covers</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Create novel landing site spec + company cross-references + spoiler stripping</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>6</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>85h (10.6 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>105m (1.8h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>26m</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~867,500</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>48.6x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>196.2x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The cross-platform sync task at 80x carried most of the weight. Porting features from the web client to electron and iOS, writing 6 coding domain specs, and wiring up daily activity rings across all three platforms in a single 30-minute session. A developer would spend a full work week on that scope.</p>
<p class="mb-4 font-light font-serif">The novel-related tasks were pre-production work: generating detailed image prompts for character illustrations and book covers, and writing the specification for the novel&#39;s landing site with cross-references to the fictional company websites. Lower leverage (20-22x) because these are creative specification tasks that require more judgment than mechanical output.</p>
<p class="mb-4 font-light font-serif">This is the 25th day of leverage tracking. Twenty-six minutes of supervisory effort produced ten and a half days of engineering output on a wind-down day.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 18, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-18-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-18-leverage-record.html</id>
    <updated>2026-03-18T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty-two tasks, mostly editorial. The bulk of the day went into preparing a novel manuscript for publication: em dash reduction, copy editing, line polishing, structural fixes, foreshadowing passes, and a comprehensive publication readiness checklist. The engineering side contributed lab generation, a dashboard redesign, and cross-platform feature work. The weighted average leverage factor dropped to 19.2x, the lowest daily average I have recorded in this series. Editorial polish is where AI leverage compresses toward its floor.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Generate 94 lab definitions for 15 certification domains</td>
      <td>45h</td>
      <td>20m</td>
      <td>1.1w</td>
      <td>135.0x</td>
      <td>540.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Wire web app to four engine endpoints (study plan, activity credit, cross-domain, micro challenge)</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Add hero banner to electron (20 screens) and iOS (6 views + component)</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Dashboard redesign: 8-step decomposition + new features across web and electron</td>
      <td>24h</td>
      <td>45m</td>
      <td>0.60w</td>
      <td>32.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Convert console simulator to library mode and embed in web and electron</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Implement 3 study plan polish features in web app</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Structural revision: foreshadowing + compression + arc fixes + friction (4 parallel agents)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Create comprehensive publication readiness checklist for novel</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Implement micro-challenge API endpoint in notification service</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Integration pass: pacing breaks + protective breadcrumb + moral friction + character arc</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Seed foreshadowing across 5 chapters</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Line-edit pass: reduce 3 repetitive phrases across 32 chapters</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Final prose pass: cut and sharpen 4 chapters</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Sync 17 domain packages + 108 question banks + audit report</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Decompose dashboard CSS monolith into per-component CSS Modules</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Rewrite two key scenes for pacing and consistency</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Structural fixes: detection scene + character swap + pacing + continuity</td>
      <td>3h</td>
      <td>10m</td>
      <td>0.075w</td>
      <td>18.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Compile complete character registry from 50+ source files</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>AI detection analysis of 34 chapters via Sapling API</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Three structural fixes: character arc + political resistance + callback</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Compress explanation scenes and add authentication beat across 4 chapters</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Line-level polish on 3 chapters: voice separation + cadence + tightening</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Line-level polish on 3 chapters: tighten exposition, vary cadence, sharpen voice</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Final prose pass on 3 chapters: cut scaffolding and sharpen sentences</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Fix all naming collisions across novel (8 character renames across 15+ files)</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>P1/P2 fixes: geography + density reduction + sensitivity + checklist sync</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Break up chapter exposition + fix continuity error</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Em dash reduction across 33 chapters (637 replacements)</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Reduced overused words across 33 chapters</td>
      <td>2h</td>
      <td>12m</td>
      <td>0.050w</td>
      <td>10.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Copy-edit pass: cut repetitive patterns plus line fixes across 33 chapters</td>
      <td>4h</td>
      <td>25m</td>
      <td>0.10w</td>
      <td>9.6x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Reduce em dash density in 3 chapter files</td>
      <td>0.5h</td>
      <td>4m</td>
      <td>0.013w</td>
      <td>7.5x</td>
      <td>10.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Generate 15 missing question banks (70K questions) + sync</td>
      <td>6h</td>
      <td>196m</td>
      <td>0.15w</td>
      <td>1.8x</td>
      <td>120.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>32</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>198.5h (24.8 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>621m (10.3h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>120m (2.0h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~2,663,500</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>19.2x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>99.2x</td>
    </tr>
  </tbody>
</table>
<h3 id="by-workstream">By Workstream</h3>
<table>
  <thead>
    <tr>
      <th>Workstream</th>
      <th>Tasks</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Leverage</th>
      <th>Sup. Leverage</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Engineering</td>
      <td>10</td>
      <td>129h</td>
      <td>357m</td>
      <td>21.7x</td>
      <td>203.7x</td>
    </tr>
    <tr>
      <td>Novel</td>
      <td>22</td>
      <td>69.5h</td>
      <td>264m</td>
      <td>15.8x</td>
      <td>50.9x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">This was a polish day. Twenty-two of the 32 tasks involved preparing a novel manuscript for publication: em dash reduction (637 replacements across 33 chapters), copy editing, line-level prose polishing, structural fixes, character naming collisions, and foreshadowing. These tasks sit at the leverage floor for AI-assisted work. Each one requires reading large portions of the manuscript, making judgment calls about voice and pacing, and executing dozens of small edits that must preserve continuity. The leverage range for this work was 7.5x to 30x, with most tasks clustering around 15x.</p>
<p class="mb-4 font-light font-serif">The question bank generation task at 1.8x is an outlier that dragged the weighted average down. Generating 70,000 questions across 15 domains took 196 minutes of Claude wall-clock time. The human-equivalent estimate of 6 hours is conservative for the volume, but the sheer compute time on the AI side compressed the ratio. Without that single task, the daily weighted average would be 27.6x.</p>
<p class="mb-4 font-light font-serif">The engineering highlights were lab generation at 135x (94 labs across 15 certification domains in 20 minutes) and the dashboard redesign at 32x (24 human-hours of UI decomposition and feature work delivered in 45 minutes). The console simulator conversion to library mode at 30x was a clean architectural task: rebundling a standalone React app as an embeddable library and wiring it into two host applications.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 99.2x means two hours of prompt-writing produced nearly 25 working days of output. Even on a low-leverage polish day, the ratio of supervisory effort to output remains striking.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 17, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-17-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-17-leverage-record.html</id>
    <updated>2026-03-17T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Fifty-one tasks across two major workstreams: product engineering and a novel manuscript revision. The engineering side built an admin command center from scratch, stood up a notification service, implemented OIDC auth across three platforms, and continued generating domain specifications and lab definitions at scale. The novel side took a 92K-word manuscript through multiple structural revision passes down to 68K words, then produced a full screenplay adaptation. Happy St. Patrick&#39;s Day.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Admin command center implementation (109 files, 12,951 LOC, 10 dashboards)</td>
      <td>120h</td>
      <td>35m</td>
      <td>3.0w</td>
      <td>205.7x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Generate 96 lab JSON definitions across 15 domains</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Novel 5-pass revision: structural cuts + character deepening + ending compression + prose polish (80K to 72K words)</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Novel structural friction + prose polish across multiple chapters</td>
      <td>80h</td>
      <td>30m</td>
      <td>2.0w</td>
      <td>160.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Write 9 certification domain spec JSONs (476 leaf goals)</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Write 8 free-tier domain specs (web frameworks, DevOps, algorithms)</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Novel second revision pass: 8 chapter cuts + voice + character calibration (72K to 69K)</td>
      <td>40h</td>
      <td>20m</td>
      <td>1.0w</td>
      <td>120.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Build notification service: 53 files (FastAPI with templates, webhooks, scheduler)</td>
      <td>24h</td>
      <td>12m</td>
      <td>0.60w</td>
      <td>120.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Notification service from scratch: 56 files, 5,899 LOC, 7 DB tables, 20 templates</td>
      <td>80h</td>
      <td>40m</td>
      <td>2.0w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Complete screenplay adaptation: 6-episode limited series with cast recommendations</td>
      <td>80h</td>
      <td>45m</td>
      <td>2.0w</td>
      <td>106.7x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Novel finishing pass: voice separation + calibration + connective tissue + trims</td>
      <td>20h</td>
      <td>12m</td>
      <td>0.50w</td>
      <td>100.0x</td>
      <td>600.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Write 9 certification domain spec JSONs (infrastructure and containers)</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Admin command center detailed design document (2,634-line technical spec)</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Novel final balancing pass: cut explanations + restore emotional bridges (69K to 68K)</td>
      <td>24h</td>
      <td>15m</td>
      <td>0.60w</td>
      <td>96.0x</td>
      <td>720.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Write 7 IaC domain specification JSONs (361 leaf goals)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Admin SVG chart component library (14 files)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Implement 14 admin page components with CSS Modules and dark mode</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Add goal taxonomy mappings to 1,053 lab JSON definition files</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Notification service technical design document</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Build OIDC Provider backend (models, service, router, migration, seed)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Complete ecosystem inventory: 38 repos catalogued with LOC breakdowns</td>
      <td>16h</td>
      <td>20m</td>
      <td>0.40w</td>
      <td>48.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Create OIDC auth client library (8 files)</td>
      <td>6h</td>
      <td>8m</td>
      <td>0.15w</td>
      <td>45.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Convert console simulator from static JSON to dynamic loading</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Admin 14 page components</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Write 8 UI component files for admin dashboard</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Integrate OIDC auth into electron (custom protocol + secure storage + auth gate)</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Write complete chapter synopsis for 33-chapter novel</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Create 4 fictional company website specifications for novel</td>
      <td>12h</td>
      <td>18m</td>
      <td>0.30w</td>
      <td>40.0x</td>
      <td>144.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Integrate OIDC auth into iOS (native auth session + PKCE + Keychain)</td>
      <td>10h</td>
      <td>18m</td>
      <td>0.25w</td>
      <td>33.3x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Admin shared UI components (13 components, 23 files)</td>
      <td>8h</td>
      <td>15m</td>
      <td>0.20w</td>
      <td>32.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Admin stores and WebSocket layer (10 files)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Admin sound system + API client extensions (6 files)</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Integrate OIDC auth into web app replacing demo auth</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Update auth service OAuth flow and notification service integration</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Create 11 dashboard files for electron adapted from web</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td>30.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>36</td>
      <td>Add 4 REST API endpoints with Pydantic models</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>37</td>
      <td>Convert 16 lab files from TypeScript to Python</td>
      <td>2h</td>
      <td>5m</td>
      <td>0.050w</td>
      <td>24.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>38</td>
      <td>Update business plan and marketing plan for product line restructure</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>39</td>
      <td>Create missing admin page components (8 files)</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>40</td>
      <td>Terminology cleanup + daily rings + dashboard redesign across clients</td>
      <td>16h</td>
      <td>45m</td>
      <td>0.40w</td>
      <td>21.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>41</td>
      <td>Update 4 business docs for consumer restructure (tiered pricing)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>42</td>
      <td>Update business planning docs for product-line restructure with tiered pricing</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>43</td>
      <td>Retrofit 8 screens with hero banner component in web app</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>44</td>
      <td>Reduce word overuse across 35-chapter novel (67 to 15 instances)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>45</td>
      <td>Sync dashboard redesign from web to electron</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>46</td>
      <td>Rewrite electron dashboard as orchestrator with 7+ sub-components</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>47</td>
      <td>Update 3 pitch decks with product restructure and revenue recalculations</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>48</td>
      <td>Prose polish: intensifier reduction and explanation cuts across manuscript</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>49</td>
      <td>Eliminate repetitive prose patterns across 13 novel chapters (29 instances)</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>36.0x</td>
    </tr>
    <tr>
      <td>50</td>
      <td>Chapter synopsis document (33 chapters read and summarized)</td>
      <td>6h</td>
      <td>25m</td>
      <td>0.15w</td>
      <td>14.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>51</td>
      <td>Dashboard three-section redesign (readiness + study plan + activities grid)</td>
      <td>4h</td>
      <td>18m</td>
      <td>0.10w</td>
      <td>13.3x</td>
      <td>80.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>51</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>1,144h (143.0 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>885m (14.8h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>211m (3.5h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~6,171,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>77.6x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>325.3x</td>
    </tr>
  </tbody>
</table>
<h3 id="by-workstream">By Workstream</h3>
<table>
  <thead>
    <tr>
      <th>Workstream</th>
      <th>Tasks</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Leverage</th>
      <th>Sup. Leverage</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Engineering</td>
      <td>39</td>
      <td>745h</td>
      <td>631m</td>
      <td>70.8x</td>
      <td>279.4x</td>
    </tr>
    <tr>
      <td>Novel</td>
      <td>12</td>
      <td>399h</td>
      <td>254m</td>
      <td>94.3x</td>
      <td>469.4x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The admin command center at 205.7x is the day&#39;s standout. 109 files, nearly 13,000 lines of code, 10 dashboards, 8 chart components, 13 shared UI components, WebSocket real-time data, a sound system, and full routing. Delivered in 35 minutes. A front-end team would spend three weeks on that, and they would still be arguing about the state management pattern.</p>
<p class="mb-4 font-light font-serif">The novel work produced the more interesting leverage story. Taking a manuscript from 80K to 68K words through four successive revision passes (structural cuts, character deepening, voice calibration, final balancing) averaged 94.3x leverage. Each pass required reading the entire manuscript, understanding character arcs and thematic threads, then making dozens of targeted edits that preserved continuity. The 5-pass revision at 160x and the structural friction pass at 160x were the heaviest lifts. A developmental editor would spend a month on that scope of work.</p>
<p class="mb-4 font-light font-serif">The screenplay adaptation at 106.7x is a new category entirely. Converting a 33-chapter novel into a 6-episode limited series with cast recommendations required understanding the source material deeply enough to restructure it for a different medium. Forty-five minutes versus two weeks of a screenwriter&#39;s time.</p>
<p class="mb-4 font-light font-serif">The notification service went from nothing to a fully functional FastAPI application with 56 files, 7 database tables, 20 email templates, a webhook system, a scheduler, and full test coverage. Two tasks, 52 minutes total, 120x leverage on each. OIDC auth was integrated across web, electron, and iOS in under an hour combined: three platforms, three different auth patterns (browser redirect, custom protocol with secure storage, native ASWebAuthenticationSession with PKCE).</p>
<p class="mb-4 font-light font-serif">Domain spec and lab generation continued to be the factory floor: 96 labs across 15 domains, 33 domain specs with over 1,200 leaf goals, and taxonomy mappings added to 1,053 existing lab files. These are the tasks where AI leverage is at its most mechanical and its most absurd. A curriculum developer writing 96 lab definitions would need three weeks. The AI needed 45 minutes.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 325.3x means that for every minute I spent writing prompts, I received 5.4 hours of human-equivalent output. Three and a half hours of my time on a Tuesday produced over seven months of full-time engineering and editorial work.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 16, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-16-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-16-leverage-record.html</id>
    <updated>2026-03-16T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-one tasks split between two very different workstreams: a full editorial pass on a 92,000-word novel manuscript and continued buildout of an interactive lab platform. Spring break, but I carved out a full day at the keyboard. The novel work alone would have taken a human editor weeks. The lab generation continued at its usual blistering pace.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Generate 245 certification lab JSON definitions (11 certifications)</td>
      <td>40h</td>
      <td>12m</td>
      <td>1.0w</td>
      <td>200.0x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Generate 295 certification lab JSON definitions (14 certifications)</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Add code lab simulator with browser-based execution engine and IDE UI</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Full novel consistency review (35 chapters vs. background docs) plus 30+ targeted fixes across 12 files</td>
      <td>80h</td>
      <td>55m</td>
      <td>2.0w</td>
      <td>87.3x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Novel subplot implementation: 5 new interlude chapters + subplot beats woven across 12 existing chapters + background doc updates</td>
      <td>120h</td>
      <td>90m</td>
      <td>3.0w</td>
      <td>80.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Expand interactive labs from 66 to 125 across 35 educational domains</td>
      <td>60h</td>
      <td>45m</td>
      <td>1.5w</td>
      <td>80.0x</td>
      <td>1800.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Master marketing reference document compiled from 12+ planning docs and full codebase</td>
      <td>40h</td>
      <td>35m</td>
      <td>1.0w</td>
      <td>68.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Full literary critique: read all 35 files and produced 12,000-word detailed analysis</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Write five interlude chapters (~5,700 words)</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Upgrade 17 build tool configs across monorepo</td>
      <td>1.5h</td>
      <td>3m</td>
      <td>0.037w</td>
      <td>30.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Fix 13 factual errors across 12 novel chapter files</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Renumber all chapter headings and cross-references in 2,500-line outline after restructuring</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Character voice differentiation pass: 3 characters across 12 chapters</td>
      <td>6h</td>
      <td>18m</td>
      <td>0.15w</td>
      <td>20.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Novel prose repetition analysis: full manuscript read and pattern analysis across 35 files</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Merge final two chapters into single closing chapter</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Prose repetition polish pass on 11 chapters: 41 targeted edits across 14 pattern categories</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Prose repetition polish pass on chapters 10-19: 12 pattern categories across 10 chapters</td>
      <td>3h</td>
      <td>12m</td>
      <td>0.075w</td>
      <td>15.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Character voice differentiation: 2 characters across 13 chapters</td>
      <td>6h</td>
      <td>25m</td>
      <td>0.15w</td>
      <td>14.4x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Cross-document consistency audit and fixes across 56 background docs + 19 chapters</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Pacing analysis of 92K-word novel: full read and 14-point structural edit plan</td>
      <td>8h</td>
      <td>45m</td>
      <td>0.20w</td>
      <td>10.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Review chapters 7-14 for factual inconsistencies against background docs</td>
      <td>3h</td>
      <td>25m</td>
      <td>0.075w</td>
      <td>7.2x</td>
      <td>60.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>21</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>560.5h (70.1 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>571m (9.5h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>85m (1.4h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~4,087,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>58.9x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>395.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">Two distinct leverage profiles emerged. The certification lab generation tasks hit 192x and 200x because they are pure structured content: read a spec, emit JSON definitions that follow an established schema. No ambiguity, no judgment calls, just volume. A human writing 540 lab definitions by hand would lose their mind long before they finished.</p>
<p class="mb-4 font-light font-serif">The novel editing work was a different animal. Twelve of the 21 tasks involved a 92,000-word manuscript: consistency reviews, literary critique, subplot implementation, prose polishing, character voice differentiation, pacing analysis. These tasks require reading the entire manuscript (or large portions of it) before making any changes. The leverage factors ranged from 7.2x to 87.3x, with the full consistency review and subplot implementation at the top. The subplot task at 80x was particularly impressive: it involved writing five new interlude chapters, weaving subplot beats across twelve existing chapters, and updating background documentation, all while maintaining continuity with the existing 35-chapter manuscript. A developmental editor would spend three weeks on that.</p>
<p class="mb-4 font-light font-serif">The lowest factor was 7.2x for reviewing seven chapters against background documents for factual inconsistencies. This is close reading work where the AI has to cross-reference technical details against source material and flag discrepancies. More reading than writing, and the reading cannot be shortcut.</p>
<p class="mb-4 font-light font-serif">The code lab simulator at 96x stands out among the engineering tasks. Building a browser-based code execution environment with an IDE interface in 25 minutes is the kind of thing that makes traditional project estimation feel quaint.</p>
<p class="mb-4 font-light font-serif">Supervisory leverage of 395.6x: 85 minutes of my time directing work that would take a team of editors and engineers over three months to produce.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 15, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-15-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-15-leverage-record.html</id>
    <updated>2026-03-15T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Two tasks on a spring break Saturday. I carved out about an hour and a half of computer time to get the content synthesis pipeline running and generate interactive labs for the free tier. Minimal supervisory effort: eight minutes of prompting produced a week and a half of human-equivalent output.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Generate 66 interactive labs across 35 educational domains</td>
      <td>40h</td>
      <td>35m</td>
      <td>1.0w</td>
      <td>68.6x</td>
      <td>800.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Set up content synthesis pipeline and synthesize 35 educational domains (environment fixes + batch processing + quality review + lesson generation)</td>
      <td>20h</td>
      <td>50m</td>
      <td>0.50w</td>
      <td>24.0x</td>
      <td>240.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>2</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>60h (7.5 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>85m (1.4h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>8m</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~595,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>42.4x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>450.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The lab generation task at 68.6x carried most of the leverage. Once the domain specifications and lab framework exist, generating 66 labs across 35 domains is pure content stamping. The AI reads each domain&#39;s goal hierarchy and produces labs that exercise the leaf nodes. Three minutes of prompting, 35 minutes of execution, and the result would take a curriculum developer a full work week.</p>
<p class="mb-4 font-light font-serif">The pipeline setup task at 24.0x was lower because it involved debugging: fixing a virtual environment, resolving dependency conflicts, patching a batch script, and then running the actual synthesis and quality review passes. Environment troubleshooting is where AI leverage drops. The machine is fast at generating code but still has to iterate through build-fix-retry cycles just like a human would, only faster.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 450.0x is the standout number. Eight minutes of my time on a Saturday afternoon turned into seven and a half days of engineering output. Spring break barely noticed.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Day Off: Spring Break]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-14-day-off.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-14-day-off.html</id>
    <updated>2026-03-14T12:00:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">No computer time today. Spent the day renting skis, buying lift tickets, stocking up on groceries, and getting everything sorted for spring break. Zero tasks, zero tokens, zero leverage.</p>
<p class="mb-4 font-light font-serif">The machines got a day off too.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 13, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-13-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-13-leverage-record.html</id>
    <updated>2026-03-13T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Twenty-eight tasks in a single day. The bulk of the work was building out a cloud console simulator from scratch and populating it with hundreds of lab definitions and executors across multiple certification exam tracks. Domain specification generation for a free educational tier rounded out the rest. The weighted average leverage factor hit 98.1x, driven by the initial simulator scaffold at 576x.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Cloud console simulator: scaffold + engine + 4 service sims + lab runner + starter lab</td>
      <td>240h</td>
      <td>25m</td>
      <td>6.0w</td>
      <td>576.0x</td>
      <td>2880.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Create 50 lab definitions and executors for 2 certification exams</td>
      <td>80h</td>
      <td>25m</td>
      <td>2.0w</td>
      <td>192.0x</td>
      <td>960.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Create 44 console sim labs (15 + 29 across 2 cert exams) with 88 files + registry update</td>
      <td>120h</td>
      <td>45m</td>
      <td>3.0w</td>
      <td>160.0x</td>
      <td>1440.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Cloud console simulator comprehensive requirements and design document</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Write 5 structured educational domain specifications (68-70 leaf nodes each)</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Write 35 educational domain specifications (2,286 leaf goals) for free tier</td>
      <td>40h</td>
      <td>20m</td>
      <td>1.0w</td>
      <td>120.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Create certification labs master list (245 labs across 11 certifications)</td>
      <td>16h</td>
      <td>8m</td>
      <td>0.40w</td>
      <td>120.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Create comprehensive certification labs master list (295 labs across 14 certifications)</td>
      <td>24h</td>
      <td>15m</td>
      <td>0.60w</td>
      <td>96.0x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Create 60 lab definitions and executors for 3 certification exams</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Create 87 lab definition and executor files for 2 advanced certification exams</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td>96.0x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Cloud portal simulator comprehensive requirements and design document</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td>80.0x</td>
      <td>320.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Create 35 lab definitions and executors for 2 certification exams</td>
      <td>40h</td>
      <td>35m</td>
      <td>1.0w</td>
      <td>68.6x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Write 5 educational domain specifications (65-67 leaf nodes each)</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Create 25 lab definitions and 25 executors for certification exam (50 files)</td>
      <td>40h</td>
      <td>45m</td>
      <td>1.0w</td>
      <td>53.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Create 20 SDK client files for simulator services</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td>40.0x</td>
      <td>160.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Write 5 educational domain specifications (technical and professional topics)</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Create 35 lab definitions and executors for advanced certification exam</td>
      <td>16h</td>
      <td>25m</td>
      <td>0.40w</td>
      <td>38.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>UI automation store + TTS narration + execution context expansion</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Create 10 lab definition JSON files matching executor step counts</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td>36.0x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Write 5 educational domain specifications (programming language fundamentals)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Write 5 educational domain specifications (development practices and patterns)</td>
      <td>8h</td>
      <td>18m</td>
      <td>0.20w</td>
      <td>26.7x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Rewrite simulator views: store migration + hooks + sidebar nav + CSS modules</td>
      <td>8h</td>
      <td>22m</td>
      <td>0.20w</td>
      <td>21.8x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Write 5 educational domain specifications (systems and infrastructure topics)</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Write 5 educational domain specifications (networking and security fundamentals)</td>
      <td>4h</td>
      <td>16m</td>
      <td>0.10w</td>
      <td>15.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Rewrite resource store Map to Record for state management reactivity</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td>15.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Fix TypeScript errors in 19 executor files (signatures + API calls)</td>
      <td>1.5h</td>
      <td>6m</td>
      <td>0.037w</td>
      <td>15.0x</td>
      <td>45.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Fix TypeScript errors in 13 executor files (function signatures)</td>
      <td>1.5h</td>
      <td>8m</td>
      <td>0.037w</td>
      <td>11.2x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Fix 95 TypeScript errors across 38 lab executor/definition files</td>
      <td>2h</td>
      <td>12m</td>
      <td>0.050w</td>
      <td>10.0x</td>
      <td>40.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>28</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>855h (106.9 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>523m (8.7h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>117m (2.0h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~4,145,500</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>98.1x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>438.5x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">This was a build day. The cloud console simulator went from nothing to a fully scaffolded application with an engine, four service simulations, a lab runner, and a starter lab in 25 minutes. A senior full-stack engineer would spend six weeks on that foundation. The 576x leverage factor is the highest I have ever recorded on a single task.</p>
<p class="mb-4 font-light font-serif">The rest of the day was population work: filling the simulator with lab definitions and executors across multiple certification tracks. These tasks ranged from 53x to 192x depending on the complexity of the lab scenarios. The pattern is consistent: once the architecture and conventions are established, stamping out content that follows those conventions is where AI leverage peaks. Each batch of 25-50 labs came with both the JSON definition files and the TypeScript executor implementations, ready to run.</p>
<p class="mb-4 font-light font-serif">Domain specification generation for the educational free tier accounted for 7 of the 28 tasks. These ranged from 15x to 120x. The variance came from topic complexity: programming language fundamentals (Python, JavaScript, SQL) follow well-established taxonomies and generated quickly. More abstract topics (data visualization patterns, security fundamentals) required more nuanced goal hierarchies and took longer.</p>
<p class="mb-4 font-light font-serif">The lowest factors were the TypeScript error-fixing tasks at 10-15x. Debugging type errors requires reading error messages, tracing through type definitions, and making judgment calls about the correct fix. Less mechanical, more analytical. Still, fixing 95 type errors across 38 files in 12 minutes is not something a human does before lunch.</p>
<p class="mb-4 font-light font-serif">The supervisory leverage of 438.5x means that for every minute I spent writing prompts, I got back 7.3 hours of human-equivalent output. Two hours of supervisory effort produced over five months of full-time engineering work.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 12, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-12-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-12-leverage-record.html</id>
    <updated>2026-03-12T23:59:00Z</updated>
    <content type="html"><![CDATA[<p class="mb-4 font-light font-serif">Thirty tasks across seven projects. Infrastructure provisioning, multi-platform feature development, a complete site template redesign, PDF parsing improvements, MCP server conversions, and a full SEO overhaul. The tfadm MCP server conversion hit 133x, the highest single-task leverage factor I have recorded.</p>
<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Weeks</th>
      <th>Factor</th>
      <th>Sup. Factor</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Convert infrastructure management tool to MCP server (19 tools, 2 resources, 3 prompts)</td>
      <td>40h</td>
      <td>18m</td>
      <td>1.0w</td>
      <td>133.3x</td>
      <td>480.0x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Consolidate compute architecture and write 10 serverless handlers with design documentation</td>
      <td>24h</td>
      <td>25m</td>
      <td>0.60w</td>
      <td>57.6x</td>
      <td>288.0x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Implement ELO-based scoring level system across shared UI library and 3 client applications</td>
      <td>24h</td>
      <td>25m</td>
      <td>0.60w</td>
      <td>57.6x</td>
      <td>180.0x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Build decision fatigue compensation model with service layer, schemas, router, and 8 MCP tools</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td>53.3x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Multi-platform mastery tracking view across 3 client applications with shared UI patterns</td>
      <td>12h</td>
      <td>15m</td>
      <td>0.30w</td>
      <td>48.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>PDF parser: multi-column detection, font metrics, italic handling, skill category merging</td>
      <td>20h</td>
      <td>25m</td>
      <td>0.50w</td>
      <td>48.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Certification-to-domain mapper with 80+ static patterns across 10 providers and 42 tests</td>
      <td>12h</td>
      <td>15m</td>
      <td>0.30w</td>
      <td>48.0x</td>
      <td>240.0x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Modern site template design: 20+ template files with 900-line SCSS, dark mode, scroll animations</td>
      <td>16h</td>
      <td>22m</td>
      <td>0.40w</td>
      <td>43.6x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Multi-platform enrollment abandonment with confirmation modals across 3 clients</td>
      <td>6h</td>
      <td>10m</td>
      <td>0.15w</td>
      <td>36.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Feature view implementation for iOS (7 files: persistence, phase, state, view, routing, dashboard)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Feature view implementation for web with full page component and indicator</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Feature view implementation for desktop (6 files with module CSS and wiring)</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Mastery tracking screen for desktop (new screen, CSS, routing)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>Mastery tracking page for web (persistence, component, CSS, wiring)</td>
      <td>6h</td>
      <td>12m</td>
      <td>0.15w</td>
      <td>30.0x</td>
      <td>72.0x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>iOS onboarding flow with file upload and branching path selection</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td>30.0x</td>
      <td>80.0x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>Research and compile hands-on labs master list across 13 certification exams</td>
      <td>16h</td>
      <td>35m</td>
      <td>0.40w</td>
      <td>27.4x</td>
      <td>192.0x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Full SEO overhaul: OG tags, Twitter Cards, JSON-LD, canonical URLs, sitemap, RSS auto-discovery</td>
      <td>8h</td>
      <td>20m</td>
      <td>0.20w</td>
      <td>24.0x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Container orchestration configs for 2 services (16 files: task defs, security groups, load balancer rules, DNS, IAM)</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Infrastructure stack with 8 configurations, target, version, and deployment for workloads API</td>
      <td>6h</td>
      <td>15m</td>
      <td>0.15w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Analyze existing infrastructure-as-code and map to new configuration system with gap analysis</td>
      <td>4h</td>
      <td>10m</td>
      <td>0.10w</td>
      <td>24.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Desktop onboarding flow: file upload and review with branching path selection</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>60.0x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Update backend MCP server to streaming HTTP transport with retry logic</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Write comprehensive system documentation with data schemas, fatigue model, and query reference</td>
      <td>3h</td>
      <td>8m</td>
      <td>0.075w</td>
      <td>22.5x</td>
      <td>90.0x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>Enrollment abandonment feature for iOS (auth client, state management, dashboard)</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td>22.5x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>Mastery tracking view for iOS (7 files: persistence, phase, state, view, routing)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>48.0x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Enrollment abandonment feature for web application</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td>20.0x</td>
      <td>40.0x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>Fix 24 test failures across 3 service test suites with test infrastructure repairs</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td>20.0x</td>
      <td>120.0x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Onboarding flow with file upload and path selection across 3 clients</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td>19.2x</td>
      <td>96.0x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Enrollment abandonment feature for desktop across 6 files</td>
      <td>1.5h</td>
      <td>5m</td>
      <td>0.037w</td>
      <td>18.0x</td>
      <td>30.0x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>Convert 3 MCP servers from stdio to streaming HTTP transport with connection pooling</td>
      <td>4h</td>
      <td>18m</td>
      <td>0.10w</td>
      <td>13.3x</td>
      <td>48.0x</td>
    </tr>
  </tbody>
</table>
<h2 id="aggregate-stats">Aggregate Stats</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>30</td>
    </tr>
    <tr>
      <td>Human-equivalent hours</td>
      <td>270h (33.8 working days)</td>
    </tr>
    <tr>
      <td>Claude wall-clock time</td>
      <td>426m (7.1h)</td>
    </tr>
    <tr>
      <td>Supervisory time</td>
      <td>114m (1.9h)</td>
    </tr>
    <tr>
      <td>Tokens consumed</td>
      <td>~2,443,000</td>
    </tr>
    <tr>
      <td>Weighted avg leverage factor</td>
      <td>38.0x</td>
    </tr>
    <tr>
      <td>Weighted avg supervisory factor</td>
      <td>142.1x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The tfadm MCP server conversion stands out at 133.3x. That task involved wrapping an existing infrastructure management tool with 19 MCP tools, 2 resources, and 3 prompts. The high leverage came from the mechanical nature of the work: each tool followed the same pattern, and the AI could stamp them out without much variation. A human would have spent the better part of a week on the boilerplate alone.</p>
<p class="mb-4 font-light font-serif">Multi-platform feature rollouts continued to drive volume. Three separate features (release notes view, mastery tracking, enrollment abandonment) each got deployed across iOS, web, and desktop clients. The per-platform leverage ranged from 18x to 30x, but the aggregate tasks (all 3 clients at once) hit 36x to 48x because the AI could carry context across platforms and adapt patterns without re-learning the architecture.</p>
<p class="mb-4 font-light font-serif">Infrastructure work clustered around 24x: container orchestration configs, infrastructure-as-code analysis, and stack provisioning. These tasks involve a lot of cross-referencing documentation and generating repetitive configuration files. Lower leverage than pure code generation, but still significant given the precision required.</p>
<p class="mb-4 font-light font-serif">The lowest factor was 13.3x for the MCP transport conversion. That task required understanding three different server implementations and their connection models, then making architectural decisions about retry logic and connection pooling. More thinking, less typing.</p>
<p class="mb-4 font-light font-serif">The modern template redesign at 43.6x was notable: 20+ Jinja template files plus a 900-line SCSS stylesheet with full dark mode support and scroll animations, produced in 22 minutes. A front-end developer would spend two full days on that.</p>]]></content>
  </entry>
  <entry>
    <title><![CDATA[Leverage Record: March 11, 2026]]></title>
    <link href="https://charlessieg.com/posts/2026/2026-03-11-leverage-record.html" />
    <id>https://charlessieg.com/posts/2026/2026-03-11-leverage-record.html</id>
    <updated>2026-03-11T23:59:00Z</updated>
    <content type="html"><![CDATA[<div class="callout bg-blue-50 border-blue-500 text-blue-800 border-l-4 p-4 mb-4">
<div class="font-bold">About These Records</div>
<div>These time records capture personal project work done with <a href="https://claude.ai/code">Claude Code</a> (Anthropic) only. They do not include work done with ChatGPT (OpenAI), Gemini (Google), Grok (xAI), or other models, all of which I use extensively. Client work is also excluded, despite being primarily Claude Code. The actual total AI-assisted output for any given day is substantially higher than what appears here.</div>
</div>
<p class="mb-4 font-light font-serif">Thirty-five tasks on Tuesday. The day&#39;s defining thread was a cross-platform user profile system that touched six repositories: backend services, three client applications (web, desktop, iOS), and architecture documentation. That single initiative accounted for roughly a third of the day&#39;s output. The rest split across a full-stack task management application, product catalog metadata expansion, business planning document overhauls, and a resume parsing tool built from a design spec.</p>
<h2 id="task-log">Task Log</h2>
<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Task</th>
      <th>Human Est.</th>
      <th>Claude</th>
      <th>Supv.</th>
      <th style="text-align: right">LF</th>
      <th style="text-align: right">SLF</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Task management backend core infrastructure: 35 files (models, schemas, config, auth, migrations, tests)</td>
      <td>16h</td>
      <td>6m</td>
      <td>0.40w</td>
      <td style="text-align: right">160x</td>
      <td style="text-align: right">320x</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Backend certification system: migration, model, schemas, service, and API endpoints</td>
      <td>20h</td>
      <td>8m</td>
      <td>0.50w</td>
      <td style="text-align: right">150x</td>
      <td style="text-align: right">400x</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Cross-platform user profile system: design and implementation across 6 repositories (backend services, web, desktop, iOS, architecture docs) with certification verification and enrollment flow</td>
      <td>120h</td>
      <td>55m</td>
      <td>3.0w</td>
      <td style="text-align: right">131x</td>
      <td style="text-align: right">720x</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Full-stack task management application: 150 files, backend and frontend</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td style="text-align: right">96x</td>
      <td style="text-align: right">480x</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Comprehensive business planning update: 10 documents rewritten for revised pricing model and enterprise launch roadmap</td>
      <td>40h</td>
      <td>25m</td>
      <td>1.0w</td>
      <td style="text-align: right">96x</td>
      <td style="text-align: right">480x</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Resume parsing tool from design spec: 81 files, 7,351 LOC, 6 parsers, 4 renderers, website generator, LLM integration, 129 tests</td>
      <td>80h</td>
      <td>50m</td>
      <td>2.0w</td>
      <td style="text-align: right">96x</td>
      <td style="text-align: right">960x</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Backend user profile system Phase A: migration and 13 files (models, schemas, services, endpoints for profile, avatar, privacy, account)</td>
      <td>28h</td>
      <td>18m</td>
      <td>0.70w</td>
      <td style="text-align: right">93x</td>
      <td style="text-align: right">336x</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Web application user profile page: profile view, avatar upload, certification card, API client, app integration</td>
      <td>28h</td>
      <td>18m</td>
      <td>0.70w</td>
      <td style="text-align: right">93x</td>
      <td style="text-align: right">336x</td>
    </tr>
    <tr>
      <td>9</td>
      <td>Shared product info component with 3-client implementation (shared library, web refactor, desktop, iOS)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td style="text-align: right">80x</td>
      <td style="text-align: right">192x</td>
    </tr>
    <tr>
      <td>10</td>
      <td>Task management frontend scaffold: 57 files (React 19, Vite 6, TypeScript) with components, pages, hooks, API layer, auth, CSS modules</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td style="text-align: right">80x</td>
      <td style="text-align: right">320x</td>
    </tr>
    <tr>
      <td>11</td>
      <td>Task management backend API routes and services: 19 files (7 services, 10 routes, exceptions, main configuration)</td>
      <td>16h</td>
      <td>12m</td>
      <td>0.40w</td>
      <td style="text-align: right">80x</td>
      <td style="text-align: right">192x</td>
    </tr>
    <tr>
      <td>12</td>
      <td>Recruitment platform Phase 2: auth middleware, recruiter profile, layout shell, dashboard, settings (18 files)</td>
      <td>20h</td>
      <td>18m</td>
      <td>0.50w</td>
      <td style="text-align: right">67x</td>
      <td style="text-align: right">600x</td>
    </tr>
    <tr>
      <td>13</td>
      <td>Desktop application user profile screen: types, auth client, IPC, preload, renderer API, profile component, CSS, app integration</td>
      <td>20h</td>
      <td>18m</td>
      <td>0.50w</td>
      <td style="text-align: right">67x</td>
      <td style="text-align: right">240x</td>
    </tr>
    <tr>
      <td>14</td>
      <td>iOS task management repo creation with requirements and design documents derived from web counterparts</td>
      <td>8h</td>
      <td>8m</td>
      <td>0.20w</td>
      <td style="text-align: right">60x</td>
      <td style="text-align: right">160x</td>
    </tr>
    <tr>
      <td>15</td>
      <td>Product catalog metadata expansion: exam info fields added to 40 domain specification files</td>
      <td>16h</td>
      <td>18m</td>
      <td>0.40w</td>
      <td style="text-align: right">53x</td>
      <td style="text-align: right">320x</td>
    </tr>
    <tr>
      <td>16</td>
      <td>iOS user profile view: profile models, auth client actor, profile view, certification card, add-certification view, app state extensions, navigation wiring</td>
      <td>20h</td>
      <td>25m</td>
      <td>0.50w</td>
      <td style="text-align: right">48x</td>
      <td style="text-align: right">240x</td>
    </tr>
    <tr>
      <td>17</td>
      <td>Recruitment platform Phase 1: project scaffolding, database schema, app shells (57 files, 12 tables)</td>
      <td>16h</td>
      <td>22m</td>
      <td>0.40w</td>
      <td style="text-align: right">44x</td>
      <td style="text-align: right">320x</td>
    </tr>
    <tr>
      <td>18</td>
      <td>Business document updates: acquisition scenarios, enterprise training docs with revised pricing and valuations</td>
      <td>8h</td>
      <td>12m</td>
      <td>0.20w</td>
      <td style="text-align: right">40x</td>
      <td style="text-align: right">96x</td>
    </tr>
    <tr>
      <td>19</td>
      <td>Web application enrollment flow wiring for product info landing page</td>
      <td>4h</td>
      <td>6m</td>
      <td>0.10w</td>
      <td style="text-align: right">40x</td>
      <td style="text-align: right">80x</td>
    </tr>
    <tr>
      <td>20</td>
      <td>Desktop product info screen: screen component, CSS, i18n for 4 locales, app and dashboard wiring</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td style="text-align: right">36x</td>
      <td style="text-align: right">60x</td>
    </tr>
    <tr>
      <td>21</td>
      <td>Valuation and funding document rewrite for pre-launch reality with 9 major revisions</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td style="text-align: right">36x</td>
      <td style="text-align: right">60x</td>
    </tr>
    <tr>
      <td>22</td>
      <td>Backend billing endpoints: portal, plan changes, invoice retrieval</td>
      <td>3h</td>
      <td>5m</td>
      <td>0.075w</td>
      <td style="text-align: right">36x</td>
      <td style="text-align: right">60x</td>
    </tr>
    <tr>
      <td>23</td>
      <td>Full-stack product info page: engine models, gateway, types, React component, CSS, i18n across 4 locales</td>
      <td>24h</td>
      <td>45m</td>
      <td>0.60w</td>
      <td style="text-align: right">32x</td>
      <td style="text-align: right">180x</td>
    </tr>
    <tr>
      <td>24</td>
      <td>iOS product info view with new API model structs and optional type fixes</td>
      <td>3h</td>
      <td>6m</td>
      <td>0.075w</td>
      <td style="text-align: right">30x</td>
      <td style="text-align: right">36x</td>
    </tr>
    <tr>
      <td>25</td>
      <td>SQLite import feature for task management: service, route, schema, main configuration</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td style="text-align: right">30x</td>
      <td style="text-align: right">80x</td>
    </tr>
    <tr>
      <td>26</td>
      <td>Pitch deck rewrite: 3 files updated for bootstrapped growth plan, first raise, and Series B</td>
      <td>4h</td>
      <td>8m</td>
      <td>0.10w</td>
      <td style="text-align: right">30x</td>
      <td style="text-align: right">48x</td>
    </tr>
    <tr>
      <td>27</td>
      <td>User enrollment tracking system: migration, model, schema, service, API, registration flow</td>
      <td>2h</td>
      <td>4m</td>
      <td>0.050w</td>
      <td style="text-align: right">30x</td>
      <td style="text-align: right">40x</td>
    </tr>
    <tr>
      <td>28</td>
      <td>Auth bypass mode for internal tracking tool (backend, frontend, Docker configuration)</td>
      <td>1.5h</td>
      <td>4m</td>
      <td>0.037w</td>
      <td style="text-align: right">22x</td>
      <td style="text-align: right">30x</td>
    </tr>
    <tr>
      <td>29</td>
      <td>Unit tests for SQLite import service: 31 tests covering helpers, database reads, and full async import</td>
      <td>2h</td>
      <td>6m</td>
      <td>0.050w</td>
      <td style="text-align: right">20x</td>
      <td style="text-align: right">40x</td>
    </tr>
    <tr>
      <td>30</td>
      <td>iOS enrollment flow wiring for product info landing page (6 files)</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td style="text-align: right">20x</td>
      <td style="text-align: right">80x</td>
    </tr>
    <tr>
      <td>31</td>
      <td>Desktop enrollment flow wiring for product info landing page</td>
      <td>4h</td>
      <td>12m</td>
      <td>0.10w</td>
      <td style="text-align: right">20x</td>
      <td style="text-align: right">80x</td>
    </tr>
    <tr>
      <td>32</td>
      <td>Manifest patching pipeline: 3 rounds of patches for metadata and taxonomy fields across 40+ domain files</td>
      <td>8h</td>
      <td>25m</td>
      <td>0.20w</td>
      <td style="text-align: right">19x</td>
      <td style="text-align: right">96x</td>
    </tr>
    <tr>
      <td>33</td>
      <td>Trademark symbol replacement (™ to ®) across 3 client applications (32 files)</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td style="text-align: right">15x</td>
      <td style="text-align: right">40x</td>
    </tr>
    <tr>
      <td>34</td>
      <td>Auth bypass mode for leverage tracking tool (backend, frontend, Docker Compose)</td>
      <td>1h</td>
      <td>4m</td>
      <td>0.025w</td>
      <td style="text-align: right">15x</td>
      <td style="text-align: right">20x</td>
    </tr>
    <tr>
      <td>35</td>
      <td>Import UI component for task management frontend: button and modal</td>
      <td>2h</td>
      <td>8m</td>
      <td>0.050w</td>
      <td style="text-align: right">15x</td>
      <td style="text-align: right">40x</td>
    </tr>
  </tbody>
</table>
<p class="mb-4 font-light font-serif"><strong>Legend:</strong> Human Est. = estimated human-equivalent time. Claude = wall-clock minutes for Claude to complete. Supv. = minutes I spent writing the prompt. LF = leverage factor (human time / Claude time). SLF = supervisory leverage factor (human time / my time).</p>
<h2 id="aggregate-statistics">Aggregate Statistics</h2>
<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Total tasks</td>
      <td>35</td>
    </tr>
    <tr>
      <td>Total human-equivalent hours</td>
      <td>602.5</td>
    </tr>
    <tr>
      <td>Total Claude minutes</td>
      <td>533 (8.9 hours)</td>
    </tr>
    <tr>
      <td>Total human-equivalent weeks</td>
      <td>15.1</td>
    </tr>
    <tr>
      <td>Total tokens consumed</td>
      <td>~3,603,000</td>
    </tr>
    <tr>
      <td>Weighted average leverage factor</td>
      <td>67.8x</td>
    </tr>
    <tr>
      <td>Weighted average supervisory leverage factor</td>
      <td>254.6x</td>
    </tr>
  </tbody>
</table>
<h2 id="analysis">Analysis</h2>
<p class="mb-4 font-light font-serif">The cross-platform user profile system (task 3, 131x) was the largest single task of the day: 120 human-equivalent hours compressed into 55 minutes. The implementation spanned two backend services, three client applications, and architecture documentation. Profile pages, certification verification, enrollment flows, and GDPR-compliant data handling all had to stay consistent across web, desktop, and iOS. A team of three engineers (backend, frontend, iOS) would need two full weeks to deliver that scope with proper cross-platform parity. Ten minutes of prompt writing produced the same result.</p>
<p class="mb-4 font-light font-serif">The resume parsing tool (task 6, 96x) hit the highest supervisory leverage of the day at 960x. Five minutes of prompting yielded 81 files, 7,351 lines of code, 6 document parsers, 4 output renderers, a website generator, LLM integration, and 129 passing tests. That ratio reflects the nature of greenfield builds from a clear design spec: Claude can hold the full architecture in context and generate internally consistent code across dozens of files without the constant context-switching that slows human developers.</p>
<p class="mb-4 font-light font-serif">The task management application followed a deliberate three-phase pattern. Backend infrastructure first (task 1, 160x): 35 files including models, schemas, configuration, auth, and migrations in 6 minutes. Frontend scaffold next (task 10, 80x): 57 React 19 files in 12 minutes. Then the full application assembly (task 4, 96x): 150 files in 25 minutes. Breaking the build into phases like this consistently produces cleaner architecture than asking for everything at once, and the total Claude time (43 minutes) is still a fraction of the 72 human-equivalent hours.</p>
<p class="mb-4 font-light font-serif">Business planning and investor documentation (tasks 5, 18, 21, 26) ran 30-96x. These documents require understanding product strategy, market positioning, and financial projections. Claude handles the structured writing well; the supervisory cost is in reviewing the output for strategic accuracy rather than writing quality.</p>
<p class="mb-4 font-light font-serif">The floor was the auth bypass mode for the leverage tracker (task 34, 15x) and the import UI component (task 35, 15x). Small, focused changes that require more reading and understanding of existing code than generating new code. Even at 15x, four minutes beats an hour.</p>]]></content>
  </entry>
</feed>