Well it's Toady's decision anyway:) I think a lot of info is unimportant to store but i am not a developer of dwarf fortress:)
"Important" generally means "is used for something" (except for the engraving/improvement data, which is purely aesthetic, but still reasonably important, although I still don't think it's justified for coins,) so it's not likely to be changed.
Anyway, I've already said how you can keep
every bit of data in a stack that could be held by items individually back in the front page, so there's no reason we can't stack.
Topic for discussion:
Coins have their coin batch index (year for dwarves) and the material, but there's also ownership, contaminants, temperature, damage, age, storage information, maker id, flags based on if your fort owns/made it, melt/dump/forbid/hide designations, job information.
What would you say can be offloaded, converted to the stack info, or dumped. Every one of those has to be one of the three.
Well, assuming I am correct in interpreting that "offloaded" means "it's got a pointer to manufacturing data" and "stack info" is "the stack applies this data to everything in the same stack", and "dumped" means "Screw it, we don't need to track this at all", then...
- Coin batch index and material data - offload (Although possibly having some sort of generic "item type" data that would be stack data. That way, you don't have to search where the pointer points to see something very basic like "this is a bolt stack" when you're looking for something like iron bars.)
- ownership - stack
- contaminants - stack
- temperature - stack (Actually, should this be by stack, or by tile, anyway?)
- damage - ***
- age - offload
- storage information - stack
- maker ID - offload
- fortress or import flags - offload
- melt/dump/forbid/hide designations - stack
- job information - stack
*** Damage is the only problematic one. Items in the same stack with one another should probably be damaged the same, but the problem is that they will all start with different damage values. Probably, the best way to really handle this is to make every individual item in the stack have its pointer to the offloaded data, the number of items exactly like that, and also a damage value.
Edit from a long time later:
Actually, you could track item wear or damage more abstractly, if you don't mind a loss of granularity over some types of items. (If you are stacking them, anyway, then you shouldn't be all that concerned with granular details.)
Simply track an abstract "Average" wear or damage number, and then a "Standard Deviation" number, and bell-curve the results abstractly. Hence, throwing a badly damaged item into a stack of reasonably well-maintained items will result in not just a drop in the average wear, but also a spike in the standard deviation, so the bell-curve will be spread out, and abstractly include plenty of low-wear items as well as a few outlier damaged items.
Dwarves could simply draw at random or puposefully pick the most damaged or most repaired ones as specified (so that if they are looking for socks in a sock pile, they would probably want to pick the least threadbare socks to own for themselves).