This serves as a living task list document for Never Locky

Features:
    Create a main housing frame that is capable of being shown and hidden using a button or console command - done 
    Add a nice label to the top of that frame to display the name of the addon. - done
    Build a scroll bar that is capable of scrolling up and down - done
    Build a Modular Frame template that can be used to house the information for each member of the raid. - Failed
        The XML used for this got very complex very quickly, decided to look for other alternatives.
    Scrap the scroll bar in favor of building one from scratch using the widget API. - done
    Build a Modular frame that can be used to house the raid member's information - done
    Add a nameplate to the Modular frame template - done
    Add a portrait to the Modular frame template - done
    Add a curse asssignment control to the template - done
    Add a curse graphic that updates in real time based on the selection choice - done
    Add a banish contrl to the template - done
    Add a banish target graphic that behaves like the curse graphic - done
    Add a soul stone target selector that is fed by the members in the raid - done
    Decouple the data from the frames by creating a warlock table object that can be used to drive the ui as a datamodel - done
    Add the ability to get a particular frame by id - done
    Add the ability to update a frame using a warlock table object - done
    Increase the capacity of the locky friend frames to 40 - done
    Rework how the locky friend frames are identified to prevent possible collision with other addons.- done
    Add an update all function to implement one-way binding from the warlock collection to the UI. - done
    Add a Test function to simulate adding and removing players from the raid. - done
    Need to add default assignments inside of a function - done
    Added and set up a refresh for soul stone tracker. - done
    Add the ability to communicate with other NeverLocky addons in the raid. - done
    Added table serialization / deserialization to allow for passing data back and forth - done  
    Refactor - Need to split up all my objects and get things moved into modules because this code us U G L Y. - done... plot twist this code is still ugly....
    Need to wire up soul stone CD to the GetItemCooldown api call - done
    Wire up SS cooldown sharing via comms - done
    Redefine the MVP -
        Addon needs to get all the warlocks in the raid and display them in the UI.
        The addon then needs to update in "real time" when someone modifies an assignment.
        The addon should display soul stone cooldowns in near real time.
        The addon should have an is dirty detection to see if user has made changes.
    -DONE DONE DONE
    Add a commit button for if data is to be saved. - done
    Need to apply the data changes submitted through the messaging channel and make some decisions on the distibuted ledger of it all. - done
        -This was accomplished by using timestamps, the newest data gets loaded over the old data.
    possible issue - Not sure what happens in raid mode if a player leaves / moves in the raid. The SS target info may become corrupt. - DONE
        This issue is confirmed, and needs to be addressed prior to the original release of the addon.
    Set Default assignment to "None" if the assigned value is no longer selectable. - done
    Need to fix the cancel button to undo changes. - done
    Move all print statements into a debug mode. - done
    There exists a situation where a warlock may join the raid and would not be included in the UI. - done
    Ship this thing already.... - done
    Resolve a race condition that removes all warlocks from the screen.
    There appears to be some kind of timestamp issue involving saving changes as well as soulstone cooldowns.
        There an issue on receiving SS CDs.
        Ok, the issue is that GetTime() is broken for what I am trying to use it for, it worked local but that is because it is messed up.
        - done. This was solved by pushing a watch sync type thing. I don't know for certain if it actually works though....
    Issue - SSCD are now showing proper, but only for a limited time. after the window is closed and reopened something corrupts.
        - fixed by adding a forced SSCD update lookup on broadcast SSCD requests.
    Add Tanks to SS assignment dropdown. - done
    Issue - Spell texture does not render on non-warlock characters.
        This is because I am using the Get Spell Texture by name overload. If I instead pass a spell ID then it will display properly. - fixed
    Assignment confirmation
        Ask for confirmation - this will require a confirmation frame to be added.
            User has updated the UI and has requested confirmation from all other users.
            the addon will broadcast to the users to accept the assignments - Kinda done                
        Need to wire up accept function - done
        Need to wire up reject function - done
        Need to add code to detect state changes only. - done
        Need to add code to display acceptance state - done
    Add a solo mode. - done
    Add versioning system to detect out of date addons.
        wire up something to display to users that their addon is out of date. - Done
        wire up something to display to users if other's addons are out of date. - Done
        disable broadcasting assignment changes for out of date addons - Done
    No longer auto close the main assignment screen. - Done
    Issue - If I reload the UI then it nukes everything because the addon has not initialized or loaded data. - Done
    Added a personal monitor frame to allow people to see thier assignments easily.
    Added the ability to announce assignments to the group of choice.
    Need to add macro for curse button.
            - If the NL Curse Macro does not exist.        
                - Create the macro when the user accepts the assignment.
            - If the NL Macro exists then update it to the appropriate spell.
    Reduced global taint.
        Replaced the underlying architecture of all of the drop down menus to get away from blizzards non-taint-safe implementation.
        This was a bear, about 6+ hours worth of work to replace the vast majority of my globals with a single global. 
        There is still some taint according to the taintlog but it is no longer as eggregious as it was.
    Added the ability to send assignments to custom channels.
        Custom channels are registered when the UI is pulled up.
        Channels are properly added or taken away if the user leaves them.
    Issue - Need to fix whisper announcements
        - Done..... I noobed out on that one.... .Net would never have allowed that to ship.
    Feature Update - Added mouseover capability to the assignment macro.
    Remove the filter on soulstone recipients.
           Added a sort to the list and color coded names based on classes.

ToDo:
    Add a notification system the will show messages when action is needed I.E - SS needed, Curse Needed, Banish wearing off--
        How to determine if an SS is needed in the raid?
            Check all SS targets that have been assigned.
                IF the target has no SS AND the you have an SS available then pop up a notification?
                If the target has an SS and you are assigned to SS that target then we can add a timer to the assignment monitor sub-screen. 
                    (change name to red font vs green with a timer.)
                    How to determine timer... 
                    Need a way to store addon users vs non addon users.
    
    Need to add event subscription to update the ui if the raid state changes. (only if the addon is showing.)

    Issue - If a raider leaves and the assignments are taken away then portaits can be sticky. Not sure if this will affect it in raid mode.

    Issue - There is a race condition that is liable to cause data corruption but I need to track it down.
        Steps to reproduce:
            3 addon users need to be in the raid, and 2 of them need to /rl at the same time.
            Can also be recreated in the case of mass DC. 

    
