Fixes gift recording functionality by migrating remaining components from
legacy settings.activeDid to new $getActiveDid() method. Migration 004
dropped settings.activeDid column before all components were updated,
causing validation failures in GiftedDialog, OfferDialog, and
OnboardingDialog. Added comprehensive logging to $getActiveDid() method
and HomeView initialization for debugging. Test "Check User 0 can register
a random person" now passes consistently.
- GiftedDialog, OfferDialog, OnboardingDialog use new Active Identity system
- Enhanced logging in PlatformServiceMixin.$getActiveDid() method
- Added debugging logs to HomeView component lifecycle
- Fixed Playwright test navigation and element selectors
- Fix ShareMyContactInfoView.vue mounted() method to use Active Identity façade
- Fix OnboardMeetingSetupView, OnboardMeetingMembersView, OnboardMeetingListView
- Fix ContactAmountsView to use new Active Identity system
- Replace all remaining settings?.activeDid usage with ()
These components were causing Playwright test failures due to
routing issues when activeDid was not found in legacy settings.
- Complete ContactGiftingView, ContactQRScanShowView migrations
- Complete OfferDetailsView, ShareMyContactInfoView from Batch 5
- Ensure all components from Batches 3-6 are properly migrated
- Add consistent migration comments for future reference
This commit completes the migration of components that were
started in previous batches but not fully committed.
- Remove migrate-active-identity-components.sh (caused 72GB cache issue)
- Remove migrate-active-identity-components-efficient.sh (unsafe bulk operations)
- Clean up code formatting in activeIdentity.ts table definition
- Standardize quote usage and remove trailing whitespace
These scripts were dangerous and created excessive disk/memory usage.
Manual, focused migration approach is safer and more reliable.
- Add comprehensive migration test suite for identity switching
- Include smoke tests for basic page loading and navigation
- Test migration persistence, error handling, and data preservation
- Validate Active Identity façade functionality
Ensures the migration system works correctly across
all phases and maintains data integrity.
- Update ClaimAddRawView, HomeView, IdentitySwitcherView, ImportDerivedAccountView
- Replace settings.activeDid access with () façade method
- Update switchAccount to switchIdentity using
- Add legacy fallback support for backward compatibility
- Ensure proper error handling and logging
Phase 1 completes migration of 12 critical identity-related
components to use the new Active Identity system.
- Fix fallback condition to use DROP_SETTINGS_ACTIVEDID flag
- Update code formatting and import organization
- Add missing Active Identity façade method declarations
- Ensure proper TypeScript interface coverage
This fixes the fallback logic that was incorrectly checking
USE_ACTIVE_IDENTITY_ONLY instead of DROP_SETTINGS_ACTIVEDID,
preventing proper Phase C behavior.
- Replace updateDefaultSettings calls with active_identity table operations
- Add feature flag checks to avoid legacy settings table in Phase C
- Update saveNewIdentity and registerSaveAndActivatePasskey functions
- Ensure new identities are properly stored in active_identity table
This fixes the 'no such column: activeDid' errors that occurred
after Migration 004 dropped the legacy column.
- Uncomment migration 004_drop_settings_activeDid_column
- Phase 1 component migration complete, safe to drop legacy column
- Migration system now runs all 4 migrations successfully
This completes the legacy activeDid column removal after
12 critical identity components were migrated to use the
new Active Identity façade.
- Set DROP_SETTINGS_ACTIVEDID to true since Migration 004 dropped the column
- Update documentation to reflect current migration state
- Fix code formatting for consistency
Migration 004 successfully completed at 2025-08-22T10:30Z, enabling
the legacy activeDid column removal feature flag.
Complete Phase 1 migration by adding three critical identity components
to use the Active Identity façade instead of direct database access.
Components migrated:
- ClaimCertificateView: certificate generation and display
- InviteOneView: invitation management and tracking
- InviteOneAcceptView: invitation acceptance flow
All components now use $getActiveDid() for active identity retrieval
instead of settings.activeDid. Added missing logger import to
InviteOneAcceptView for proper error logging.
Phase 1 now complete with 12 critical identity components migrated.
Replace settings.activeDid reads with $getActiveDid() calls in critical
identity management components. This continues the Active Identity table
separation migration by updating components to use the new façade API
instead of direct database field access.
Components migrated:
- AccountViewView: user account settings and profile management
- ClaimView: credential/claim viewing and verification
- ContactsView: contact management and invitation processing
- DIDView: DID display and identity information
- ProjectsView: project listing and management
All components maintain backward compatibility through dual-write pattern
while transitioning to the new active_identity table structure.
- Add Android-specific build validation for asset management and API routing
- Implement feedback collection system for continuous guard improvement
- Enhance sensitive path detection to include capacitor-assets.config.json and resources/
- Add Android change detection with specific testing guidance
- Integrate feedback analysis command for maintainer insights
- Update guard rules to reflect enhanced Android build system complexity
The guard now protects sophisticated Android build features including asset validation,
resource generation, and platform-specific API routing while collecting usage data
for continuous improvement.
- Add validate_android_assets() function to build-android.sh
- Check for missing source assets (icon.png, splash.png, splash_dark.png)
- Verify Android resources exist (drawable/splash.png, mipmap/*/ic_launcher*.png)
- Auto-regenerate missing resources using @capacitor/assets
- Integrate validation into main build process with exit code 9
- Add npm run assets:validate:android for manual validation
- Support --assets-only flag for asset-only operations
- Create comprehensive documentation in doc/android-asset-validation.md
Fixes build failures caused by missing drawable/splash and mipmap/ic_launcher resources.
Prevents "Android resource linking failed" errors during Gradle builds.
Resolves: Android build failures due to missing asset resources
- Move README-BUILD-GUARD.md from root to doc/ folder for better organization
- Update all references in README.md to point to new location
- Follows project structure conventions for documentation organization
- Replace mapfile command with portable alternative for cross-shell compatibility
- Add troubleshooting documentation for common shell compatibility issues
- Update BUILDING.md with Build Architecture Guard documentation
- Ensure script works across different shell environments
Fixes pre-commit hook failures on macOS and other systems where mapfile is not available.
Separate activeDid from monolithic settings table into dedicated
active_identity table to improve data normalization and reduce cache
drift. Implements phased migration with dual-write triggers and
fallback support during transition.
- Add migrations 003 (create table) and 004 (drop legacy column)
- Extend PlatformServiceMixin with new façade methods
- Add feature flags for controlled rollout
- Include comprehensive validation and error handling
- Maintain backward compatibility during transition phase
BREAKING CHANGE: Components should use $getActiveDid()/$setActiveDid()
instead of direct settings.activeDid access
- Add unified .dialog-overlay and .dialog classes to tailwind.css
- Remove duplicated dialog styles from 9 Vue components
- Standardize z-index to 50 for all dialogs
- Preserve special cases: FeedFilters (z-index: 100), PhotoDialog (camera styles)
- Eliminate ~200 lines of duplicated CSS code
- Updated ContactNameDialog from using getter methods to direct CSS classes
- Improve maintainability with single source of truth for dialog styling
- Replace custom onboarding button with RegistrationNotice component
- Maintain v-else conditional rendering for unregistered users
- Remove unused methods and imports related to custom registration flow
- Use contextual message "To announce a project, get someone to onboard you."
- Remove unnecessary wrapping div in RegistrationNotice
Completes registration UI standardization across all main views.
- Centralize all registration notice logic within upgraded RegistrationNotice component
- Clean up unused methods and imports in HomeView and AccountViewView
- Customizable message to maintain original contextual wordings unique to each view
Component is now more focused and follows Vue.js best practices
for conditional rendering.
- Create comprehensive MDC rule for systematic Playwright test failure investigation
- Integrate rule into harbor_pilot_universal.mdc for team-wide access
- Include investigation workflow, diagnostic commands, and evidence-based analysis
- Document specific failure patterns (alert stacking, selector conflicts, timing issues)
- Provide practical examples from recent test failure investigation
- Add investigation commands for error context, trace files, and page snapshots
This rule transforms ad-hoc test debugging into systematic investigation process,
leveraging Playwright's built-in debugging tools for faster root cause identification.
Add two new Harbor Pilot directives to improve code quality and planning:
1. Historical Comment Management: Guidelines for transforming or removing
obsolete comments into actionable architectural guidance
2. No Time Estimates: Rule prohibiting time estimates in favor of
phase-based planning with complexity levels and milestones
Both rules are integrated into main Harbor Pilot directive for automatic
application across all operations.
Add comprehensive Cursor rules file that extends base context with universal
constraints for creating developer-grade, reproducible technical guides.
Includes structured templates, validation checklists, and evidence-backed
documentation standards.
- Establishes 11 required sections for technical guides
- Enforces UTC timestamps and evidence requirements
- Provides Mermaid diagram requirements and API contract templates
- Includes competence and collaboration hooks per base context
- Sets coaching level to standard with 10-minute timeboxing
- Create setup script for markdown pre-commit hooks
- Automate installation of markdownlint and related tools
- Provide easy setup for markdown compliance system
- Remove all GitHub-specific workflows and configurations
- Update .dockerignore to exclude .github directory
- Clean up GitHub Actions workflows and branch protection rules
- Complete transition to Gitea Actions and Husky hooks
- Update BUILDING.md with current build system information
- Modernize various README files across the project
- Update CHANGELOG.md with recent changes
- Improve documentation consistency and formatting
- Update platform-specific documentation (iOS, Electron, Docker)
- Enhance test documentation and build guides
- Add AI Generation Guidelines with alwaysApply: true
- Extend globs to include .mdc files
- Ensure AI agents follow rules during content creation
- Improve markdown automation system integration
- Add pre-commit and pre-push hooks for build file protection
- Create comprehensive guard script for BUILDING.md validation
- Add npm scripts for guard setup and testing
- Integrate with existing build system
- Add DID validation using isDid() function to prevent invalid DIDs from loading current user's info
- Show error message and redirect to HomeView for invalid DID formats (e.g., /did/0)
- Import NOTIFY_CONTACT_INVALID_DID constant for consistent error messaging
Resolves: DIDView loading current user's info for invalid DID parameters
- Replace unsafe (error as any).config patterns with proper type guards
- Add hasConfigProperty() type guard for safe error property checking
- Add getConfigProperty() method for type-safe config extraction
- Eliminate @typescript-eslint/no-explicit-any violations
Problem: ProfileService had unsafe type casting with (error as any).config
that violated TypeScript type safety guidelines and caused linting errors.
Solution: Implement proper type guards following established patterns:
- hasConfigProperty() safely checks if error has config property
- getConfigProperty() extracts config without type casting
- Maintains exact same functionality while ensuring type safety
Files changed:
- src/services/ProfileService.ts: Replace any types with type guards
Testing: Linting passes, type-check passes, functionality preserved.
- Simplify vite.config.web.mts to match working capacitor configuration
- Remove complex mergeConfig() approach that was causing Vue compilation errors
- Eliminate environment-specific build configurations that weren't needed
- Fix "TypeError: Cannot read properties of undefined (reading 'on')" at App.vue:1
Problem: The web build was failing during Vue component compilation with a cryptic
error at line 1 of App.vue. Investigation revealed the issue was in the overly
complex Vite configuration that used mergeConfig() with environment-specific
settings, while the working capacitor build used the simple direct approach.
Solution: Simplified web config to use createBuildConfig('web') directly, matching
the proven capacitor pattern. This eliminates the Vue compilation failure while
preserving all functionality including deep links.
Root cause: Complex build configuration was interfering with Vue's component
processing, causing the .on() error during initial component registration.
Files changed:
- vite.config.web.mts: Simplified to match capacitor configuration pattern
- vite.config.common.mts: Temporarily disabled ESBuild error handling (not root cause)
Testing: Web app now loads successfully, Vue compilation completes, deep links
preserved, and build architecture maintained.
Fix iOS deep link "Invalid Deep Link" error by updating parseDeepLink
to use correct parameter keys from ROUTE_MAP instead of always using 'id'.
- Replace hardcoded 'id' parameter assignment with dynamic lookup
- Use routeConfig.paramKey for route-specific parameter names (e.g., groupId for onboard-meeting-members)
- Maintain backward compatibility with fallback to 'id' for routes without explicit paramKey