- Finished implementing relative date parsing and migrated date parsing
from Flag(T) to it's own dedicated module. Additionally added a
the ability to do "recursive" relative operations for time searching.
- Additionally made a Struct & Enum for containing relative operations
around dates.
- Added additional checks in App & CommandNode(T) around checking
env_vars of flags & checking for duplicate commands
- Added a CommandMeta record to contain the classname of the
CommandNode(T)
- Seperated out all of the monolitic files (command_node.cr & file.cr).
Moved the base classes and records into their own files in the dir
with the same name of their generic counterparts.
- Fixed a number of macro related bugs around Command.argument &
CliGen.add_global_flag
- My ass hurts from sitting here for hours and doing these changes and
arguing with claude over what needs to be done. Fun tho.
- Updated .gitignore to include specs
- Re-licensed to MPL-2.0 as I want any modifications to be pushed back
to the main codebase so that the ecosystem can benefit from developer
adoption
- Updated LICENSE & shard.yml with new license
- Changed author to personal email as this is not being done for my
company
- Added more complex date/time parsing for Time objects. This includes
the ability to provide times in epoch format and several others with
the ability to provide inline timezone offsets without external
codebase works to convert them. Alongside this I added the ability to
do relative time (ex: [+-]2 hours|minutes|days) (along with the ability
to specify timezone if needed)
- Littered the entire codebase with Log object calls to show state of
everything as the framework does it's stuff. Just needs Log to be
configured in the codebase consuming my shard
- removed flag collection for use in displaying all flags in the app
help output. So it will only show global flags & subcommands
- Changed CommandNode#get(short:) & get(long:) & flag?(arg : String)
methods to check @flags -> @commands.@flags -> CliGen::GLOBAL_FLAGS
when finding flags. Making it possible to not PRINT out the flag
output but still be able to set values to a child flag recursively.
anno[:validate] was always nil; validation procs were never wired
into Flag(T).new. Correct key is :validation to match the field
name set by the argument macro in command/argument.cr.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs
- .claude/settings.json: project-level Claude Code config
- .gitignore: ignores test binary, build artifacts, shards cache, tags
- README.md: expanded with usage example, dev commands, and AI assistance
disclosure (Claude used for review/bug-checking, not code generation)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ATnpoEGXj4RyuMoBLGWcjs