CHANGES
=======

0.4.1
-----

* Update the copyright year in the LICENSE file
* Fail selftest if anything is written to stderr
* Close included files after reading
* Close data files after reading
* Adjust Telnet echo state on connection replacement
* Ignore warnings building PyYAML wheels on 3.10.0b4
* Update copyright year in built documentation
* Use build instead of setup.py
* Update test warnings for Python 3.10.0b2
* Update test warnings for Python 3.9.5 and 3.10.0b1
* Alphabetize entries in command data file

0.4.0
-----

* Be more robust with elapsed time counter
* Retry client connections in selftest
* Don't wait during selftest process cleanup
* Don't leave dangling file descriptor in selftest
* Make dist checking directory-agnostic
* Get more granular with Python warnings in tests
* Use consistent spacing in tox variables and lists
* Stop setting a default install command for tox
* Don't check spelling in data directory
* Lint autogenerated YAML
* Use twine's strict mode
* Stop trying to use PYTHONWARNINGS=error for now
* Add descriptions to tox testenvs
* Stop using the tox-venv plugin
* Correct package metadata
* Bind to loopback interface by default
* Use released codespell
* Switch the selftest dialogue to a normal dict
* Use PosixPath arguments with os.remove()
* Always use ModuleNotFoundError
* Drop support for Python 3.5
* Move debug warning from setup to load
* Incorporate pending logs from load during reloads
* Reorder loglines fields

0.3.0
-----

* Recast is\_restricted() to a bool
* The del and return statements aren't functions
* Support Python 3.10
* Don't fail dist or docs builds on deprecations
* Replace show result with debug evaluate command
* Run different selftests when debug mode is engaged
* Add warnings about debugging mode
* Add restricted debug mode
* Make selftest dialogue mutable
* Skip spellcheck on logfiles
* Add is\_restricted boolean check for commands
* Add is\_admin method to Element and User classes
* Streamline can\_run access control method

0.2.1
-----

* Check for warnings in the to dist env
* Explicitly close files opened by selftest
* Handle early wrapping in test\_show\_result
* Drop redundant master\_doc setting from Sphinx conf
* Switch tox to use allowlist\_externals
* Start checking codebase with the codespell tool

0.2.0
-----

* Revert "No longer run setup.py in docs builds"
* Ratchet down Python warnings in tox
* No longer run setup.py in docs builds
* Set python\_requires
* Correct package metadata
* Report if service does not start under selftest
* Prefer importlib over pkg\_resources
* Record the reported rows from NAWS negotiation
* Obtain terminal type (RFC 1091)
* Overhaul coder guide, add commands and misc
* Start the install guide
* Add the beginnings of an admin guide
* Collapse redundant exceptions
* Indicate support for Python 3.9
* Link the ChangeLog from package metadata
* Drop section numbering from documentation builds

0.1.1
-----

* Make sure all command functions return True

0.1.0
-----

* Increase timer resolution in test config
* Use call\_hook\_function() in handler\_active()
* Preserve loglines on reload
* Set bandit to error on risks of any severity
* Whitelist uses of stdlib random module for bandit
* Clean up function names in menu definitions
* Ratchet bandit checking down to medium severity
* Replace eval() and exec() use for menu functions
* Relocate main\_utility menu functions
* Relocate delete\_avatar menu functions
* Relocate delete\_account menu function
* Relocate choose\_name menu functions
* Relocate choose\_gender menu function
* Relocate checking\_new\_account\_name menu functions
* Relocate activate\_avatar menu functions
* Add a mudpy.menu module to hold menu functions
* Move selected menu item into the User object
* Rename state variable in get\_menu\_choices()
* Remove exec() from handle\_user\_input() function
* Eliminate exec() in Universe.new()
* More thoroughly test account and avatar menus
* Properly escape punctuation in test patterns
* Tighten up eval() scope in show result subcommand
* Replace uses of exec() in module loader
* Use generic authors for copyright shown in docs
* Update copyright for files edited in 2019
* Satisfy yamllint checking of .yamllint

