PorkiCoder Research · Tab titles

Two recipes, one glue

16 GB Macs get FLAN plus our highlighter. Phone-class chips get the 35M we actually trained. The same A18 Pro sits in a $599 Neo and in an iPhone; that is the split, not Air versus Pro.

14 August 2026 · Holdout n=1,000 · Blind Gemini 3.5 Flash-Lite · Sealed 1,000 unused

Abstract

We did not waste a GPU week trying to beat Google’s instruction mix with a 35M pretrain. We found two shippable title stacks that share one combiner. On 16 GB Apple Silicon (Air or Pro), FLAN-T5-small glued to a 16 MiB centroid highlighter is 77% useful, 10% fail, 32 ms. On A18-class memory (Neo, and anything that is a phone) the 296 MiB first page-in is the hitch, so Hybrid A, our 35M GSG plus the same highlighter, takes that slot: half the weights, 64% useful, 17% fail against the incumbent’s 54%. Centroid-only is the 16 MiB emergency path. The glue is identical everywhere: keep namer words that appear in the body, fill with centroid nouns.

Where each recipe lives

MachineChip / RAMShipWhy
MacBook Pro, current AirM-series, 16 GB+FLAN + centroidBest titles, faster generate, RAM is free
Neo, iPhone-classA18 Pro, 8 GB unifiedHybrid A (or centroid)Half the weights; the first hitch is the 8 GB problem, not the 32 ms

A18 Pro is the iPhone 16 Pro SoC. Neo is that phone in a clamshell. An M4/M5 Air is the same kind of silicon as a Pro, with a 16 GB base, not a different planet. Do not put Hybrid A on the Air and FLAN on the Pro. That split is 8 GB phone-class vs 16 GB Mac. The packaged bundle sizes below decide the final cut; the Hybrid A slim figure is an estimate until the export exists.

The holdout table

Same blinded packet. Latency is single-title on the research Mac (PyTorch MPS generate, CPU centroid, n=50). Combiners run sequentially.

SystemSizemsMeanUseful ≥4Fail ≤2
12.7M (in the app today)28.5 MiB2263.0131%54%
Centroid only (ours)16 MiB0.84.2155%23%
Hybrid A: phone-class (35M GSG + centroid)~150 MiB slim*2524.7264%17%
12.7 + GSG + centroid300 MiB4774.7064%19%
FLAN-T5-small296 MiB315.2268%18%
FLAN + centroid: 16 GB Mac312 MiB325.4377%10%

Useful = Gemini ≥4. Fail = Gemini ≤2. FLAN+centroid vs raw FLAN, paired wins: 427–374. vs Hybrid A: 449–246. Sealed final 1,000 was not scored. *Slim = GSG weights plus embed-only centroid; measured research checkpoint is 272 MiB, the slim export has not been built yet.

Size, speed, useful, fail

X is milliseconds per title. Y is the Gemini rate. Green fill is useful. Red ring is fail. Bubble area is disk.

100% 50% 0 0 ms 100 200 400 single-title inference Centroid FLAN+cen 12.7M Hybrid A triple 477ms

FLAN sits left (fast) and high. Our 35M generate sits near 250 ms. The triple is the slowest for a tie with Hybrid A. Centroid is a green speck on the y-axis.

What we thought we were building

PorkiCoder needs a local tab title: a few words so you can find the session later. The 12.7M student that ships in the app today collapsed to brand priors (Java EE, ASP NET MVC). That model has a history: it is the distilled student whose training quirks we dissected in our first paper, The Sniff Test, where one lucky embedding transplant looked like a mechanism until 31 matched runs said otherwise. This campaign started as its replacement.

We spent a GPU day on a 35M T5: technical span-corruption pretraining, then PEGASUS-style GSG (task body → original Stack Overflow title). That model learned a title dialect (How to a varchar field in Active), not a gist. Exact match to the SO title was never the product metric.

The thing that actually wrote stickers was dumb: take the three body words whose embeddings sit nearest the body’s centroid, keep document order. Sixteen mebibytes if you throw away the unused transformer.

How the pieces were formed

Data

Every system reads the same serialization the app uses: title: agent=… task=… with the task body from a public Stack Overflow dump. Technical-language pretraining drew 250M tokens from shards 18–57 of that dump. Evaluation lives in so_clean_holdout_v1: 2,000 newly pulled tasks from shards 0–17 only, with all 49,336 previously used title-training and validation IDs excluded, split by hash sort before any title training. Half is the reusable clean dev set of 1,000 that every number on this page comes from; the other 1,000 are sealed behind a recorded SHA-256 and have never been generated on, labeled, judged, or read.

The models

