Tuesday, October 31, 2017

Change Log: 2.47.897

Tablet QA by lantern light.
Release 2.47.897 of the Manager fixes a handful of bugs (including a major one that prevented Settlement Sheet milestones from being saved) and introduces the concept of lifelong subscriptions to the Manager.

At present, I have no plans to require users of the Manager to pay to use it. The Manager will remain totally free to use as long as I am maintaining it.

Starting with release 2.47.897, however, users will have the ability to purchase what I am calling a "lifetime subscription" for either $1 or $5 (US) from my Shopify.

The license is good forever and is intended primarily as a way for users to show their support for the Manager: on average, I get one or two emails a month from people who say that they would like to support the project financially, and these "lifetime subscriptions" are mainly for them.

In order to provide some incentive for others, however, I plan to start rolling out some new features that will only be available to those who have purchased the $5 license (the carrot) and restricting certain functionality to those who have purchased the $1 license (the stick).

Feel free to contact me directly on the Manager's Twitter or over at /u/toconnell on Reddit with any questions/comments/concerns.

And thanks for using the Manager!

Corrections and Fixes

  1. Fixed a bug where setting survivor bleeding tokens greater than 0 defaulted them to zero. -Khoa
  2. Fixed a comparison bug in the Settlement object's get_available_fighting_arts() method that could cause the Settlement object to fail to serialize().
  3. Survivor object normalize() now adds the 'favorite' key to legacy survivors, preventing AngularJS console errors.

Application Enhancements

  1. Added the new/experimental Hunt Phase randomizer (currently only accessible to application admins).
  2. Removed the code from session.py that allowed the legacy webapp to return departing survivors.
  3. Replaced AngularJS controls in settlementSheet.py for adding/removing milestones. 
  4. Improved the error handling in the kdmManager.js main showHide() method (so that it logs errors, rather than just...experiencing them haha).
  5. Added a Subscription plug to the top of the Dashboard's setting section.
  6. The Dashboard ('Settlements' heading) and the sidenav/burger have been updated to block non-supporters from creating more than three settlements.
  7. The legacy webapp will no longer let non-supporter users create more than three settlements. Legacy users are grandfathered in.

API Development

  1. The User object, when serialized, now includes whether the user is an admin of the application.
  2. Adding the 'Enfeebled' disorder to a survivor now sets their max bleeding tokens to four.
  3. Created two new routes (add_milestone and rm_milestone) for adding and removing milestone handles.
  4. Migrated Milestone Story Event management to the API:
    1. Wrote a convert function to convert Milestone Story Events from names to handles (models.settlements.Settlement.convert_milestones_to_handles()) and included in it in the Settlement class normalize() routine.
    2. Models.GameAsset.get_asset_from_name() now supports the 'raise_exception_if_not_found' kwarg (just like it's handle-based counterpart).
    3. Documented the new routes.
  5. Added the most recent milestone (''most_recent_milestone") element to the serialized settlement's 'campaign' element.
  6. Requests to the generic /collection/action/asset_id route that DO NOT include an Object ID get an automatic 400 back before any processing. -Khoa
  7. Upgraded the utils.email_exception() method to be able to send alert emails even when it doesn't have a user request (i.e. User object loaded into the request).
  8. settlements.Settlement.set_showdown_type() now has a 'showdown_type' kwarg, and can be called from anywhere (e.g. outside of a primary request).
  9. The "First Story" (specials) macro now sets the showdown type.
  10. Added set_patron_attributes() method to the User class.
  11. Updated admin.py to support CLI user patron attributes
  12. Added user patronage details to the API admin panel
  13. Created a new type of User object serialize() method called 'admin_panel' that a.) gets you a dict back and b.) replaces a bunch of the customization in the panel.py Admin Panel user retrieval method.
  14. Moved a bunch of data retrieval methods from the normal serialize() return for the User object (i.e. the None-type return) into the 'admin_panel' return (should speed things up).
  15. Updated the Settlement class's new() method to 405 requests to make new settlements for non-supporters who want to make a fourth settlement.
  16. Wrapped up LO's ticket re: updating the campaign summary facts.


  1. So let me get it right, you're going to beat $1 supporters with a stick? Glad I'm at $5 then :)

    1. Yeah! Thanks again for your support!

      At this point, you don't really get much for your five bucks, but starting this coming week (e.g. a week from today or thereabouts) I plan to roll out the first subscriber-only feature (which will be a Hunt Phase helper).

      If you're interested, I've got a kanban board started for the subscriber-only features, that should help you understand a little bit more about what I've got planned: https://github.com/toconnell/kdm-manager/projects/3

      Thanks again!

  2. Those who talk the talk must also walk the walk. 5$ paid. Also forwarded to my stiff friends :)