0.0.2
-----

* Log User object ID even when account is an admin
* Log starting directory during initialization
* Separate listening port in startup logging
* Disable usedevelop for some tox testenvs
* Correct reference to main config in walk-through

0.0.1
-----

* Add info on what's missing and included
* Add a demo walk-through to the coder guide
* Recommend the tox-venv plug-in
* Link API documentation in the coder guide
* Drop Python 3.4 and add 3.8
* Update minimum PBR for setup\_requires
* Improve preferences display
* Support abbreviating portal names when moving
* Provide normal error if command raises exception
* Safely log when a command error cannot be sent
* Correct data type for see\_also command facets
* Show possible abbreviations in help list
* Correct logged error for missing action function
* Make command actions implicit
* Dereference command action functions
* Test the show result command
* Correct a TypeError in the show time command
* Always pass parameters in commands
* Don't allow abbreviating administrative commands
* Show full command name in help output
* Implicitly support abbreviating commands
* Allow including time in the active state prompt
* Escape replacement macros in preferences
* Test that macros are escaped in communication
* Use the active state prompt as the default prompt
* Add a prompt generator method
* Fix selftest telopt callback for Python 3.4
* Use ISO 8601 time in logs
* Test for high-severity vulnerabilities with bandit
* Test with the bugbear plugin for flake8
* Fix comparisons for pyflakes 2.1
* Safely log unknown Telnet options and commands
* Be explicit about test requirements in tox.ini
* Switch to passlib.PasswordHash.hash
* Add support for user preferences
* Add 2019 to copyright for docs and license
* Rename command.set to command.c\_set
* Support using tox-venv for testing
* Rename debug testenv to demo and use sample config
* Use yamllint --strict when called from tox
* Move commands into a separate command module
* Update admin command help for new data model
* Alphabetize the \`help show\` subcommand entries
* Don't LBYL when creating missing data directories
* Try to make missing pidfile and logfile parent dir
* Update copyright dates for files changed in 2018
* Add navigation links to Sphinx config
* Reorganize Sphinx config
* Clarify Python version support in README
* Generalize copyright headers in files
* Add AUTHORS file to wheel
* Remove docutils dep in tox dist testenv
* Switch to \`twine check\` in tox testenv:dist
* Add debug logging for Telnet protocol negotiation
* Expand logging for User class methods
* Support clients using CR+NUL to signal EOL
* Add a "debug" testenv
* Streamline selftest output
* Clean up leading space typo in test title
* Drop Python 3.3 support
* Add signed artifact URL to Python package metadata
* Clean up tox.ini
* Apply correct Python version in tox base envs
* Test the default example config
* Add py3 to the default tox env list
* Run the selftest in base tox testenvs
* Optionally manage a daemon during selftest runs
* Resolve included files only once
* Fix deprecated regex pattern syntax in selftests
* Clean up at the end of every selftest run
* Overhaul data reloading
* Include "docs" in default tox envs list
* Check readme suitability for PyPI
* Rename "initial" state to "telopt\_negotiation"
* Test that ANSI input is filtered
* Only wrap on actual spaces
* Filter non-ASCII input when not in binary mode
* Retool word wrapping
* Include show version in help
* Clean dist directory in tox dist environment
* Add version command and diagnostic logging
* Provide a dist environment for tox
* Indicate Python3.7 support
* Note platform in package metadata
* Add keywords to Python package metadata
* Include license info in Python packages
* Update URLs in package metadata
* Correct metadata entry for README
* Clean build directory in tox docs environment
* Update copyright year in LICENSE
* Add copyright to api.rst
* Add copyright to .yamllint
* Add a docs tox env
* Track doc building dependencies
* Add Sphinx configuration
* Include a documentation index
* Include license text in documentation
* Include generated changelog in docs
* Basic API documentation
* Include the mudpy logo
* Add client configuration notes
* Document the data model
* Add configuration guide
* Update coder guide for new site redirects
* Standardize formatting for the coder guide
* Switch to extensionless README and LICENSE files
* Reformat README.rst
* Test that unknown telnet commands are filtered
* Fix TypeError with IAC escaping
* Trim readme file
* Update login and banner art
* Test sample data style with yamllint
* Indent block sequences in emitted files
* Convert mappings and sequences from flow to block
* Disconnect user on ConnectionResetError
* Be careful about marking facets modified
* Use "group" instead of "category"
* Drop old-style Element support
* Convert sample data to new style
* Use new style for menu definitions
* Convert command Elements to new-style
* Switch archetypes to new-style Elements
* Switch internal counters to new-style Element
* Switch actors to new-style elements
* Handle connection reset in selftest
* Make new-style facet deletion more robust
* Catch Exception when necessary
* Clearer selftest errors on disconnection
* Use new-style elements for accounts
* Fix unhandled exception in show file command
* Display flags in show files output
* Clean up a stray comment in find\_file
* Add descriptions to sample datafiles
* Move sample datafile copyrights into metadata
* Data nodes starting with "\_" are metadata
* Interpret a "." prefix as the startdir
* Overhaul data management to get rid of \_\_control\_\_
* Error if set command is used on read-only element
* Refuse to alter read-only elements at runtime
* Track whether loading is underway
* Test the set command
* Use writeable element in show element test
* Update copyright dates for files changed this year
* Rename internal:storage to .mudpy.filing
* Stop unnecessarily stripping quote marks
* Explicitly configure the root\_path in examples
* Log missing file inclusions as more severe
* Fix file pathing in daemon mode
* Rename internal:time to .mudpy.timing
* Switch example listening port from 6669 to 4000
* Fix facets method to give new-style relative names
* Use importlib in place of imp
* Reduce the log message priority for reload calls
* Exercise the reload command in tests
* Switch quoting styles to reduce escaped quotes
* Use raw strings when escape sequences are needed
* Correct name of the custom loglevel test
* Handle ValueError when setting incorrect type
* Coerce loglevel facet to int when updating
* Clear vestigial ord() calls in telopt negotiation
* Stop using vary\_rounds with passlib
* Guard against KeyError on universe.contents index
* Enable initial admin account in example config
* Ignore unpacked \*.egg directories
* Modernize coder documentation
* Add a generic tox env for sdist generation et al
* Add a suitable test config for the daemon
* Package the self-test script as an entrypoint
* Correct filesystem permissions on daemon module
* Make the self-test script importable
* Add missing copyright/license notices
* Support running flake8 under tox
* Package the daemon executable as an entrypoint
* Make the executable importable
* Create a Python package
* Appease style checks
* Clean up trailing whitespace in documentation
* Move documentation files for packaging preparation
* Move lib/mudpy to mudpy for packaging preparation
* Rename internal:process to .mudpy.process
* Rename internal:network to .mudpy.network
* Rename internal:directions to .mudpy.movement.\*
* Rename internal:logging: to .mudpy.log
* Update README for recent development
* Rename internal:limits element to .mudpy.limit
* Strip extra separators in show element command
* Fix 8-bit Telnet with Py3K
* Rename internal:language: to .mudpy.linguistic
* Implement new style element support
* Test the show element command
* Simplify multiline matching in functional tests
* Fix show element command for Py3K
* Make escape\_macros no-op on nontext values
* Check that functional tests log no errors
* Test that the show log command works
* Fix show log command for Py3K
* Fix recursive BrokenPipeException on disconnect
* Switch basic data loader unit from element to node
* Explicitly invoke Python 3.x in shebang lines
* Test admin account restrictions
* More thorough match on chat mode test
* Test actor movement
* Mention test session capture log file names
* Add timing data to test output
* Test chat mode
* Add troubleshooting note to test failure output
* Break outer loop of functional tests on failure
* Be more explicit with periods in test matches
* Modularize functional testing
* Test sentence capitalization
* Test typo replacements
* Test implicit punctuation
* Read pending bytes before proceeding with test
* Fix punctuation match order and add tests
* Test interaction between multiple connections
* Lay groundwork for more thorough functional tests
* Switch to yaml.safe\_load for better security
* Be more strict about file permission masks
* Accumulate logs if necessary while loading data
* Remove stray non-generic references in sample data
* Switch password handler to passlib's PBKDF2
* Write files directly from yaml.dump
* Remove UTF-8 encoding header from Python files
* Fix type mismatches in save file rotation
* Correct avatar inheritance
* Log missing avatars
* Accumulate logs during setup
* Add a .gitignore file
* Finalize INI to YAML conversion
* Remove the git2gch utility
* Clean up parenthetical spacing in bin/mudpy
* Mark unused import false positives
* Convert sample data directory index to YAML
* Support data directory indices in YAML
* Convert sample prop data file to YAML
* File read-only check supports YAML
* Convert sample area data file to YAML
* Don't unnecessarily recast lists and dicts
* Initialize data file contents on creation
* Convert menu data file to YAML
* Catch exceptions in YAML menus
* Convert command data file to YAML
* Convert archetype data file to YAML
* Begin the transition from INI to YAML
* Correct stray use of location
* Clean up rendering in coder documentation
* Use area instead of location or room
* Simplify coder documentation
* Make exception logging failures more robust
* Be explicit when show result raises an exception
* Tighten exceptions for new sockets and reads
* Fix log spamming on premature socket disconnect
* Stop trying to rename the daemon process
* Wrap long lines without using backslashes
* Clean up docstrings
* Fix reload to use a copy of datafile keys
* Remove unused event code
* Correct copyright date for changelog
* Drop support for Python 2.x
* Clean up imports
* Fix an incorrect TODO comment line
* Recast to unicode when normalizing on Python 2.x
* Byte type comparisons on the output queue
* Import a correct configparser for the interpreter
* Correct byte types and encoding in test script
* Use chr instead of unichr
* Use bytes in process table manipulation
* Use byte type for passwords hash encoding
* Handle byte type on sockets
* Use new 0o notation for octal constants
* The reload function is in the imp module
* Use int type instead of long
* Correct copyright years for change log
* Recast filters when comparing
* Work around lack of dict\_keys index in catch-all
* Work around lack of dict\_keys index in data loader
* Use range instead of xrange
* Use absolute imports in telnet service module
* Use absolute imports in catch-all module
* Use absolute imports in data handler module
* Use absolute imports in package init module
* Use strings not unicode in telnet service module
* Use strings not unicode in password module
* Use strings not unicode in catch-all module
* Use strings not unicode in data handler module
* Use strings not unicode in package init module
* Use strings not unicode in functional test script
* Use strings not unicode in daemon executable
* Use strings not unicode in changelog generator
* Additional style cleanup
* PEP 8 conformance for package init library
* PEP 8 conformance for monolithic library
* PEP 8 conformance for password management library
* PEP 8 conformance for telnet server library
* PEP 8 conformance for data handling library
* PEP 8 conformance for daemon executable script
* PEP 8 conformance for ChangeLog writer script
* PEP 8 conformance for test script
* Back end data storage separation
* Inline literals are more readable in source form
* ASCII Scrub
* Correcting docstring format
* Correcting minor docstring typos
* Secure, extensible, forward-compatable passwords
* Reformatted README for 72 columns
* Change README for new on-line documentation link
* New coder guide document
* Script to generate ChangeLog file from commit log
* Regression testing script
* Cosmetic adjustment to disconnect message
* Proper RFC 1143 Telnet option negotiation queue
* Clarification in README file
* New top-level README file
* Reformat license
* Annual copyright update
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
* Imported from archive