The 35M is a 35,045,888-parameter T5: d_model 512, d_ff 2048, 6 encoder and 3 decoder layers, a 6,985-token compact vocabulary, tied embeddings. GSG continued from the span-corruption pretrain to step 3,000 on body-to-title pairs. The FLAN row is not untouched stock: it is FLAN-T5-small (77M, Apache-2.0) after the title fine-tune from run 5 of our earlier distillation campaign, where it served as the capacity reference. Stock google/flan-t5-small is the same family; the shipping bundle pins one exact checkpoint by SHA-256.

The judge

Gemini 3.5 Flash-Lite scores blind: it sees the task and anonymous candidate titles in randomized order, reference labels hidden, and rates 1–10 for whether the title would help you find that tab again. Useful is 4 or above, fail is 2 or below. An earlier hand-scored 90-task packet ranked systems the same way but with harsher absolute numbers (Hybrid A 56% useful, 12.7M 13%), so trust the ranking and the gaps, not any single percentage. Latency is the median of 50 single-title runs, generate on Apple MPS, centroid on CPU.

What the centroid actually is

Not magic, and honestly, not even trained. The highlighter owns a 512-dimensional embedding table for the 6,985-token vocabulary. Each content word of the task body (stop words and short tokens dropped) becomes the mean of its subword rows, normalized. The centroid is the normalized mean of those word vectors. The title is the two or three words with the highest cosine to the centroid, printed in document order, capitalized.

The table is the seed-42 random initialization of the 35M, frozen before any gradient ever touched it. We tried training embeddings with a cosine objective and they collapsed; the untrained table as a filter is what survived. So the mechanism is closer to a random projection voting on which words share the page’s token statistics than to learned semantics. It costs 13.6 MiB of matrix plus 2.3 MiB of tokenizer, runs in 0.8 ms, and beats the 12.7M neural incumbent by 1.2 judge points. That result is the quiet embarrassment of this whole campaign, and we are shipping it.

The glue

Hybrid A takes up to two content words from the 35M GSG title that actually appear in the task body (substring matches count for words longer than three characters), deduplicates, then fills to three with centroid nouns. If the namer contributes nothing that survives the in-body check, the centroid words stand alone. The same frozen rule with FLAN as the first source is the 16 GB Mac recipe. The stop list, token regex, and 2+1 fill rule are locked; changing any of them requires a new scored packet.

Dead ends, so nobody repeats them

Labels, with the input

Input.
can anybody recommend some really good resources for how to get Apache authenticating users with Kerberos. Background reading on Kerberos would also be useful Thanks Peter
12.7: Java EE (2) · Centroid: Anybody Thanks Peter (1) · Hybrid A: Anybody Thanks Peter (1) · FLAN: KerberosAuthorization (9) · FLAN+cen keeps Kerberos + a body noun
Input.
I need a C# profiler. Although I'm not averse to paying for one, something which is free or at least with a trial version would be ideal since it takes time to raise a purchase order. Any recommendations?
12.7: Java EE (1) · Hybrid A: C# Ideal Raise (2) · FLAN: C# Profiler (10)
Input.
Does anyone know a method to programmatically close the CD tray on Windows 2000 or higher? Open CD tray exists, but I can't seem to make it close especially under W2k.
12.7: Read File Java (1) · Hybrid A: Windows Tray Open (8) · FLAN: Programmatically Close CD Trace (8) · glue: Programmatically Close Tray
Input.
I'm familiar with SQL Server Indexed Views (or Oracle Materialized Views), we use them in our OLAP applications. They have the really cool feature of being able to usurp an execution plan…
12.7: SQL Server Query (6) · Hybrid A: SQL Server Familiar (6) · FLAN: SQL Server Indexed Views (10)

FLAN names the job. Centroid highlights nouns that are already on the page. 12.7 invents a stack. Hybrid A is a highlighter with an occasional stack word from GSG. FLAN+centroid is a namer whose off-page junk gets replaced by nouns.

Appendix A: the whole packet, in numbers

Summary statistics over all 1,000 clean-dev tasks, one blinded seven-way Gemini call per task. Gold is a score of 8 or higher. Unique titles counts distinct strings across the 1,000. Top-title mass is the share of the single most repeated title, the collapse detector that killed earlier recipes. No system emitted an empty title. W–L is paired wins and losses against FLAN+centroid on the same task; the remainder is ties.

SystemMeanMedianUseful ≥4Fail ≤2Gold ≥8Unique titlesTop-title massvs FLAN+cen (W–L)
12.7M (in the app today)3.01230.5%53.9%3.8%3188.7%158–764
Centroid only4.21455.1%22.6%9.0%9990.2%113–536
Hybrid A4.72564.0%16.6%12.4%9970.2%246–449
12.7 + GSG + centroid4.70564.3%18.5%13.0%9880.4%257–469
FLAN-T5-small5.22567.7%18.3%25.2%9750.6%374–427
FLAN + centroid5.43677.4%9.9%18.4%9980.2%

