tclpdf

One day, one release — 2026-08-31 from 1.3 to 1.4, measured
Login

One day, one release — 2026-08-31 from 1.3 to 1.4, measured

tclpdf 1.4 was built, checked and released in a single afternoon, and this note holds the day against the transcript: what came out, what it cost in tokens, how long it took, and what the same work would plausibly have cost a programmer. The method is the one of the earlier notes — everything counted is counted from the session transcripts, deduplicated per message id, and every number here can be recomputed from them.

What the day produced

The whole of the 1.4 release. The document-timestamp module gained three examples ordered simple to involved — the minimal stamp, the stamped PDF/A archive file, and a signed file stamped on top — with an offline fallback that builds a throwaway RFC 3161 authority out of openssl ts when the public one cannot be reached, so make examples works on a machine without network and says so on the console. Two shared procedures were hoisted out of the signing module where the timestamp code had copied them. Two real bugs were found and fixed in a reachability probe that had looked fine all along: it ignored the port in the URL it was probing, and it took Tcl's writable event at face value — Tcl reports a failed asynchronous connect as writable too, and only fconfigure -error tells the two apart, exactly once. A gap in the acceptance run was found and closed: pdfsig says "has not yet been verified" both about an unfilled signature placeholder and about a document timestamp it does not verify, and the check had been treating the second case as the first, skipping exactly the documents the new feature produces. Then the full acceptance (91 checks, 0 failures, 0 skips; 4477 tests under both interpreters), two commits, the version raised to 1.4, the wiki pages brought up to date, 93 example documents published, and the release note written with every number in it measured fresh.

What it cost

130,697,591 tokens, all of them in the main session — the day ran without a single subagent, and that is counter-checked rather than assumed: none of the 423 subagent transcripts carries an entry with the day's date.

2026-08-31
Input 514
Output 224,197
Cache creation 2,705,554
Cache reads 127,767,326
Total 130,697,591

Cache reads are 97.8 % of everything, which is the shape every day of this project has had: the conversation re-reads its own context far more than it writes. 258 assistant messages, deduplicated per message id, out of 1,193 transcript lines for the day.

How long it took

Measure 2026-08-31
Day span (first to last entry) 3 h 43 min
Turn time (author's prompt to the last entry before the next one, 49 turns) 3 h 39 min
Active time (gaps of 5 minutes or less) 2 h 03 min

Turn time is the measure that matched the author's own count in the effort note, and today it sits almost on the day span: the afternoon was gapless, no pause between one instruction and the next piece of work. The ninety-odd minutes between active time and turn time are the waits above five minutes — two full acceptance runs, the test suites under both interpreters, and publishing the examples.

What a programmer would have needed

Estimated the way the time-calculation note estimates, item by item, cycle by cycle: two to three working days — twelve to twenty hours against the 3 h 39 min of turn time, a factor of four to five.

Item by hand
hoisting the two shared procedures, both call sites, the test runs 1–2 h
writing and reworking three examples, with head comments that teach 3–5 h
the throwaway-authority fallback: learning the openssl ts configuration, the transport, the setup logic 2–4 h
finding the two probe bugs — the ignored port, and the writable event that fires on a failed connect 1–3 h
the new test, including the discovery that openssl happily signs with a timeStamping certificate 1–2 h
diagnosing and closing the acceptance gap around pdfsig's ambiguous verdict 1–2 h
documentation, two acceptance runs, the version ritual, wiki and publishing, the release note with its numbers re-measured 3–4 h

Two honest remarks about that factor. First, it lives less in the typing than in the not-stopping: the openssl ts configuration, the DER details and the Tcl socket semantics cost no lookup-hours here, and every red test had its next run seconds later instead of after a context switch. Second — and this is the more important one — the two probe bugs and the acceptance gap would most plausibly have cost a programmer no time at all: they are only found by actually measuring the offline path and the skip verdicts instead of trusting a green total. Realistically they would have shipped, and come back later as bug reports. The estimate above prices the thorough version of the day, not the fast one.

Method

Counted from the session transcripts under the project directory: the one main-session file (407 MB) filtered to entries stamped 2026-08-31, token usage summed per deduplicated message id, the subagent directories scanned the same way. Time measures as in the effort note: day span is first to last entry; turn time sums, per author prompt, the distance to the last entry before the next prompt; active time sums only gaps of five minutes or less. The human estimate is an estimate and is labelled as one — everything else in this note is a measurement.