"Rewritten for the medium, not truncated to fit it" is a slogan until something measures it. So the repo ships truncation as a first-class strategy - the first N characters, cut mid-sentence, with the platform's furniture reserved so the result is genuinely publishable - and it is the best-scoring strategy on every metric a tool can compute about its own output.
The pipeline is four lines, and the first one is a guess:
roles = cue_roles(piece) # 24 of 29, and one of the misses is fatal
links = attach(piece, roles) # where one error quietly becomes two
parts = strategy(piece, roles, medium)
bundle = {m: parts for m in MEDIA} # individually valid, collectively not
Repo: https://github.com/dev48v/content-repurposer - PUBLIC, MIT, dependencies = [], 38 pytest, no key and no network. The page computes it in your browser and is genuinely self-contained: not one asset is fetched off it - https://dev48.infy.uk/agentlab/vol2-04-content-repurposer.html
| on the x-thread | budget use | adjacency | verbatim | opening | conclusion | claims | orphans | stranded |
|---|---|---|---|---|---|---|---|---|
| truncate (the control) | 1.00 | 1.00 | 1.00 | 100% | 0% | 2 of 8 | s02 | s05 |
| role-aware (the job) | 0.82 | 0.20 | 1.00 | 50% | kept | 5 of 8 | none | s15 |
Budget use of 1.00 is provably the highest available: cutting mid-sentence never leaves a hole it cannot fill. And 0% of the conclusion holds on all four media. So the only measurements that separate cutting from rewriting are role-based, which makes the cue reader the ceiling at 24 of 29 - and its one fatal miss is s19, a caveat that hedges nothing, is therefore read as a claim, and detaches from what it qualifies.
Attachment doubles the error. Caveats attach to the nearest preceding claim, which is correct whenever the roles are; a demoted claim is not a candidate parent, so the caveat below it walks past. 3 of 5 caveats land on the right claim, against 5 of 5 with the answer key. Hence the shipped result: zero orphaned caveats, every hard constraint satisfied, and one caveat printed beside a claim it does not qualify on 3 of the 4 media. An orphan counter cannot see it, because the qualifier is present - just next to the wrong thing.
Solving each slot independently is individually valid and collectively wrong: per-part packing gives four byte-identical tweets of five with zero violations, and the naive strategies publish the thesis qualified on two platforms and bare on two. Over a 16-cell sweep of budget times admission, no cell reaches zero on both orphans and lost claims; the floor is 1.
Three things the measurement took back
Ranking claims by how much evidence attaches to them sorts the conclusion last of eight - under the cue reader and the answer key alike - because a conclusion is the one claim that cites nothing. The honest strategy therefore drops the ending, which is truncation's own failure from the opposite direction. One positional rule repairs it for free, is on by default, and --no-closing reproduces the result.
Swapping the cue reader for the answer key moves the stranded caveat from 3 media to 0 and no claim count at all: on the thread both readings publish the identical five claims, because a demoted claim is re-admitted downstream as evidence for the claim above it. The classifier's cost is invisible to a count and entirely visible in a reading.
And no honest strategy leads with the thesis on any medium: a thesis is asserted and then argued rather than cited, so it ranks second under both readings, and instagram's 125-character fold cannot hold its 138 characters anyway.
86 in-page assertions, 232 in the verifier. Agent Lab Vol 2, Project 04: https://dev48.infy.uk/agentlab.php
Top comments (0)