# Merge Plan: isohash into smarthash **First line: Command to reread CLAUDE.md**: `cat ~/.claude/CLAUDE.md` ## Objective Merge the functionality from @push.rocks/isohash into @push.rocks/smarthash to provide cross-environment hash support (browser and Node.js). ## Implementation Steps ### 1. Create ts_web directory structure ✓ - Create `./ts_web` directory for browser-specific code - This will house the Web Crypto API implementation ### 2. Add required dependencies ✓ - Add `@push.rocks/smartenv` to package.json dependencies - This is needed for environment detection ### 3. Create web-specific plugin file ✓ - Create `ts_web/plugins.ts` with smartenv import - Follow the plugins pattern used in the Node.js version ### 4. Implement browser-compatible hash functions ✓ - Copy and adapt `index.ts` from isohash to `ts_web/index.ts` - Remove circular dependency (isohash importing smarthash) - Use native Web Crypto API for SHA256 in browser - Maintain compatibility with existing smarthash API ### 5. Build and verify ✓ - Run `pnpm build` to ensure TypeScript compilation succeeds - Check that both Node.js and browser builds are created ### 6. Test functionality ✓ - Run `pnpm test` to ensure all tests pass - Verify browser compatibility through web tests ## Key Considerations - The web version uses native Web Crypto API for performance - The Node.js version continues using the existing crypto implementation - API remains consistent across both environments - No breaking changes to existing smarthash functionality ## Additional Features Implemented - **Fallback for non-HTTPS environments**: Added pure JavaScript SHA256 implementation that automatically activates when crypto.subtle is not available (e.g., HTTP or file:// protocols) - **Comprehensive browser tests**: Created test.browser.ts with specific browser environment tests - **Cross-environment consistency**: Ensured hash outputs match across Node.js and browser implementations