I think this is the last version I'm going to make. I added a tiny (3x2mm) switch to the V3 board to allow you to select the brightness/run-time at startup. You can see the switch in the upper right, just above the incorrect "V3.0" silkscreen text (I fixed this since these boards were made). It basically fits in a 1206 footprint! The Cree XPE2 is on the left, with the OSLON Signal Verde LED on the right. I didn't make a V3.1 PCB for the Luxeon C LED. The Eagle files and gerbers are in GitHub.
The switch was added to go with the new C-code. The code allows you to tune the brightness when you first insert the battery. Pressing the switch cycles between 1-10 year burn rates. You get a preview of the brightness for 4 seconds, then the LED blinks out the run-time in years (e.g. four blinks = four years). Once you let it cycle uninterrupted three times, the brightness gets locked in until the battery is removed.
The code also has some additional enhancements (some are enforced in the makefile). Most importantly, the code fits into the lower half of flash memory, which is write-protected in the configuration bits. This prevents accidental over-write of the code by an errant program. The code has to write to program flash memory to store the brightness mode, since there is no EEPROM on this part. To make things safer, the brightness mode is stored in the upper half of flash (read/write), with the code itself safely in the lower half. Microchip probably could have provided a finer granularity on their write-protection (all/none/half), but the part is what it is.
The V3.1 is identical to the V3.0 except for the switch. This particular switch is available in three different activation forces (100g, 160g, 240g). I have samples of the 160g and 240g, and am not sure which I like best. They both seem to work OK:
(160g) KXT 321 LHS switch, DigiKey part #CKN10778CT-ND, $0.25 each
(240g) KXT 331 LHS switch, DigiKey part #CKN10779CT-ND, $0.25 each
I'm still tweaking the automatic brightness tuning script. I'll be posting that soon.
I'm also going to run a head-to-head experiment to answer the question: "why don't you just use an LED and resistor".