93 lines
7.0 KiB
Plaintext
93 lines
7.0 KiB
Plaintext
# Task ID: 80
|
|
# Title: Implement Unique User ID Generation and Storage During Installation
|
|
# Status: pending
|
|
# Dependencies: None
|
|
# Priority: medium
|
|
# Description: Generate a unique user identifier during npm installation and store it in the .taskmasterconfig globals to enable anonymous usage tracking and telemetry without requiring user registration.
|
|
# Details:
|
|
This task involves implementing a mechanism to generate and store a unique user identifier during the npm installation process of Taskmaster. The implementation should:
|
|
|
|
1. Create a post-install script that runs automatically after npm install completes
|
|
2. Generate a cryptographically secure random UUID v4 as the unique user identifier
|
|
3. Check if a user ID already exists in the .taskmasterconfig file before generating a new one
|
|
4. Add the generated user ID to the globals section of the .taskmasterconfig file
|
|
5. Ensure the user ID persists across updates but is regenerated on fresh installations
|
|
6. Handle edge cases such as failed installations, manual deletions of the config file, or permission issues
|
|
7. Add appropriate logging to notify users that an anonymous ID is being generated (with clear privacy messaging)
|
|
8. Document the purpose of this ID in the codebase and user documentation
|
|
9. Ensure the ID generation is compatible with all supported operating systems
|
|
10. Make the ID accessible to the telemetry system implemented in Task #77
|
|
|
|
The implementation should respect user privacy by:
|
|
- Not collecting any personally identifiable information
|
|
- Making it clear in documentation how users can opt out of telemetry
|
|
- Ensuring the ID cannot be traced back to specific users or installations
|
|
|
|
This user ID will serve as the foundation for anonymous usage tracking, helping to understand how Taskmaster is used without compromising user privacy. Note that while we're implementing the ID generation now, the actual server-side collection is not yet available, so this data will initially only be stored locally.
|
|
|
|
# Test Strategy:
|
|
Testing for this feature should include:
|
|
|
|
1. **Unit Tests**:
|
|
- Verify the UUID generation produces valid UUIDs
|
|
- Test the config file reading and writing functionality
|
|
- Ensure proper error handling for file system operations
|
|
- Verify the ID remains consistent across multiple reads
|
|
|
|
2. **Integration Tests**:
|
|
- Run a complete npm installation in a clean environment and verify a new ID is generated
|
|
- Simulate an update installation and verify the existing ID is preserved
|
|
- Test the interaction between the ID generation and the telemetry system
|
|
- Verify the ID is correctly stored in the expected location in .taskmasterconfig
|
|
|
|
3. **Manual Testing**:
|
|
- Perform fresh installations on different operating systems (Windows, macOS, Linux)
|
|
- Verify the installation process completes without errors
|
|
- Check that the .taskmasterconfig file contains the generated ID
|
|
- Test scenarios where the config file is manually deleted or corrupted
|
|
|
|
4. **Edge Case Testing**:
|
|
- Test behavior when the installation is run without sufficient permissions
|
|
- Verify handling of network disconnections during installation
|
|
- Test with various npm versions to ensure compatibility
|
|
- Verify behavior when .taskmasterconfig already exists but doesn't contain a user ID section
|
|
|
|
5. **Validation**:
|
|
- Create a simple script to extract and analyze generated IDs to ensure uniqueness
|
|
- Verify the ID format meets UUID v4 specifications
|
|
- Confirm the ID is accessible to the telemetry system from Task #77
|
|
|
|
The test plan should include documentation of all test cases, expected results, and actual outcomes. A successful implementation will generate unique IDs for each installation while maintaining that ID across updates.
|
|
|
|
# Subtasks:
|
|
## 1. Create post-install script structure [pending]
|
|
### Dependencies: None
|
|
### Description: Set up the post-install script that will run automatically after npm installation to handle user ID generation.
|
|
### Details:
|
|
Create a new file called 'postinstall.js' in the project root. Configure package.json to run this script after installation by adding it to the 'scripts' section with the key 'postinstall'. The script should import necessary dependencies (fs, path, crypto) and set up the basic structure to access and modify the .taskmasterconfig file. Include proper error handling and logging to capture any issues during execution.
|
|
|
|
## 2. Implement UUID generation functionality [pending]
|
|
### Dependencies: 80.1
|
|
### Description: Create a function to generate cryptographically secure UUIDs v4 for unique user identification.
|
|
### Details:
|
|
Implement a function called 'generateUniqueUserId()' that uses the crypto module to create a UUID v4. The function should follow RFC 4122 for UUID generation to ensure uniqueness and security. Include validation to verify the generated ID matches the expected UUID v4 format. Document the function with JSDoc comments explaining its purpose for anonymous telemetry.
|
|
|
|
## 3. Develop config file handling logic [pending]
|
|
### Dependencies: 80.1
|
|
### Description: Create functions to read, parse, modify, and write to the .taskmasterconfig file for storing the user ID.
|
|
### Details:
|
|
Implement functions to: 1) Check if .taskmasterconfig exists and create it if not, 2) Read and parse the existing config file, 3) Check if a user ID already exists in the globals section, 4) Add or update the user ID in the globals section, and 5) Write the updated config back to disk. Handle edge cases like malformed config files, permission issues, and concurrent access. Use atomic write operations to prevent config corruption.
|
|
|
|
## 4. Integrate user ID generation with config storage [pending]
|
|
### Dependencies: 80.2, 80.3
|
|
### Description: Connect the UUID generation with the config file handling to create and store user IDs during installation.
|
|
### Details:
|
|
Combine the UUID generation and config handling functions to: 1) Check if a user ID already exists in config, 2) Generate a new ID only if needed, 3) Store the ID in the config file, and 4) Handle installation scenarios (fresh install vs. update). Add appropriate logging to inform users about the anonymous ID generation with privacy-focused messaging. Ensure the process is idempotent so running it multiple times won't create multiple IDs.
|
|
|
|
## 5. Add documentation and telemetry system access [pending]
|
|
### Dependencies: 80.4
|
|
### Description: Document the user ID system and create an API for the telemetry system to access the user ID.
|
|
### Details:
|
|
Create comprehensive documentation explaining: 1) The purpose of the anonymous ID, 2) How user privacy is protected, 3) How to opt out of telemetry, and 4) Technical details of the implementation. Implement a simple API function 'getUserId()' that reads the ID from config for use by the telemetry system. Update the README and user documentation to include information about anonymous usage tracking. Ensure cross-platform compatibility by testing on all supported operating systems. Make it clear in the documentation that while we're collecting this ID, the server-side collection is not yet implemented, so data remains local for now.
|
|
|