- Optimised production build
make build
- Development build (non-stripped and includes address sanitizer)
make dev
Both commands compile to a single executable called pm
in the bin/
directory.
- Create a new project
pm create_project <project_name>
- Add a new feature to the project
pm add_feature <feature_name>
- Rename a feature
pm rename_feature <old_name> <new_name>
- Create a tag
pm add_tag <tag_name>
- Find a tag
pm find_tag <tag_name>
- Run web server
pm serve <port: int>
NOTE: I recommend doing this in an empty directory to avoid clutter.
Once the server is running you can navigate to localhost:<port: int>
in your browser to get an interactive web-page that can interface with projects on your local directory.
NOTE2: The web-server was tested on firefox and chromium, it might not work on other browsers, especially not ones based on the webkit engine as they handle sockets a bit differently.
Run make docs
to get automatically generated documentation.
Then go to doc/html/
and run firefox index.html
.
NOTE: you can replace firefox with your preferred browser
- Be able to create basic file structure for project
- Abort if requested project/feature name already exists under 'root' folder. Here 'root' does not mean the / root of the file system, but the folder from which the program is run.
- Requires checking existing file system for matching name
- Requires using branching (if) to exit program if necessary
- Initialise git repository
- Should set up CSGitLab project etc.
- Feature management
- Must implement a method of having a shorthand code for feature e.g. F1, F2.1..., stored in a file.
- Must implement lookup to facilitate getting path from shorthand code
- Should include setting up git branch as appropriate
- Include mechanism for renaming features (subtrees)
- Include mechanism for moving feature to new location in tree (folder hierarchy)
- Output tree diagram - PBS or WBS (svg, using plantuml)
- Requires tree walk (iterative or recursive)
- Must exclude folders that start with a '.'
- Should use the plantuml tool
- Could implement from scratch (much harder, more marks)
- Time/workload estimate information stored in files in subfolders
- Should have mechanisms for adding these from the program not just editing the files
- Should include subtrees costs in parent tree total
- Time/workload added to output diagram
- Could also produce Gantt chart (using plantuml)
- Output diagram includes links (when used in browser, for example)
- Should use plantuml to do this
- Dependencies information across tree branches
- Must identify relevant other paths in tree to do this
- Guided work breakdown wizard (Slightly advanced, would require interactive questions/answer handling)
- Needs a number of sub-features, such as minimum time allocation threshold, user input parsing
- Multi-user (Advanced, would require some form of permissions model)
- may be best done using a traditional SQL database, but can use flat files. Complex task.
- Available as web application (Advanced, probably easiest creating a simple embedded server)
- sample code for simple communications between applications will be covered
- GOAP recommendation of suitable pathway (Advanced, can use existing GOAP library, however)
- GOAP uses a 'heap' data structure