FLAN keeps the gold medals (25.2% of its titles score 8 or higher, against 18.4% after the glue) yet still loses the pairing 374–427. The glue trades peaks for consistency: median 6, fail under 10%. The 12.7M’s median score is 2.

Appendix B: thirty tasks, six labels each

The first 30 rows of the scored packet in file order. No selection, no reordering. The number in parentheses is that title’s blind Gemini score on the task. Triple is the 12.7 + GSG + centroid stack.

Task (first words)12.7MCentroidHybrid ATripleFLANFLAN+cen
Does anyone know a method to programmatically close the CD tray on Wind…Read File Java (1)Tray Open Especially (2)Windows Tray Open (3)Windows File Tray (2)Programmatically Close CD Trace (8)Programmatically Close Tray (8)
How would I disable and later enable all indexes in a given schema/data…MySQL Database Table (2)Enable Make Sqlldr (5)SQL Enable Make (5)SQL Database Enable (6)Debug SQL Dadurch (1)SQL Enable Make (5)
I have a method which takes params object[] such as: ``` void Foo(param…Object Array (6)Params Arrays Param (6)Params Arrays Param (6)Object Params Arrays (7)Fix Params Error (5)Params Arrays Param (6)
1. What are the patterns you use to determine the frequent queries? 2.…JavaScript Code Coverage (1)Patterns Frequent Factors (6)select Patterns Frequent (6)select Patterns Frequent (6)Optimize Routings (2)Patterns Frequent Factors (6)
For the past 10 years or so there have been a smattering of articles an…Java EE (1)Past Years Discussion (5)Past Years Discussion (5)EE Past Years (1)Research Nature Of Order (7)Nature Order Past (5)
I'm writing an inner loop that needs to place `struct`s in contiguous s…Detect Exception Handling (1)Cost Plus Members (3)Cost Plus Members (3)Cost Plus Members (3)Containerize Structures (7)Structures Cost Plus (5)
Using reflection in .Net, what is the differnce between: ``` if (foo.Is…Java EE Objects (1)Reflection Net Differnce (8)Net Reflection Differnce (8)Net EE Reflection (2)Fix Fixing Ibar (3)Ibar Reflection Net (7)
I have a C++ tool that walks the call stack at one point. In the code,…Java Object Memory (1)Addrstack Addrframe Addr (6)name Addrstack Addrframe (6)name Addrstack Addrframe (6)Fix CLI Blocks (2)Blocks Addrstack Addrframe (6)
How can one detect being in a chroot jail without root privileges? Assu…Detect File Download (1)Low Detection Difficult (3)detect Low Detection (3)detect File Low (3)Detectchroot Proxy (3)Detectchroot Low Detection (5)
This is mostly for fun and to play with what stackoverflow itself is ca…JavaScript Software Development (1)Mostly Fun Translated (3)Mostly Fun Translated (3)Mostly Fun Translated (3)Update Taskoverflow (2)Update Mostly Fun (2)
The exact error is as follows > Could not load file or assembly 'Micros…Detect File Upload (1)Culture Neutral Month (2)filename Culture Neutral (3)filename File Culture (2)Fix Sql Format (7)Sql Format Culture (6)
Does anyone know where online copies of the old articles can be found?…Java Web App (1)Online Copies Subject (3)Online Copies Subject (3)Online Copies Subject (3)Old Articles (8)Old Articles Online (8)
How can I find the high water mark (the historical maximum number of co…Javascript Arrays (1)Water Historical Concurrent (5)current number Water (4)current number Water (4)Find High Water Mark (10)Find High Water (8)
How do I make it so `mailto:` links will be registered with my program?…WPF Control Control (2)Mailto Registered Independent (8)Mailto Registered Independent (8)Mailto Registered Independent (8)EmailTo Link Register (6)EmailTo Link Mailto (6)
I started an application in Google App Engine right when it came out, t…Java EE Application (3)Technology Pet Www (3)Technology Pet Www (3)EE Technology Pet (3)Google App Engine Issues (8)Google App Technology (7)
A poorly-written back-end system we interface with is having trouble wi…WCF Service Service (3)Poorly Continues Submission (2)user Poorly Continues (2)user Service Poorly (3)Backend Loading (6)Backend Loading Poorly (5)
This query works great: ``` var pageObject = (from op in db.ObjectPermi…Query LINQ SELECT (7)Pageobject Page Pagename (5)Pageobject Page Pagename (5)Query Pageobject Page (7)Single OrDefault (3)Single OrDefault Pageobject (3)
If I want to inject a globally scoped array variable into a page's clie…JQuery Array Objects (3)Inject Globally Populate (4)can array Inject (3)can array Inject (3)Globalized Array Variable (5)Array Variable Inject (5)
I have been looking at metrics for [coupling](http://www.ibm.com/develo…JavaScript UI Design (1)Metrics Wikipedia Feel (2)java Metrics Wikipedia (3)java JavaScript Metrics (3)Logic Models (2)Metrics Wikipedia Feel (2)
I'm about to start on a large Qt application, which is made up of small…ASP Net Application (2)Smaller Developed Integrated (2)Smaller Developed Integrated (2)Application Smaller Developed (2)Create Qt Sub Folder (8)Create Qt Smaller (7)
I have written some code in my VB.NET application to send an HTML e-mai…NET Framework Framework (2)Lost Spam Badly (5)NET Code Lost (5)NET Code Lost (5)Fix Email Spacing (7)Email Lost Spam (6)
We are using classic asp to call a C# dll and in the C# dll we are usin…Object List (2)Printing Printersettings Administrators (6)list C# Printing (7)list C# Printing (7)List Printers (6)List Printers Printing (6)
In the uncompressed situation I know I need to read the wav header, pul…ASP Net Session (1)Rate Samples Simpler (3)net framework Rate (4)net framework Rate (4)Workflow Automation (2)Workflow Rate Samples (2)
When running one of our software, a tester was faced with the data exec…Java EE Application (1)Software Purposes Kill (3)Windows Software Purposes (3)Windows Application Software (4)Debug Deploy (5)Debug Software Purposes (3)
Without getting a degree in information retrieval, I'd like to know if…Javascript Objects (2)Degree Feel Attempted (3)NET Degree Feel (5)NET Degree Feel (5)Textfrequency Sentiment (7)Textfrequency Degree Feel (6)
I know I can do this: ``` IDateTimeFactory dtf = MockRepository.Generat…ArrayList Objects (2)Arbitrary Minute Ditto (5)return value Arbitrary (5)return value Arbitrary (5)Fix DateTime (7)DateTime Arbitrary Minute (8)
I'm developing a compiler framework for .NET and want a flexible way of…NET Framework Development (8)Developing Involved Goals (4)NET Framework Developing (8)NET Framework Developing (8)Pipeline Compatibility (6)Pipeline Developing Involved (7)
can anybody recommend some really good resources for how to get Apache…Java EE (1)Anybody Thanks Peter (2)Anybody Thanks Peter (2)Anybody Thanks Peter (2)KerberosAuthorization (8)KerberosAuthorization Anybody Thanks (8)
I've been quite used to working on small projects which I coded with 1,…Java EE (1)Organization Keeping Organized (5)programming Organization Keeping (5)programming EE Organization (3)Organizational Issues (6)Organizational Organization Keeping (5)
I'm playing around with a native (non-web) single-player game I'm writi…Detect Plugin Script (1)Playing Discourage Players (5)Playing Discourage Players (5)Playing Discourage Players (5)multiplayer multiplayer (2)multiplayer Playing Discourage (4)

Cost, honestly

FLAN-T5-small is T5-small trained on C4 at Google, then instruction-tuned on more than 1,000 FLAN tasks on TPU v3/v4 pods. The 296 MiB file is that entire stack, Apache-2.0. It is not a weekend 77M. Our 35M pretrain, GSG, and all judging ran on one rented RTX 6000 Ada at $1.57/hr plus a few dollars of Gemini calls: tens of dollars total. Hybrid A is close for a pretrain. It is not a peer of FLAN as a recipe. It is the model that fits next to an A18 without pretending we have a Pro’s memory. The 16 GB Mac borrows the summarizer and keeps the highlighter. Phone-class silicon keeps the highlighter and the 35M we trained.

One rule changed to say this out loud: our evaluation preregistration stated that FLAN was a benchmark only and this project would ship only its own model. That rule is overridden by an explicit owner decision, recorded here. The shipped contribution is the centroid table plus the in-body glue, which cut FLAN’s fail rate from 18% to 10% and lifted useful from 68% to 77%. We are not marketing a from-scratch 35M win, because there is not one.

What we are not claiming

Ship path

Two bundles, one combiner, pick the namer by RAM. Not a third model.

New workers. Do not reuse the 12.7 ONNX graph (2 decoder layers, 6,985-id vocab) for FLAN, which needs its full 32k vocabulary and 8+8 layers. Sanitize into the 1–3 word [A-Za-z0-9 ] contract before rejecting, and fall back to centroid if sanitizing empties the title. First release runs in shadow mode: compute, log, keep showing the current title. Then switch on. Details: FLAN_CENTROID_HANDOFF.md in the PorkiCoder checkout.