rename 'docs' directory to 'doc'

This commit is contained in:
2026-03-14 19:52:40 -06:00
parent ca6a75ded8
commit 11561991bd
198 changed files with 35779 additions and 115297 deletions

View File

@@ -1215,7 +1215,7 @@ daily-notification-plugin/
├── scripts/ # Build scripts and automation
├── test-apps/ # Test applications
│ └── daily-notification-test/ # Vue 3 test app
├── docs/ # Documentation
├── doc/ # Documentation
├── examples/ # Usage examples
├── tests/ # Test files
├── package.json # Node.js dependencies

View File

@@ -19,7 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- **Docs**: `docs/CONSUMING_APP_ANDROID_NOTES.md` — notes for consuming apps on debouncing double `scheduleDailyNotification` calls and debugging alarms that are scheduled but do not fire (logcat with `DailyNotificationReceiver`).
- **Docs**: `doc/platform/android/CONSUMING_APP_ANDROID_NOTES.md` — notes for consuming apps on debouncing double `scheduleDailyNotification` calls and debugging alarms that are scheduled but do not fire (logcat with `DailyNotificationReceiver`).
## [1.1.4] - 2026-02-16

View File

@@ -13,12 +13,12 @@ The Daily Notification Plugin is a comprehensive Capacitor plugin that provides
**New to the plugin?** Start here:
1. **[Installation & Setup](./docs/GETTING_STARTED.md)** — Installation, platform setup, and basic usage
2. **[Quick Start Guide](./docs/examples/QUICK_START.md)** — Minimal working example
3. **[Common Patterns](./docs/examples/COMMON_PATTERNS.md)** — Common integration patterns
4. **[Troubleshooting](./docs/TROUBLESHOOTING.md)** — Common issues and solutions
1. **[Installation & Setup](./doc/GETTING_STARTED.md)** — Installation, platform setup, and basic usage
2. **[Quick Start Guide](./doc/examples/QUICK_START.md)** — Minimal working example
3. **[Common Patterns](./doc/examples/COMMON_PATTERNS.md)** — Common integration patterns
4. **[Troubleshooting](./doc/TROUBLESHOOTING.md)** — Common issues and solutions
For complete documentation, see the [Documentation Index](./docs/00-INDEX.md).
For complete documentation, see the [Documentation Index](./doc/00-INDEX.md).
### 🎯 **Native-First Architecture**
@@ -111,8 +111,8 @@ The following behaviors are best-effort and may vary by platform:
- **Error Handling**: Exponential backoff and retry logic
- **Security**: Encrypted storage and secure callback handling
- **Database Access**: Full TypeScript interfaces for plugin database access
- See [`docs/architecture/DATABASE_INTERFACES.md`](docs/architecture/DATABASE_INTERFACES.md) for complete API reference
- See [docs/00-INDEX.md](docs/00-INDEX.md) for complete documentation index
- See [`doc/architecture/DATABASE_INTERFACES.md`](doc/architecture/DATABASE_INTERFACES.md) for complete API reference
- See [doc/00-INDEX.md](doc/00-INDEX.md) for complete documentation index
- Plugin owns its SQLite database - access via Capacitor interfaces
- Supports schedules, content cache, callbacks, history, and configuration
@@ -141,11 +141,11 @@ The plugin follows the standard Capacitor Android structure - no additional path
## Documentation
**📚 Complete Documentation Index**: See [docs/00-INDEX.md](./docs/00-INDEX.md) for organized access to all documentation.
**📚 Complete Documentation Index**: See [doc/00-INDEX.md](./doc/00-INDEX.md) for organized access to all documentation.
## Quick Integration
**New to the plugin?** Start with the [Quick Integration Guide](./docs/integration/QUICK_START.md) for step-by-step setup instructions.
**New to the plugin?** Start with the [Quick Integration Guide](./doc/integration/QUICK_START.md) for step-by-step setup instructions.
The quick guide covers:
- Installation and setup
@@ -154,7 +154,7 @@ The quick guide covers:
- Basic usage examples
- Troubleshooting common issues
**For AI Agents**: See [AI Integration Guide](./docs/ai/AI_INTEGRATION_GUIDE.md) for explicit, machine-readable instructions with verification steps, error handling, and decision trees.
**For AI Agents**: See [AI Integration Guide](./doc/ai/AI_INTEGRATION_GUIDE.md) for explicit, machine-readable instructions with verification steps, error handling, and decision trees.
## Quick Start
@@ -410,13 +410,13 @@ console.log(`Will fire at: ${new Date(result.triggerAtMillis).toLocaleString()}`
For immediate validation of plugin functionality:
- **Android**: [Manual Smoke Test - Android](./docs/testing/MANUAL_SMOKE_TEST.md#android-platform-testing)
- **iOS**: [Manual Smoke Test - iOS](./docs/testing/MANUAL_SMOKE_TEST.md#ios-platform-testing)
- **Electron**: [Manual Smoke Test - Electron](./docs/testing/MANUAL_SMOKE_TEST.md#electron-platform-testing)
- **Android**: [Manual Smoke Test - Android](./doc/testing/MANUAL_SMOKE_TEST.md#android-platform-testing)
- **iOS**: [Manual Smoke Test - iOS](./doc/testing/MANUAL_SMOKE_TEST.md#ios-platform-testing)
- **Electron**: [Manual Smoke Test - Electron](./doc/testing/MANUAL_SMOKE_TEST.md#electron-platform-testing)
### Manual Smoke Test Documentation
Complete testing procedures: [docs/testing/MANUAL_SMOKE_TEST.md](./docs/testing/MANUAL_SMOKE_TEST.md)
Complete testing procedures: [doc/testing/MANUAL_SMOKE_TEST.md](./doc/testing/MANUAL_SMOKE_TEST.md)
## Compatibility Matrix
@@ -825,21 +825,21 @@ MIT License - see [LICENSE](LICENSE) file for details.
### Documentation
**📚 [Complete Documentation Index](./docs/00-INDEX.md)** - Central hub for all project documentation
**📚 [Complete Documentation Index](./doc/00-INDEX.md)** - Central hub for all project documentation
**Key Documentation:**
- **Integration**: [Integration Guide](./docs/integration/INTEGRATION_GUIDE.md) - Complete integration instructions
- **Integration**: [Integration Guide](./doc/integration/INTEGRATION_GUIDE.md) - Complete integration instructions
- **Platform Guides**:
- [iOS Platform Docs](./docs/platform/ios/) - iOS implementation, migration, and troubleshooting
- [Android Platform Docs](./docs/platform/android/) - Android implementation and directives
- **Testing**: [Testing Documentation](./docs/testing/) - Comprehensive testing guides and procedures
- **Alarms**: [Alarm System Docs](./docs/alarms/) - Alarm system documentation
- **Database Interfaces**: [`docs/architecture/DATABASE_INTERFACES.md`](docs/architecture/DATABASE_INTERFACES.md) - Complete guide to accessing plugin database from TypeScript/webview
- **Database Implementation**: [`docs/DATABASE_INTERFACES_IMPLEMENTATION.md`](docs/DATABASE_INTERFACES_IMPLEMENTATION.md) - Implementation summary and status
- **Database Consolidation Plan**: [`docs/platform/android/DATABASE_CONSOLIDATION_PLAN.md`](docs/platform/android/DATABASE_CONSOLIDATION_PLAN.md) - Database schema consolidation roadmap
- [iOS Platform Docs](./doc/platform/ios/) - iOS implementation, migration, and troubleshooting
- [Android Platform Docs](./doc/platform/android/) - Android implementation and directives
- **Testing**: [Testing Documentation](./doc/testing/) - Comprehensive testing guides and procedures
- **Alarms**: [Alarm System Docs](./doc/alarms/) - Alarm system documentation
- **Database Interfaces**: [`doc/architecture/DATABASE_INTERFACES.md`](doc/architecture/DATABASE_INTERFACES.md) - Complete guide to accessing plugin database from TypeScript/webview
- **Database Implementation**: [`doc/DATABASE_INTERFACES_IMPLEMENTATION.md`](doc/DATABASE_INTERFACES_IMPLEMENTATION.md) - Implementation summary and status
- **Database Consolidation Plan**: [`doc/platform/android/DATABASE_CONSOLIDATION_PLAN.md`](doc/platform/android/DATABASE_CONSOLIDATION_PLAN.md) - Database schema consolidation roadmap
- **Building Guide**: [BUILDING.md](BUILDING.md) - Comprehensive build instructions and troubleshooting
- **Design & Research**: [Design Documentation](./docs/design/) - Design research and implementation guides
- **Archive**: [Legacy Documentation](./docs/archive/2025-legacy-doc/) - Historical documentation preserved for reference
- **Design & Research**: [Design Documentation](./doc/design/) - Design research and implementation guides
- **Archive**: [Legacy Documentation](./doc/archive/2025-legacy-doc/) - Historical documentation preserved for reference
### Community

View File

@@ -0,0 +1,19 @@
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
dependencies {
}
if (hasProperty('postBuildExtras')) {
postBuildExtras()
}

View File

@@ -0,0 +1,16 @@
{
"appId": "org.timesafari.dailynotification",
"appName": "DailyNotification Test App",
"webDir": "www",
"server": {
"androidScheme": "https"
},
"plugins": {
"DailyNotification": {
"fetchUrl": "https://api.example.com/daily-content",
"scheduleTime": "09:00",
"enableNotifications": true,
"debugMode": true
}
}
}

View File

@@ -0,0 +1 @@
[]

View File

View File

View File

@@ -0,0 +1,475 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>DailyNotification Plugin Test</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
margin: 0;
padding: 20px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
color: white;
}
.container {
max-width: 600px;
margin: 0 auto;
text-align: center;
}
h1 {
margin-bottom: 30px;
font-size: 2.5em;
}
.button {
background: rgba(255, 255, 255, 0.2);
border: 2px solid rgba(255, 255, 255, 0.3);
color: white;
padding: 15px 30px;
margin: 10px;
border-radius: 25px;
cursor: pointer;
font-size: 16px;
transition: all 0.3s ease;
}
.button:hover {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-2px);
}
.status {
margin-top: 30px;
padding: 20px;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
font-family: monospace;
}
</style>
</head>
<body>
<div class="container">
<div id="statusCard" class="status" style="margin-bottom: 20px; font-size: 14px;">
<strong>Plugin Status</strong><br>
<div style="margin-top: 10px;">
⚙️ Plugin Settings: <span id="configStatus">Not configured</span><br>
🔌 Native Fetcher: <span id="fetcherStatus">Not configured</span><br>
🔔 Notifications: <span id="notificationPermStatus">Checking...</span><br>
⏰ Exact Alarms: <span id="exactAlarmPermStatus">Checking...</span><br>
📢 Channel: <span id="channelStatus">Checking...</span><br>
<div id="pluginStatusContent" style="margin-top: 8px;">
Loading plugin status...
</div>
<div id="notificationReceivedIndicator" style="margin-top: 8px; padding: 8px; background: rgba(0, 255, 0, 0.2); border-radius: 5px; display: none;">
<strong>🔔 Notification Received!</strong><br>
<span id="notificationReceivedTime"></span><br>
<small>Check the top of your screen for the notification banner</small>
</div>
</div>
</div>
<button class="button" onclick="configurePlugin()">Configure Plugin</button>
<button class="button" onclick="requestPermissions()">Request Permissions</button>
<button class="button" onclick="testNotification()">Test Notification</button>
<button class="button" onclick="checkComprehensiveStatus()">Full System Status</button>
<div id="status" class="status">
Ready to test...
</div>
</div>
<script>
console.log('Script loading...');
console.log('JavaScript is working!');
// Use real DailyNotification plugin
console.log('Using real DailyNotification plugin...');
window.DailyNotification = window.Capacitor.Plugins.DailyNotification;
// Define functions immediately and attach to window
function configurePlugin() {
console.log('configurePlugin called');
const status = document.getElementById('status');
const configStatus = document.getElementById('configStatus');
const fetcherStatus = document.getElementById('fetcherStatus');
status.innerHTML = 'Configuring plugin...';
status.style.background = 'rgba(255, 255, 0, 0.3)'; // Yellow background
// Update top status to show configuring
configStatus.innerHTML = '⏳ Configuring...';
fetcherStatus.innerHTML = '⏳ Waiting...';
try {
if (!window.DailyNotification) {
status.innerHTML = 'DailyNotification plugin not available';
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
configStatus.innerHTML = '❌ Plugin unavailable';
fetcherStatus.innerHTML = '❌ Plugin unavailable';
return;
}
// Configure plugin settings
window.DailyNotification.configure({
storage: 'tiered',
ttlSeconds: 86400,
prefetchLeadMinutes: 60,
maxNotificationsPerDay: 3,
retentionDays: 7
})
.then(() => {
console.log('Plugin settings configured, now configuring native fetcher...');
// Update top status
configStatus.innerHTML = '✅ Configured';
// Configure native fetcher with demo credentials
// Note: DemoNativeFetcher uses hardcoded mock data, so this is optional
// but demonstrates the API. In production, this would be real credentials.
return window.DailyNotification.configureNativeFetcher({
apiBaseUrl: 'http://10.0.2.2:3000', // Android emulator → host localhost
activeDid: 'did:ethr:0xDEMO1234567890', // Demo DID
jwtSecret: 'demo-jwt-secret-for-development-testing'
});
})
.then(() => {
// Update top status
fetcherStatus.innerHTML = '✅ Configured';
// Update bottom status for user feedback
status.innerHTML = 'Plugin configured successfully!';
status.style.background = 'rgba(0, 255, 0, 0.3)'; // Green background
})
.catch(error => {
// Update top status with error
if (configStatus.innerHTML.includes('Configuring')) {
configStatus.innerHTML = '❌ Failed';
}
if (fetcherStatus.innerHTML.includes('Waiting') || fetcherStatus.innerHTML.includes('Configuring')) {
fetcherStatus.innerHTML = '❌ Failed';
}
status.innerHTML = `Configuration failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
});
} catch (error) {
configStatus.innerHTML = '❌ Error';
fetcherStatus.innerHTML = '❌ Error';
status.innerHTML = `Configuration failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
}
function loadPluginStatus() {
console.log('loadPluginStatus called');
const pluginStatusContent = document.getElementById('pluginStatusContent');
const statusCard = document.getElementById('statusCard');
try {
if (!window.DailyNotification) {
pluginStatusContent.innerHTML = '❌ DailyNotification plugin not available';
statusCard.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
return;
}
window.DailyNotification.getNotificationStatus()
.then(result => {
const nextTime = result.nextNotificationTime ? new Date(result.nextNotificationTime).toLocaleString() : 'None scheduled';
const hasSchedules = result.isEnabled || (result.pending && result.pending > 0);
const statusIcon = hasSchedules ? '✅' : '⏸️';
pluginStatusContent.innerHTML = `${statusIcon} Active Schedules: ${hasSchedules ? 'Yes' : 'No'}<br>
📅 Next Notification: ${nextTime}<br>
⏳ Pending: ${result.pending || 0}`;
statusCard.style.background = hasSchedules ?
'rgba(0, 255, 0, 0.15)' : 'rgba(255, 255, 255, 0.1)'; // Green if active, light gray if none
})
.catch(error => {
pluginStatusContent.innerHTML = `⚠️ Status check failed: ${error.message}`;
statusCard.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
});
} catch (error) {
pluginStatusContent.innerHTML = `⚠️ Status check failed: ${error.message}`;
statusCard.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
}
// Notification test functions
function testNotification() {
console.log('testNotification called');
// Quick sanity check - test plugin availability
if (window.Capacitor && window.Capacitor.isPluginAvailable) {
const isAvailable = window.Capacitor.isPluginAvailable('DailyNotification');
console.log('is plugin available?', isAvailable);
}
const status = document.getElementById('status');
status.innerHTML = 'Testing plugin connection...';
status.style.background = 'rgba(255, 255, 0, 0.3)'; // Yellow background
try {
if (!window.DailyNotification) {
status.innerHTML = 'DailyNotification plugin not available';
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
return;
}
// Test the notification method directly
console.log('Testing notification scheduling...');
const now = new Date();
const notificationTime = new Date(now.getTime() + 240000); // 4 minutes from now
const prefetchTime = new Date(now.getTime() + 120000); // 2 minutes from now (2 min before notification)
const notificationTimeString = notificationTime.getHours().toString().padStart(2, '0') + ':' +
notificationTime.getMinutes().toString().padStart(2, '0');
const prefetchTimeString = prefetchTime.getHours().toString().padStart(2, '0') + ':' +
prefetchTime.getMinutes().toString().padStart(2, '0');
window.DailyNotification.scheduleDailyNotification({
time: notificationTimeString,
title: 'Test Notification',
body: 'This is a test notification from the DailyNotification plugin!',
sound: true,
priority: 'high'
})
.then(() => {
const prefetchTimeReadable = prefetchTime.toLocaleTimeString();
const notificationTimeReadable = notificationTime.toLocaleTimeString();
status.innerHTML = '✅ Notification scheduled!<br>' +
'📥 Prefetch: ' + prefetchTimeReadable + ' (' + prefetchTimeString + ')<br>' +
'🔔 Notification: ' + notificationTimeReadable + ' (' + notificationTimeString + ')<br><br>' +
'<small>💡 When the notification fires, look for a banner at the <strong>top of your screen</strong>.</small>';
status.style.background = 'rgba(0, 255, 0, 0.3)'; // Green background
// Refresh plugin status display
setTimeout(() => loadPluginStatus(), 500);
})
.catch(error => {
// Check if this is an exact alarm permission error
if (error.code === 'EXACT_ALARM_PERMISSION_REQUIRED' ||
error.message.includes('Exact alarm permission') ||
error.message.includes('Alarms & reminders')) {
status.innerHTML = '⚠️ Exact Alarm Permission Required<br><br>' +
'Settings opened automatically.<br>' +
'Please enable "Allow exact alarms" and return to try again.';
status.style.background = 'rgba(255, 165, 0, 0.3)'; // Orange background
} else {
status.innerHTML = `❌ Notification failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
});
} catch (error) {
status.innerHTML = `Notification test failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
}
// Permission management functions
function requestPermissions() {
console.log('requestPermissions called');
const status = document.getElementById('status');
status.innerHTML = 'Requesting permissions...';
status.style.background = 'rgba(255, 255, 0, 0.3)'; // Yellow background
try {
if (!window.DailyNotification) {
status.innerHTML = 'DailyNotification plugin not available';
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
return;
}
window.DailyNotification.requestNotificationPermissions()
.then(() => {
status.innerHTML = 'Permission request completed! Check your device settings if needed.';
status.style.background = 'rgba(0, 255, 0, 0.3)'; // Green background
// Refresh permission and channel status display after request
setTimeout(() => {
loadPermissionStatus();
loadChannelStatus();
}, 1000);
})
.catch(error => {
status.innerHTML = `Permission request failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
});
} catch (error) {
status.innerHTML = `Permission request failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
}
function loadChannelStatus() {
const channelStatus = document.getElementById('channelStatus');
try {
if (!window.DailyNotification) {
channelStatus.innerHTML = '❌ Plugin unavailable';
return;
}
window.DailyNotification.isChannelEnabled()
.then(result => {
const importanceText = getImportanceText(result.importance);
if (result.enabled) {
channelStatus.innerHTML = `✅ Enabled (${importanceText})`;
} else {
channelStatus.innerHTML = `❌ Disabled (${importanceText})`;
}
})
.catch(error => {
channelStatus.innerHTML = '⚠️ Error';
});
} catch (error) {
channelStatus.innerHTML = '⚠️ Error';
}
}
function checkComprehensiveStatus() {
const status = document.getElementById('status');
status.innerHTML = 'Checking comprehensive status...';
status.style.background = 'rgba(255, 255, 0, 0.3)'; // Yellow background
try {
if (!window.DailyNotification) {
status.innerHTML = 'DailyNotification plugin not available';
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
return;
}
window.DailyNotification.checkStatus()
.then(result => {
const canSchedule = result.canScheduleNow;
const issues = [];
if (!result.postNotificationsGranted) {
issues.push('POST_NOTIFICATIONS permission');
}
if (!result.channelEnabled) {
issues.push('notification channel disabled');
}
if (!result.exactAlarmsGranted) {
issues.push('exact alarm permission');
}
let statusText = `Status: ${canSchedule ? 'Ready to schedule' : 'Issues found'}`;
if (issues.length > 0) {
statusText += `\nIssues: ${issues.join(', ')}`;
}
statusText += `\nChannel: ${getImportanceText(result.channelImportance)}`;
statusText += `\nChannel ID: ${result.channelId}`;
status.innerHTML = statusText;
status.style.background = canSchedule ? 'rgba(0, 255, 0, 0.3)' : 'rgba(255, 0, 0, 0.3)';
})
.catch(error => {
status.innerHTML = `Status check failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
});
} catch (error) {
status.innerHTML = `Status check failed: ${error.message}`;
status.style.background = 'rgba(255, 0, 0, 0.3)'; // Red background
}
}
function getImportanceText(importance) {
switch (importance) {
case 0: return 'None (blocked)';
case 1: return 'Min';
case 2: return 'Low';
case 3: return 'Default';
case 4: return 'High';
case 5: return 'Max';
default: return `Unknown (${importance})`;
}
}
// Attach to window object
window.configurePlugin = configurePlugin;
window.testNotification = testNotification;
window.requestPermissions = requestPermissions;
window.checkComprehensiveStatus = checkComprehensiveStatus;
function loadPermissionStatus() {
const notificationPermStatus = document.getElementById('notificationPermStatus');
const exactAlarmPermStatus = document.getElementById('exactAlarmPermStatus');
try {
if (!window.DailyNotification) {
notificationPermStatus.innerHTML = '❌ Plugin unavailable';
exactAlarmPermStatus.innerHTML = '❌ Plugin unavailable';
return;
}
window.DailyNotification.checkPermissionStatus()
.then(result => {
notificationPermStatus.innerHTML = result.notificationsEnabled ? '✅ Granted' : '❌ Not granted';
exactAlarmPermStatus.innerHTML = result.exactAlarmEnabled ? '✅ Granted' : '❌ Not granted';
})
.catch(error => {
notificationPermStatus.innerHTML = '⚠️ Error';
exactAlarmPermStatus.innerHTML = '⚠️ Error';
});
} catch (error) {
notificationPermStatus.innerHTML = '⚠️ Error';
exactAlarmPermStatus.innerHTML = '⚠️ Error';
}
}
// Check for notification delivery periodically
function checkNotificationDelivery() {
if (!window.DailyNotification) return;
window.DailyNotification.getNotificationStatus()
.then(result => {
if (result.lastNotificationTime) {
const lastTime = new Date(result.lastNotificationTime);
const now = new Date();
const timeDiff = now - lastTime;
// If notification was received in the last 2 minutes, show indicator
if (timeDiff > 0 && timeDiff < 120000) {
const indicator = document.getElementById('notificationReceivedIndicator');
const timeSpan = document.getElementById('notificationReceivedTime');
if (indicator && timeSpan) {
indicator.style.display = 'block';
timeSpan.textContent = `Received at ${lastTime.toLocaleTimeString()}`;
// Hide after 30 seconds
setTimeout(() => {
indicator.style.display = 'none';
}, 30000);
}
}
}
})
.catch(error => {
// Silently fail - this is just for visual feedback
});
}
// Load plugin status automatically on page load
window.addEventListener('load', () => {
console.log('Page loaded, loading plugin status...');
// Small delay to ensure Capacitor is ready
setTimeout(() => {
loadPluginStatus();
loadPermissionStatus();
loadChannelStatus();
// Check for notification delivery every 5 seconds
setInterval(checkNotificationDelivery, 5000);
}, 500);
});
console.log('Functions attached to window:', {
configurePlugin: typeof window.configurePlugin,
testNotification: typeof window.testNotification
});
</script>
</body>
</html>

View File

@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<widget version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<access origin="*" />
</widget>

View File

@@ -0,0 +1,59 @@
ext {
androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
cordovaAndroidVersion = project.hasProperty('cordovaAndroidVersion') ? rootProject.ext.cordovaAndroidVersion : '10.1.1'
}
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.2.1'
}
}
apply plugin: 'com.android.library'
android {
namespace "capacitor.cordova.android.plugins"
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
defaultConfig {
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
versionCode 1
versionName "1.0"
}
lintOptions {
abortOnError false
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}
repositories {
google()
mavenCentral()
flatDir{
dirs 'src/main/libs', 'libs'
}
}
dependencies {
implementation fileTree(dir: 'src/main/libs', include: ['*.jar'])
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
implementation "org.apache.cordova:framework:$cordovaAndroidVersion"
// SUB-PROJECT DEPENDENCIES START
// SUB-PROJECT DEPENDENCIES END
}
// PLUGIN GRADLE EXTENSIONS START
apply from: "cordova.variables.gradle"
// PLUGIN GRADLE EXTENSIONS END
for (def func : cdvPluginPostBuildExtras) {
func()
}

View File

@@ -0,0 +1,7 @@
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
ext {
cdvMinSdkVersion = project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
// Plugin gradle extensions can append to this to have code run at the end.
cdvPluginPostBuildExtras = []
cordovaConfig = [:]
}

View File

@@ -0,0 +1,8 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:amazon="http://schemas.amazon.com/apk/res/android">
<application >
</application>
</manifest>

View File

@@ -0,0 +1,3 @@
// DO NOT EDIT THIS FILE! IT IS GENERATED EACH TIME "capacitor update" IS RUN
include ':capacitor-android'
project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')

View File

@@ -17,9 +17,9 @@ import java.util.concurrent.TimeUnit
* Phase 2: Force stop detection and recovery
*
* Implements:
* - [Plugin Requirements §3.1.2 - App Cold Start](../docs/alarms/03-plugin-requirements.md#312-app-cold-start)
* - [Plugin Requirements §3.1.4 - Force Stop Recovery](../docs/alarms/03-plugin-requirements.md#314-force-stop-recovery-android-only)
* Platform Reference: [Android §2.1.4](../docs/alarms/01-platform-capability-reference.md#214-alarms-can-be-restored-after-app-restart)
* - [Plugin Requirements §3.1.2 - App Cold Start](../../../../../../../doc/alarms/03-plugin-requirements.md#312-app-cold-start)
* - [Plugin Requirements §3.1.4 - Force Stop Recovery](../../../../../../../doc/alarms/03-plugin-requirements.md#314-force-stop-recovery-android-only)
* Platform Reference: [Android §2.1.4](../../../../../../../doc/alarms/01-platform-capability-reference.md#214-alarms-can-be-restored-after-app-restart)
*
* @author Matthew Raymer
* @version 2.0.0 - Phase 2: Force stop detection
@@ -67,7 +67,7 @@ class ReactivationManager(private val context: Context) {
*
* Phase 3: Boot recovery that restores alarms after device reboot
*
* Implements: [Plugin Requirements §3.1.1 - Boot Event](../docs/alarms/03-plugin-requirements.md#311-boot-event-android-only)
* Implements: [Plugin Requirements §3.1.1 - Boot Event](../../../../../../../doc/alarms/03-plugin-requirements.md#311-boot-event-android-only)
*
* This method is called from BootReceiver when BOOT_COMPLETED is received.
* It runs asynchronously with timeout protection to avoid blocking boot.

View File

@@ -4,7 +4,7 @@
**Owner:** Development Team
**Last Updated:** 2025-12-23
**Status:** active
**Baseline:** See `docs/progress/00-STATUS.md` for current baseline tag
**Baseline:** See `doc/progress/00-STATUS.md` for current baseline tag
This index provides organized access to all documentation in the repository. For a complete audit trail of file movements, see [CONSOLIDATION_SOURCE_MAP.md](./_archive/2025-12-16-consolidation/CONSOLIDATION_SOURCE_MAP.md).
@@ -14,12 +14,12 @@ This index provides organized access to all documentation in the repository. For
These are **policy-as-code**. Any gate (push, release, publish) MUST call `./ci/run.sh`.
- **System Invariants:** `docs/SYSTEM_INVARIANTS.md` — Single authoritative document naming and explaining all enforced invariants
- **System Invariants:** `doc/SYSTEM_INVARIANTS.md` — Single authoritative document naming and explaining all enforced invariants
- **Local CI Contract:** `./ci/run.sh` — Single source of truth for CI/release gates
- **Verification / Invariants:** `./scripts/verify.sh` — Encodes packaging, core-purity, and build invariants
- **CI Usage & Setup:** `ci/README.md` — Local CI documentation
- **Performance Characteristics:** `docs/PERFORMANCE.md` — Performance characteristics and benchmarks
- **Troubleshooting Guide:** `docs/TROUBLESHOOTING.md` — Common issues and solutions
- **Performance Characteristics:** `doc/PERFORMANCE.md` — Performance characteristics and benchmarks
- **Troubleshooting Guide:** `doc/TROUBLESHOOTING.md` — Common issues and solutions
---
@@ -55,15 +55,15 @@ These files define the current truth about project state, decisions, and verific
## Archive & Reference-only
- **`docs/_archive/`** — Historical artifacts, preserved for audit trail (not part of active doc surface)
- `docs/_archive/PR_DESCRIPTION.md`, `MERGE_READY_SUMMARY.md` — One-off PR/merge artifacts (2025-10)
- `docs/_archive/2025-legacy-doc/` — Legacy documentation from 2025
- **`doc/_archive/`** — Historical artifacts, preserved for audit trail (not part of active doc surface)
- `doc/_archive/PR_DESCRIPTION.md`, `MERGE_READY_SUMMARY.md` — One-off PR/merge artifacts (2025-10)
- `doc/_archive/2025-legacy-doc/` — Legacy documentation from 2025
- [IMPLEMENTATION_CHECKLIST_LEGACY.md](./_archive/2025-legacy-doc/IMPLEMENTATION_CHECKLIST_LEGACY.md) — iOS Phase 1 checklist (historical)
- `docs/_archive/2025-12-16-consolidation/` — 2025-12-16 consolidation artifacts (audit trail)
- `doc/_archive/2025-12-16-consolidation/` — 2025-12-16 consolidation artifacts (audit trail)
- [CONSOLIDATION_COMPLETE.md](./_archive/2025-12-16-consolidation/CONSOLIDATION_COMPLETE.md) — Consolidation completion summary
- [CONSOLIDATION_SOURCE_MAP.md](./_archive/2025-12-16-consolidation/CONSOLIDATION_SOURCE_MAP.md) — Complete file mapping (139 files)
- **`docs/_reference/`** — Reference templates (not used by current workflow)
- `docs/_reference/github-actions-ci.yml` — GitHub Actions CI template (reference only)
- **`doc/_reference/`** — Reference templates (not used by current workflow)
- `doc/_reference/github-actions-ci.yml` — GitHub Actions CI template (reference only)
---
@@ -73,7 +73,7 @@ These files define the current truth about project state, decisions, and verific
1. **[README.md](../README.md)** - Project overview and getting started
2. **[ARCHITECTURE.md](../ARCHITECTURE.md)** - System architecture
3. **[docs/integration/QUICK_START.md](./integration/QUICK_START.md)** - Quick integration guide
3. **[doc/integration/QUICK_START.md](./integration/QUICK_START.md)** - Quick integration guide
4. **[BUILDING.md](../BUILDING.md)** - Build instructions
---
@@ -95,7 +95,7 @@ These files define the current truth about project state, decisions, and verific
## Integration Documentation
**Location:** `docs/integration/`
**Location:** `doc/integration/`
- **[INTEGRATION_GUIDE.md](./integration/INTEGRATION_GUIDE.md)** - Complete integration guide
- **[QUICK_START.md](./integration/QUICK_START.md)** - Quick integration path
@@ -109,7 +109,7 @@ These files define the current truth about project state, decisions, and verific
### iOS
**Location:** `docs/platform/ios/`
**Location:** `doc/platform/ios/`
- **[IOS_IMPLEMENTATION_CHECKLIST.md](./platform/ios/IOS_IMPLEMENTATION_CHECKLIST.md)** - iOS implementation checklist
- **[IMPLEMENTATION_DIRECTIVE.md](./platform/ios/IMPLEMENTATION_DIRECTIVE.md)** - iOS implementation directive
@@ -124,7 +124,7 @@ These files define the current truth about project state, decisions, and verific
### Android
**Location:** `docs/platform/android/`
**Location:** `doc/platform/android/`
- **[IMPLEMENTATION_DIRECTIVE.md](./platform/android/IMPLEMENTATION_DIRECTIVE.md)** - Primary Android implementation directive
- **[PHASE1_DIRECTIVE.md](./platform/android/PHASE1_DIRECTIVE.md)** - Phase 1 directive
@@ -140,7 +140,7 @@ These files define the current truth about project state, decisions, and verific
## Testing Documentation
**Location:** `docs/testing/`
**Location:** `doc/testing/`
### General Testing
@@ -183,7 +183,7 @@ Test app-specific documentation remains with the test apps but is indexed here:
## Alarm System Documentation
**Location:** `docs/alarms/`
**Location:** `doc/alarms/`
The alarm system documentation is well-organized and kept in its current location:
@@ -203,7 +203,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## Design & Research Documentation
**Location:** `docs/design/`
**Location:** `doc/design/`
- **[STARRED_PROJECTS_POLLING_IMPLEMENTATION.md](./design/STARRED_PROJECTS_POLLING_IMPLEMENTATION.md)** - Starred projects polling implementation
- **[exploration-findings-initial.md](./design/exploration-findings-initial.md)** - Initial exploration findings
@@ -215,7 +215,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## Architecture (Storage & Core Tech)
**Location:** `docs/architecture/`
**Location:** `doc/architecture/`
- **[CROSS_PLATFORM_STORAGE_PATTERN.md](./architecture/CROSS_PLATFORM_STORAGE_PATTERN.md)** - Cross-platform storage pattern
- **[DATABASE_INTERFACES.md](./architecture/DATABASE_INTERFACES.md)** - Database interfaces
@@ -226,7 +226,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## Deployment
**Location:** `docs/deployment/`
**Location:** `doc/deployment/`
- **[deployment-guide.md](./deployment/deployment-guide.md)** - Deployment guide (primary)
- **[DEPLOYMENT_CHECKLIST.md](./deployment/DEPLOYMENT_CHECKLIST.md)** - Deployment checklist
@@ -235,7 +235,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## Compliance & Operations
**Location:** `docs/compliance/`
**Location:** `doc/compliance/`
- **[accessibility-localization.md](./compliance/accessibility-localization.md)** - Accessibility and localization
- **[legal-store-compliance.md](./compliance/legal-store-compliance.md)** - Legal and store compliance
@@ -245,7 +245,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## Feature-Specific (Integration, Design, Progress)
### Integration (`docs/integration/`)
### Integration (`doc/integration/`)
- **[getting-valid-plan-ids.md](./integration/getting-valid-plan-ids.md)** - Getting valid plan IDs
- **[host-request-configuration.md](./integration/host-request-configuration.md)** - Host request configuration
@@ -254,7 +254,7 @@ The alarm system documentation is well-organized and kept in its current locatio
- **[capacitor-platform-service-clean-changes.md](./integration/capacitor-platform-service-clean-changes.md)** - Capacitor platform service changes
- **[ACTION_PLAN_INTEGRATION_FIXES.md](./integration/ACTION_PLAN_INTEGRATION_FIXES.md)** - Integration fixes action plan
### Design (`docs/design/`) — plans, prefetch, recovery
### Design (`doc/design/`) — plans, prefetch, recovery
- **[P1.5-CONSOLIDATION-PLAN.md](./design/P1.5-CONSOLIDATION-PLAN.md)** - P1.5 consolidation plan
- **[P1.5-STEP4-CLUSTERS.md](./design/P1.5-STEP4-CLUSTERS.md)** - P1.5 step 4 clusters
@@ -266,12 +266,12 @@ The alarm system documentation is well-organized and kept in its current locatio
- **[app-startup-recovery-solution.md](./design/app-startup-recovery-solution.md)** - App startup recovery solution
- **[plugin-requirements-implementation.md](./design/plugin-requirements-implementation.md)** - Plugin requirements implementation
### Progress (`docs/progress/`)
### Progress (`doc/progress/`)
- **[DEPLOYMENT_SUMMARY.md](./progress/DEPLOYMENT_SUMMARY.md)** - Deployment summary
- **[TODO-CLASSIFICATION.md](./progress/TODO-CLASSIFICATION.md)** - TODO classification
### Platform — Android (`docs/platform/android/`)
### Platform — Android (`doc/platform/android/`)
- **[CONSUMING_APP_ANDROID_NOTES.md](./platform/android/CONSUMING_APP_ANDROID_NOTES.md)** - Consuming app Android notes
- **[CONSUMING_APP_OPTIONAL_ANDROID_ID_CLEANUP.md](./platform/android/CONSUMING_APP_OPTIONAL_ANDROID_ID_CLEANUP.md)** - Optional Android ID cleanup
@@ -289,7 +289,7 @@ The alarm system documentation is well-organized and kept in its current locatio
## AI / Prompting / Automation Artifacts
**Location:** `docs/ai/`
**Location:** `doc/ai/`
These are derived operational artifacts for AI-assisted development:
@@ -305,7 +305,7 @@ These are derived operational artifacts for AI-assisted development:
## Archive Documentation
**Location:** `docs/archive/2025-legacy-doc/`
**Location:** `doc/archive/2025-legacy-doc/`
Historical documentation preserved verbatim. See [CONSOLIDATION_SOURCE_MAP.md](./_archive/2025-12-16-consolidation/CONSOLIDATION_SOURCE_MAP.md) for complete archive listing.
@@ -325,20 +325,20 @@ Historical documentation preserved verbatim. See [CONSOLIDATION_SOURCE_MAP.md](.
| Category | Count | Location |
|----------|-------|----------|
| **Core Documentation** | 8 | Root + `docs/` |
| **Integration** | 5 | `docs/integration/` |
| **Platform (iOS)** | 10 | `docs/platform/ios/` |
| **Platform (Android)** | 9 | `docs/platform/android/` |
| **Testing** | 13 | `docs/testing/` |
| **Alarms** | 11 | `docs/alarms/` |
| **Design & Research** | 5 | `docs/design/` |
| **Architecture** | 4 | `docs/architecture/` |
| **Deployment** | 2 | `docs/deployment/` |
| **Compliance** | 3 | `docs/compliance/` |
| **Feature-Specific (integration, design, progress, platform)** | 14 | `docs/integration/`, `docs/design/`, `docs/progress/`, `docs/platform/android/` |
| **AI Artifacts** | 7 | `docs/ai/` |
| **Core Documentation** | 8 | Root + `doc/` |
| **Integration** | 5 | `doc/integration/` |
| **Platform (iOS)** | 10 | `doc/platform/ios/` |
| **Platform (Android)** | 9 | `doc/platform/android/` |
| **Testing** | 13 | `doc/testing/` |
| **Alarms** | 11 | `doc/alarms/` |
| **Design & Research** | 5 | `doc/design/` |
| **Architecture** | 4 | `doc/architecture/` |
| **Deployment** | 2 | `doc/deployment/` |
| **Compliance** | 3 | `doc/compliance/` |
| **Feature-Specific (integration, design, progress, platform)** | 14 | `doc/integration/`, `doc/design/`, `doc/progress/`, `doc/platform/android/` |
| **AI Artifacts** | 7 | `doc/ai/` |
| **Test Apps** | 20+ | `test-apps/*/` |
| **Archive** | 29 | `docs/archive/2025-legacy-doc/` |
| **Archive** | 29 | `doc/archive/2025-legacy-doc/` |
### By Status
@@ -365,9 +365,9 @@ Historical documentation preserved verbatim. See [CONSOLIDATION_SOURCE_MAP.md](.
### By Platform
- **iOS**`docs/platform/ios/`
- **Android**`docs/platform/android/`
- **Cross-Platform**`docs/alarms/`, `docs/integration/`
- **iOS**`doc/platform/ios/`
- **Android**`doc/platform/android/`
- **Cross-Platform**`doc/alarms/`, `doc/integration/`
### By Phase
@@ -381,7 +381,7 @@ Historical documentation preserved verbatim. See [CONSOLIDATION_SOURCE_MAP.md](.
### Updating This Index
**Index-first rule:** New docs must be linked from `docs/00-INDEX.md` or explicitly placed under `_archive/` / `_reference/`.
**Index-first rule:** New docs must be linked from `doc/00-INDEX.md` or explicitly placed under `_archive/` / `_reference/`.
When adding new documentation:

View File

@@ -0,0 +1,280 @@
# Documentation Consolidation Source Map
**Date:** 2025-12-16
**Purpose:** Complete audit trail of all markdown file destinations during consolidation
**Total Files Mapped:** 139
This document guarantees no information loss by tracking every file's destination.
---
## Legend
- **Canonical**: File kept in active documentation, possibly edited/merged
- **Merged**: Content incorporated into canonical document, original archived
- **Archived**: File preserved verbatim in archive, referenced from index
---
## Root Canonical Files (Keep As-Is)
**Note (2025-03):** The following were moved after consolidation: `TODO.md``doc/progress/TODO.md`; `TODAY_SUMMARY.md``doc/progress/TODAY_SUMMARY.md`; `SESSION_RECONSTITUTION.md``doc/progress/SESSION_RECONSTITUTION.md`; `BATCH_A_COMPLETION_SUMMARY.md``doc/progress/BATCH_A_COMPLETION_SUMMARY.md`; `PR_DESCRIPTION.md``doc/_archive/PR_DESCRIPTION.md`; `MERGE_READY_SUMMARY.md``doc/_archive/MERGE_READY_SUMMARY.md`.
| Original Path | Status | Notes |
|--------------|--------|-------|
| `README.md` | Canonical | Main entry point, will link to doc/00-INDEX.md |
| `ARCHITECTURE.md` | Canonical | Foundational architecture document |
| `BUILDING.md` | Canonical | Build instructions |
| `CHANGELOG.md` | Canonical | Version history |
| `CONTRIBUTING.md` | Canonical | Contribution guidelines |
| `SECURITY.md` | Canonical | Security documentation |
| `API.md` | Canonical | API reference |
| `USAGE.md` | Canonical | Usage guide |
| `TODO.md` | Moved | → `doc/progress/TODO.md` |
| `PR_DESCRIPTION.md` | Moved | → `doc/_archive/PR_DESCRIPTION.md` |
| `MERGE_READY_SUMMARY.md` | Moved | → `doc/_archive/MERGE_READY_SUMMARY.md` |
---
## Integration Documentation (Consolidate to `doc/integration/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `INTEGRATION_GUIDE.md` | `doc/integration/INTEGRATION_GUIDE.md` | Canonical | Primary integration guide |
| `QUICK_INTEGRATION.md` | `doc/integration/QUICK_START.md` | Canonical | Quick start guide |
| `AI_INTEGRATION_GUIDE.md` | `doc/ai/AI_INTEGRATION_GUIDE.md` | Canonical | AI-specific integration |
| `doc/INTEGRATION_CHECKLIST.md` | `doc/integration/CHECKLIST.md` | Merged | Merge into INTEGRATION_GUIDE.md |
| `doc/INTEGRATION_REFACTOR_CONTEXT.md` | `doc/integration/REFACTOR_NOTES.md` | Merged | Merge context into refactor notes |
| `doc/INTEGRATION_REFACTOR_QUICK_START.md` | `doc/integration/REFACTOR_NOTES.md` | Merged | Merge into refactor notes |
| `doc/aar-integration-troubleshooting.md` | `doc/integration/TROUBLESHOOTING.md` | Merged | Merge into troubleshooting guide |
| `doc/integration-point-refactor-analysis.md` | `doc/integration/REFACTOR_NOTES.md` | Merged | Merge into refactor notes |
---
## Legacy Documentation (Archive to `doc/archive/2025-legacy-doc/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/BACKGROUND_DATA_FETCHING_PLAN.md` | `doc/archive/2025-legacy-doc/BACKGROUND_DATA_FETCHING_PLAN.md` | Archived | Historical planning doc |
| `doc/BUILD_FIXES_SUMMARY.md` | `doc/archive/2025-legacy-doc/BUILD_FIXES_SUMMARY.md` | Archived | Historical build fixes |
| `doc/BUILD_SCRIPT_IMPROVEMENTS.md` | `doc/archive/2025-legacy-doc/BUILD_SCRIPT_IMPROVEMENTS.md` | Archived | Historical build improvements |
| `doc/directives/0001-Daily-Notification-Plugin-Implementation-Directive.md` | `doc/archive/2025-legacy-doc/directives/0001-Daily-Notification-Plugin-Implementation-Directive.md` | Archived | Historical directive |
| `doc/directives/0002-Daily-Notification-Plugin-Recommendations.md` | `doc/archive/2025-legacy-doc/directives/0002-Daily-Notification-Plugin-Recommendations.md` | Archived | Historical recommendations |
| `doc/directives/0003-iOS-Android-Parity-Directive.md` | `doc/archive/2025-legacy-doc/directives/0003-iOS-Android-Parity-Directive.md` | Archived | Historical directive |
| `doc/implementation-roadmap.md` | `doc/archive/2025-legacy-doc/implementation-roadmap.md` | Archived | Historical roadmap |
| `doc/IOS_ANDROID_ERROR_CODE_MAPPING.md` | `doc/archive/2025-legacy-doc/IOS_ANDROID_ERROR_CODE_MAPPING.md` | Archived | Historical mapping |
| `doc/IOS_PHASE1_FINAL_SUMMARY.md` | `doc/archive/2025-legacy-doc/IOS_PHASE1_FINAL_SUMMARY.md` | Archived | Historical summary |
| `doc/IOS_PHASE1_GAPS_ANALYSIS.md` | `doc/archive/2025-legacy-doc/IOS_PHASE1_GAPS_ANALYSIS.md` | Archived | Historical analysis |
| `doc/IOS_PHASE1_IMPLEMENTATION_CHECKLIST.md` | `doc/platform/ios/IMPLEMENTATION_CHECKLIST.md` | Merged | Promote to canonical iOS docs |
| `doc/IOS_PHASE1_QUICK_REFERENCE.md` | `doc/archive/2025-legacy-doc/IOS_PHASE1_QUICK_REFERENCE.md` | Archived | Historical quick reference |
| `doc/IOS_PHASE1_READY_FOR_TESTING.md` | `doc/archive/2025-legacy-doc/IOS_PHASE1_READY_FOR_TESTING.md` | Archived | Historical testing status |
| `doc/IOS_PHASE1_TESTING_GUIDE.md` | `doc/testing/IOS_PHASE1_TESTING_GUIDE.md` | Merged | Promote to testing docs |
| `doc/IOS_TEST_APP_SETUP_GUIDE.md` | `doc/testing/IOS_TEST_APP_SETUP.md` | Merged | Promote to testing docs |
| `doc/migration-guide.md` | `doc/platform/ios/MIGRATION_GUIDE.md` | Merged | Promote to canonical iOS docs |
| `doc/notification-system.md` | `doc/archive/2025-legacy-doc/notification-system.md` | Archived | Historical system doc |
| `doc/PHASE1_COMPLETION_SUMMARY.md` | `doc/archive/2025-legacy-doc/PHASE1_COMPLETION_SUMMARY.md` | Archived | Historical summary |
| `doc/RESEARCH_COMPLETE.md` | `doc/archive/2025-legacy-doc/RESEARCH_COMPLETE.md` | Archived | Historical research doc |
| `doc/STARRED_PROJECTS_POLLING_IMPLEMENTATION.md` | `doc/design/STARRED_PROJECTS_POLLING_IMPLEMENTATION.md` | Canonical | Promote to design docs (large, relevant) |
| `doc/test-app-ios/ENHANCEMENTS_APPLIED.md` | `doc/archive/2025-legacy-doc/test-app-ios/ENHANCEMENTS_APPLIED.md` | Archived | Historical enhancements |
| `doc/test-app-ios/IOS_LOGGING_GUIDE.md` | `doc/testing/IOS_LOGGING_GUIDE.md` | Merged | Promote to testing docs |
| `doc/test-app-ios/IOS_PREFETCH_GLOSSARY.md` | `doc/platform/ios/PREFETCH_GLOSSARY.md` | Merged | Promote to iOS docs |
| `doc/test-app-ios/IOS_PREFETCH_TESTING.md` | `doc/testing/IOS_PREFETCH_TESTING.md` | Merged | Promote to testing docs |
| `doc/test-app-ios/IOS_TEST_APP_REQUIREMENTS.md` | `doc/testing/IOS_TEST_APP_REQUIREMENTS.md` | Merged | Promote to testing docs |
| `doc/UI_REQUIREMENTS.md` | `doc/archive/2025-legacy-doc/UI_REQUIREMENTS.md` | Archived | Historical requirements |
---
## Platform Documentation - iOS (Consolidate to `doc/platform/ios/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/IOS_IMPLEMENTATION_CHECKLIST.md` | `doc/platform/ios/IMPLEMENTATION_CHECKLIST.md` | Canonical | Primary iOS checklist |
| `doc/ios-implementation-directive.md` | `doc/platform/ios/IMPLEMENTATION_DIRECTIVE.md` | Canonical | iOS implementation directive |
| `doc/IOS_IMPLEMENTATION_DOCUMENTATION_REVIEW.md` | `doc/platform/ios/DOCUMENTATION_REVIEW.md` | Canonical | Documentation review |
| `doc/ios-core-data-migration.md` | `doc/platform/ios/CORE_DATA_MIGRATION.md` | Canonical | Core Data migration guide |
| `doc/ios-recovery-scenario-mapping.md` | `doc/platform/ios/RECOVERY_SCENARIO_MAPPING.md` | Canonical | Recovery scenario mapping |
| `doc/ios-rollover-edge-case-plan.md` | `doc/platform/ios/ROLLOVER_EDGE_CASES.md` | Canonical | Rollover edge cases |
| `doc/ios-rollover-implementation-review.md` | `doc/platform/ios/ROLLOVER_IMPLEMENTATION_REVIEW.md` | Canonical | Rollover implementation review |
| `doc/ios-rollover-open-questions-answers.md` | `doc/platform/ios/ROLLOVER_QA.md` | Canonical | Rollover Q&A |
| `doc/ios-troubleshooting-guide.md` | `doc/platform/ios/TROUBLESHOOTING.md` | Canonical | iOS troubleshooting |
---
## Platform Documentation - Android (Consolidate to `doc/platform/android/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/android-implementation-directive.md` | `doc/platform/android/IMPLEMENTATION_DIRECTIVE.md` | Canonical | Primary Android directive |
| `doc/android-implementation-directive-phase1.md` | `doc/platform/android/PHASE1_DIRECTIVE.md` | Canonical | Phase 1 directive |
| `doc/android-implementation-directive-phase2.md` | `doc/platform/android/PHASE2_DIRECTIVE.md` | Canonical | Phase 2 directive |
| `doc/android-implementation-directive-phase3.md` | `doc/platform/android/PHASE3_DIRECTIVE.md` | Canonical | Phase 3 directive |
| `doc/android-alarm-persistence-directive.md` | `doc/platform/android/ALARM_PERSISTENCE_DIRECTIVE.md` | Canonical | Alarm persistence directive |
| `doc/android-app-analysis.md` | `doc/platform/android/APP_ANALYSIS.md` | Canonical | App analysis |
| `doc/android-app-improvement-plan.md` | `doc/platform/android/APP_IMPROVEMENT_PLAN.md` | Canonical | App improvement plan |
| `android/BUILDING.md` | `doc/platform/android/BUILDING.md` | Canonical | Android build guide |
| `android/DATABASE_CONSOLIDATION_PLAN.md` | `doc/platform/android/DATABASE_CONSOLIDATION_PLAN.md` | Canonical | Database consolidation plan |
---
## Testing Documentation (Consolidate to `doc/testing/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/comprehensive-testing-guide-v2.md` | `doc/testing/COMPREHENSIVE_GUIDE.md` | Canonical | Primary testing guide |
| `doc/testing-quick-reference.md` | `doc/testing/QUICK_REFERENCE.md` | Canonical | Quick reference |
| `doc/testing-quick-reference-v2.md` | `doc/testing/QUICK_REFERENCE.md` | Merged | Merge into QUICK_REFERENCE.md |
| `doc/manual_smoke_test.md` | `doc/testing/MANUAL_SMOKE_TEST.md` | Canonical | Manual smoke test |
| `doc/notification-testing-procedures.md` | `doc/testing/NOTIFICATION_PROCEDURES.md` | Canonical | Notification testing |
| `doc/reboot-testing-procedure.md` | `doc/testing/REBOOT_PROCEDURE.md` | Canonical | Reboot testing |
| `doc/reboot-testing-steps.md` | `doc/testing/REBOOT_PROCEDURE.md` | Merged | Merge into REBOOT_PROCEDURE.md |
| `doc/boot-receiver-testing-guide.md` | `doc/testing/BOOT_RECEIVER_GUIDE.md` | Canonical | Boot receiver testing |
| `doc/standalone-emulator-guide.md` | `doc/testing/EMULATOR_GUIDE.md` | Canonical | Emulator guide |
| `doc/localhost-testing-guide.md` | `doc/testing/LOCALHOST_GUIDE.md` | Canonical | Localhost testing |
---
## Alarm System Documentation (Keep in `doc/alarms/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/alarms/000-UNIFIED-ALARM-DIRECTIVE.md` | `doc/alarms/000-UNIFIED-ALARM-DIRECTIVE.md` | Canonical | Keep as-is |
| `doc/alarms/01-platform-capability-reference.md` | `doc/alarms/01-platform-capability-reference.md` | Canonical | Keep as-is |
| `doc/alarms/02-plugin-behavior-exploration.md` | `doc/alarms/02-plugin-behavior-exploration.md` | Canonical | Keep as-is |
| `doc/alarms/03-plugin-requirements.md` | `doc/alarms/03-plugin-requirements.md` | Canonical | Keep as-is |
| `doc/alarms/ACTIVATION-GUIDE.md` | `doc/alarms/ACTIVATION-GUIDE.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE1-EMULATOR-TESTING.md` | `doc/alarms/PHASE1-EMULATOR-TESTING.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE1-VERIFICATION.md` | `doc/alarms/PHASE1-VERIFICATION.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE2-EMULATOR-TESTING.md` | `doc/alarms/PHASE2-EMULATOR-TESTING.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE2-VERIFICATION.md` | `doc/alarms/PHASE2-VERIFICATION.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE3-EMULATOR-TESTING.md` | `doc/alarms/PHASE3-EMULATOR-TESTING.md` | Canonical | Keep as-is |
| `doc/alarms/PHASE3-VERIFICATION.md` | `doc/alarms/PHASE3-VERIFICATION.md` | Canonical | Keep as-is |
---
## AI / ChatGPT Documentation (Consolidate to `doc/ai/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `chatgpt-assessment-package.md` | `doc/ai/chatgpt-assessment-package.md` | Canonical | AI artifacts |
| `chatgpt-files-overview.md` | `doc/ai/chatgpt-files-overview.md` | Canonical | AI artifacts |
| `chatgpt-improvement-directives-template.md` | `doc/ai/chatgpt-improvement-directives-template.md` | Canonical | AI artifacts |
| `code-summary-for-chatgpt.md` | `doc/ai/code-summary-for-chatgpt.md` | Canonical | AI artifacts |
| `key-code-snippets-for-chatgpt.md` | `doc/ai/key-code-snippets-for-chatgpt.md` | Canonical | AI artifacts |
| `doc/chatgpt-analysis-guide.md` | `doc/ai/chatgpt-analysis-guide.md` | Canonical | AI artifacts |
---
## Design & Research Documentation (Consolidate to `doc/design/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/exploration-findings-initial.md` | `doc/design/exploration-findings-initial.md` | Canonical | Design research |
| `doc/explore-alarm-behavior-directive.md` | `doc/design/explore-alarm-behavior-directive.md` | Canonical | Design research |
| `doc/improve-alarm-directives.md` | `doc/design/improve-alarm-directives.md` | Canonical | Design research |
| `doc/plugin-behavior-exploration-template.md` | `doc/design/plugin-behavior-exploration-template.md` | Canonical | Design template |
---
## Deployment Documentation (Keep in `doc/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `DEPLOYMENT_CHECKLIST.md` | `doc/DEPLOYMENT_CHECKLIST.md` | Canonical | Move to doc/ |
| `DEPLOYMENT_SUMMARY.md` | `doc/DEPLOYMENT_SUMMARY.md` | Canonical | Move to doc/ |
| `doc/deployment-guide.md` | `doc/DEPLOYMENT_GUIDE.md` | Canonical | Primary deployment guide |
---
## Feature-Specific Documentation (Keep in `doc/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `doc/CROSS_PLATFORM_STORAGE_PATTERN.md` | `doc/CROSS_PLATFORM_STORAGE_PATTERN.md` | Canonical | Keep as-is |
| `doc/DATABASE_INTERFACES.md` | `doc/DATABASE_INTERFACES.md` | Canonical | Keep as-is |
| `doc/DATABASE_INTERFACES_IMPLEMENTATION.md` | `doc/DATABASE_INTERFACES_IMPLEMENTATION.md` | Canonical | Keep as-is |
| `doc/NATIVE_FETCHER_CONFIGURATION.md` | `doc/NATIVE_FETCHER_CONFIGURATION.md` | Canonical | Keep as-is |
| `doc/platform-capability-reference.md` | `doc/platform-capability-reference.md` | Canonical | Keep as-is |
| `doc/plugin-requirements-implementation.md` | `doc/plugin-requirements-implementation.md` | Canonical | Keep as-is |
| `doc/prefetch-scheduling-diagnosis.md` | `doc/prefetch-scheduling-diagnosis.md` | Canonical | Keep as-is |
| `doc/prefetch-scheduling-trace.md` | `doc/prefetch-scheduling-trace.md` | Canonical | Keep as-is |
| `doc/app-startup-recovery-solution.md` | `doc/app-startup-recovery-solution.md` | Canonical | Keep as-is |
| `doc/getting-valid-plan-ids.md` | `doc/getting-valid-plan-ids.md` | Canonical | Keep as-is |
| `doc/host-request-configuration.md` | `doc/host-request-configuration.md` | Canonical | Keep as-is |
| `doc/hydrate-plan-implementation-guide.md` | `doc/hydrate-plan-implementation-guide.md` | Canonical | Keep as-is |
| `doc/user-zero-stars-implementation.md` | `doc/user-zero-stars-implementation.md` | Canonical | Keep as-is |
| `doc/accessibility-localization.md` | `doc/accessibility-localization.md` | Canonical | Keep as-is |
| `doc/legal-store-compliance.md` | `doc/legal-store-compliance.md` | Canonical | Keep as-is |
| `doc/observability-dashboards.md` | `doc/observability-dashboards.md` | Canonical | Keep as-is |
| `doc/file-organization-summary.md` | `doc/file-organization-summary.md` | Canonical | Keep as-is |
| `doc/capacitor-platform-service-clean-changes.md` | `doc/capacitor-platform-service-clean-changes.md` | Canonical | Keep as-is |
---
## Test App Documentation (Keep with Test Apps, Index in `doc/testing/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `test-apps/BUILD_PROCESS.md` | `test-apps/BUILD_PROCESS.md` | Canonical | Keep with test apps |
| `test-apps/android-test-app/doc/PHASE1_TEST0_GOLDEN.md` | `test-apps/android-test-app/doc/PHASE1_TEST0_GOLDEN.md` | Canonical | Keep with test apps |
| `test-apps/android-test-app/doc/PHASE1_TEST1_GOLDEN.md` | `test-apps/android-test-app/doc/PHASE1_TEST1_GOLDEN.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/doc/BUILD_QUICK_REFERENCE.md` | `test-apps/daily-notification-test/doc/BUILD_QUICK_REFERENCE.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/doc/NOTIFICATION_STACK_IMPROVEMENT_PLAN.md` | `test-apps/daily-notification-test/doc/NOTIFICATION_STACK_IMPROVEMENT_PLAN.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/doc/PLUGIN_DETECTION_GUIDE.md` | `test-apps/daily-notification-test/doc/PLUGIN_DETECTION_GUIDE.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/doc/VUE3_NOTIFICATION_IMPLEMENTATION_GUIDE.md` | `test-apps/daily-notification-test/doc/VUE3_NOTIFICATION_IMPLEMENTATION_GUIDE.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/IMPLEMENTATION_COMPLETE.md` | `test-apps/daily-notification-test/IMPLEMENTATION_COMPLETE.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/INVESTIGATION_JWT_ALGORITHM.md` | `test-apps/daily-notification-test/INVESTIGATION_JWT_ALGORITHM.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/INVESTIGATION_JWT_ALGORITHM_RESULTS.md` | `test-apps/daily-notification-test/INVESTIGATION_JWT_ALGORITHM_RESULTS.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/README.md` | `test-apps/daily-notification-test/README.md` | Canonical | Keep with test apps |
| `test-apps/daily-notification-test/TODO_NATIVE_FETCHER.md` | `test-apps/daily-notification-test/TODO_NATIVE_FETCHER.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/BUILD_NOTES.md` | `test-apps/ios-test-app/BUILD_NOTES.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/BUILD_SUCCESS.md` | `test-apps/ios-test-app/BUILD_SUCCESS.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/COMPILATION_FIXES.md` | `test-apps/ios-test-app/COMPILATION_FIXES.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/COMPILATION_STATUS.md` | `test-apps/ios-test-app/COMPILATION_STATUS.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/COMPILATION_SUMMARY.md` | `test-apps/ios-test-app/COMPILATION_SUMMARY.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/README.md` | `test-apps/ios-test-app/README.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/SETUP_COMPLETE.md` | `test-apps/ios-test-app/SETUP_COMPLETE.md` | Canonical | Keep with test apps |
| `test-apps/ios-test-app/SETUP_STATUS.md` | `test-apps/ios-test-app/SETUP_STATUS.md` | Canonical | Keep with test apps |
---
## Plugin-Specific Documentation (Keep in `ios/Plugin/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `ios/Plugin/README.md` | `ios/Plugin/README.md` | Canonical | Keep with plugin code |
---
## Cursor Rules Documentation (Keep in `.cursor/rules/`)
| Original Path | New Path | Status | Notes |
|--------------|----------|--------|-------|
| `.cursor/rules/README.md` | `.cursor/rules/README.md` | Canonical | Keep with cursor rules |
| `.cursor/rules/architecture/README.md` | `.cursor/rules/architecture/README.md` | Canonical | Keep with cursor rules |
| `.cursor/rules/meta_rule_architecture.md` | `.cursor/rules/meta_rule_architecture.md` | Canonical | Keep with cursor rules |
---
## Summary Statistics
- **Total Files:** 139
- **Canonical (Active):** ~95 files
- **Merged:** ~15 files
- **Archived:** ~29 files
---
## Verification Checklist
- [ ] All 139 files have a destination
- [ ] No file is marked for deletion
- [ ] All merged content is traceable
- [ ] Archive structure preserves original paths
- [ ] Index references all canonical files
- [ ] README.md links to doc/00-INDEX.md
---
**Last Updated:** 2025-12-16
**Status:** Complete - Ready for Implementation

View File

@@ -524,5 +524,5 @@ Integration is successful when:
After successful integration:
- Read [API.md](./API.md) for complete API reference
- Check [README.md](./README.md) for advanced usage
- Review [docs/notification-testing-procedures.md](./docs/notification-testing-procedures.md) for testing
- Review [doc/testing/NOTIFICATION_PROCEDURES.md](./testing/NOTIFICATION_PROCEDURES.md) for testing

View File

@@ -157,11 +157,11 @@ android/plugin/src/main/java/com/timesafari/dailynotification/
- `scripts/reboot-test.sh`: Reboot recovery testing
### **Documentation**
- `docs/boot-receiver-testing-guide.md`: Boot receiver testing
- `docs/app-startup-recovery-solution.md`: Recovery mechanism
- `docs/notification-testing-procedures.md`: Manual testing
- `docs/reboot-testing-procedure.md`: Reboot testing
- `docs/testing-quick-reference.md`: Quick reference
- `doc/testing/BOOT_RECEIVER_GUIDE.md`: Boot receiver testing
- `doc/design/app-startup-recovery-solution.md`: Recovery mechanism
- `doc/testing/NOTIFICATION_PROCEDURES.md`: Manual testing
- `doc/testing/REBOOT_PROCEDURE.md`: Reboot testing
- `doc/testing/QUICK_REFERENCE.md`: Quick reference
## 📊 Current Metrics

View File

@@ -138,7 +138,7 @@ npm run deploy
- **Annually**: Security reviews
### Support
- **Documentation**: See `docs/` directory
- **Documentation**: See `doc/` directory
- **Troubleshooting**: See [deployment-guide.md](./deployment-guide.md)
- **Monitoring**: See [observability-dashboards.md](../compliance/observability-dashboards.md)
- **Compliance**: See [legal-store-compliance.md](../compliance/legal-store-compliance.md)

View File

@@ -315,10 +315,10 @@ observability.configure({
#### Dashboard Setup
```bash
# Import sample dashboards
# See docs/compliance/observability-dashboards.md for Grafana/DataDog configurations
# See doc/compliance/observability-dashboards.md for Grafana/DataDog configurations
# Set up alerting rules
# See docs/compliance/observability-dashboards.md for Prometheus alerting
# See doc/compliance/observability-dashboards.md for Prometheus alerting
```
## Troubleshooting

View File

@@ -47,7 +47,7 @@
- **Nice-to-have**: 2 items (performance metrics/statistics)
- **Future (Phase 2/3)**: 19 items (explicitly deferred features)
- **TypeScript Stubs**: 3 items (iOS-specific stubs)
- [x] Create comprehensive classification document (`docs/TODO-CLASSIFICATION.md`)
- [x] Create comprehensive classification document (`doc/TODO-CLASSIFICATION.md`)
- [ ] Create issues for "must ship" items (7 issues needed)
- [ ] Move "Phase 2" items behind feature flags or to planning docs

View File

@@ -21,16 +21,16 @@ Create a **single authoritative documentation index** that clearly separates:
1. **No deletion** — Archive or redirect, never lose context
2. **Elevate contracts**`./ci/run.sh` and `./scripts/verify.sh` are policy-as-code
3. **Progress docs are authoritative**`docs/progress/` is the single source of truth for "where we are"
3. **Progress docs are authoritative**`doc/progress/` is the single source of truth for "where we are"
4. **Drift guards** — Every doc has: Purpose, Owner, Last Updated, Status
5. **Index lists only active docs** — Archive is discoverable but not cluttering navigation
6. **Index-first rule** — New docs must be linked from `docs/00-INDEX.md` or explicitly placed under `_archive/` / `_reference/`
6. **Index-first rule** — New docs must be linked from `doc/00-INDEX.md` or explicitly placed under `_archive/` / `_reference/`
---
## File-by-File Consolidation Plan
### 1. Authoritative Index (`docs/00-INDEX.md`)
### 1. Authoritative Index (`doc/00-INDEX.md`)
**Action:** Update to reflect P0 + P1.4 baseline and elevate contracts
@@ -40,12 +40,12 @@ Create a **single authoritative documentation index** that clearly separates:
- `./scripts/verify.sh` — Verification script (encodes invariants)
- `ci/README.md` — CI documentation
- Add **"Progress Tracking (Authoritative)"** section
- `docs/progress/00-STATUS.md` — Current phase, blockers, next actions
- `docs/progress/01-CHANGELOG-WORK.md` — Development changelog
- `docs/progress/02-OPEN-QUESTIONS.md` — Open questions and decisions
- `docs/progress/03-TEST-RUNS.md` — Test run log (canonical "what ran")
- `docs/progress/04-PARITY-MATRIX.md` — iOS/Android parity tracking
- `docs/progress/05-CHATGPT-FEEDBACK-PACKAGE.md` — AI collaboration package
- `doc/progress/00-STATUS.md` — Current phase, blockers, next actions
- `doc/progress/01-CHANGELOG-WORK.md` — Development changelog
- `doc/progress/02-OPEN-QUESTIONS.md` — Open questions and decisions
- `doc/progress/03-TEST-RUNS.md` — Test run log (canonical "what ran")
- `doc/progress/04-PARITY-MATRIX.md` — iOS/Android parity tracking
- `doc/progress/05-CHATGPT-FEEDBACK-PACKAGE.md` — AI collaboration package
- Update "Last Updated" to 2025-12-22
- Add "Baseline Tag" reference: `v1.0.11-p0-p1.4-complete`
@@ -53,7 +53,7 @@ Create a **single authoritative documentation index** that clearly separates:
---
### 2. Progress Docs (`docs/progress/`)
### 2. Progress Docs (`doc/progress/`)
**Action:** Add drift guard headers to all progress docs
@@ -77,16 +77,16 @@ Create a **single authoritative documentation index** that clearly separates:
---
### 3. Consolidation Artifacts (`docs/CONSOLIDATION_*.md`)
### 3. Consolidation Artifacts (`doc/CONSOLIDATION_*.md`)
**Action:** Archive with pointer
**Files:**
- `docs/CONSOLIDATION_COMPLETE.md` — Move to `docs/_archive/2025-12-16-consolidation/`
- `docs/CONSOLIDATION_SOURCE_MAP.md` — Move to `docs/_archive/2025-12-16-consolidation/`
- `doc/CONSOLIDATION_COMPLETE.md` — Move to `doc/_archive/2025-12-16-consolidation/`
- `doc/CONSOLIDATION_SOURCE_MAP.md` — Move to `doc/_archive/2025-12-16-consolidation/`
**Replacement:** Add note in `docs/00-INDEX.md` under "Archive Documentation":
> Historical consolidation artifacts from 2025-12-16 are preserved in `docs/_archive/2025-12-16-consolidation/`. See `CONSOLIDATION_SOURCE_MAP.md` for complete file mapping.
**Replacement:** Add note in `doc/00-INDEX.md` under "Archive Documentation":
> Historical consolidation artifacts from 2025-12-16 are preserved in `doc/_archive/2025-12-16-consolidation/`. See `CONSOLIDATION_SOURCE_MAP.md` for complete file mapping.
**Status:** Archive (preserve, don't delete)
@@ -97,8 +97,8 @@ Create a **single authoritative documentation index** that clearly separates:
#### 4.1 Testing Quick References
**Files:**
- `docs/testing/QUICK_REFERENCE.md` — Keep as canonical
- `docs/testing/QUICK_REFERENCE_V2.md` — Archive or merge
- `doc/testing/QUICK_REFERENCE.md` — Keep as canonical
- `doc/testing/QUICK_REFERENCE_V2.md` — Archive or merge
**Action:**
- If `QUICK_REFERENCE_V2.md` has unique content → Merge into `QUICK_REFERENCE.md`, then archive V2
@@ -111,9 +111,9 @@ Create a **single authoritative documentation index** that clearly separates:
#### 4.2 Integration Refactor Notes
**Files:**
- `docs/integration/REFACTOR_NOTES.md` — Keep as canonical
- `docs/integration/REFACTOR_NOTES_QUICK_START.md` — Check if duplicate
- `docs/integration/REFACTOR_ANALYSIS.md` — Check if duplicate
- `doc/integration/REFACTOR_NOTES.md` — Keep as canonical
- `doc/integration/REFACTOR_NOTES_QUICK_START.md` — Check if duplicate
- `doc/integration/REFACTOR_ANALYSIS.md` — Check if duplicate
**Action:**
- Review for overlap
@@ -127,13 +127,13 @@ Create a **single authoritative documentation index** that clearly separates:
#### 4.3 iOS Implementation Checklists
**Files:**
- `docs/platform/ios/IMPLEMENTATION_CHECKLIST.md` — Keep as canonical
- `docs/platform/ios/IOS_IMPLEMENTATION_CHECKLIST.md` — Check if duplicate
- `docs/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md` — Archive (already marked legacy)
- `doc/platform/ios/IMPLEMENTATION_CHECKLIST.md` — Keep as canonical
- `doc/platform/ios/IOS_IMPLEMENTATION_CHECKLIST.md` — Check if duplicate
- `doc/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md` — Archive (already marked legacy)
**Action:**
- If `IOS_IMPLEMENTATION_CHECKLIST.md` duplicates `IMPLEMENTATION_CHECKLIST.md` → Archive with pointer
- `IMPLEMENTATION_CHECKLIST_LEGACY.md` → Move to `docs/_archive/2025-legacy-doc/`
- `IMPLEMENTATION_CHECKLIST_LEGACY.md` → Move to `doc/_archive/2025-legacy-doc/`
**Status:** Review and consolidate
@@ -142,9 +142,9 @@ Create a **single authoritative documentation index** that clearly separates:
#### 4.4 Deployment Docs
**Files:**
- `docs/deployment/deployment-guide.md` — Keep as canonical (if exists)
- `docs/deployment/DEPLOYMENT_CHECKLIST.md` — Keep (complementary)
- `docs/progress/DEPLOYMENT_SUMMARY.md` — Keep (complementary)
- `doc/deployment/deployment-guide.md` — Keep as canonical (if exists)
- `doc/deployment/DEPLOYMENT_CHECKLIST.md` — Keep (complementary)
- `doc/progress/DEPLOYMENT_SUMMARY.md` — Keep (complementary)
**Action:**
- If `deployment/deployment-guide.md` and `DEPLOYMENT_GUIDE.md` are duplicates → Keep one, archive other
@@ -154,12 +154,12 @@ Create a **single authoritative documentation index** that clearly separates:
---
### 5. AI Artifacts (`docs/ai/`)
### 5. AI Artifacts (`doc/ai/`)
**Action:** Add drift guard headers, clarify purpose
**Files:**
- All files in `docs/ai/` should have:
- All files in `doc/ai/` should have:
- **Purpose:** AI collaboration artifacts (not product documentation)
- **Status:** active|reference-only
@@ -167,7 +167,7 @@ Create a **single authoritative documentation index** that clearly separates:
---
### 6. Platform Docs (`docs/platform/`)
### 6. Platform Docs (`doc/platform/`)
**Action:** Add drift guard headers, ensure no duplicates
@@ -175,7 +175,7 @@ Create a **single authoritative documentation index** that clearly separates:
---
### 7. Testing Docs (`docs/testing/`)
### 7. Testing Docs (`doc/testing/`)
**Action:** Add drift guard headers, consolidate duplicates
@@ -185,11 +185,11 @@ Create a **single authoritative documentation index** that clearly separates:
### 8. Archive Structure
**Current:** `docs/archive/2025-legacy-doc/`
**Current:** `doc/archive/2025-legacy-doc/`
**Action:** Create new archive for P1.5:
- `docs/_archive/2025-12-16-consolidation/` — Consolidation artifacts
- Keep `docs/archive/2025-legacy-doc/` as-is (historical)
- `doc/_archive/2025-12-16-consolidation/` — Consolidation artifacts
- Keep `doc/archive/2025-legacy-doc/` as-is (historical)
**Status:** Create new archive directory
@@ -199,7 +199,7 @@ Create a **single authoritative documentation index** that clearly separates:
### Step 1: Update Index (High Priority)
1. Update `docs/00-INDEX.md`:
1. Update `doc/00-INDEX.md`:
- Add "Policy & Contracts" section
- Add "Progress Tracking (Authoritative)" section
- Update Last Updated to 2025-12-22
@@ -211,7 +211,7 @@ Create a **single authoritative documentation index** that clearly separates:
### Step 2: Add Drift Guards (High Priority)
1. Add standard headers to all `docs/progress/*.md` files
1. Add standard headers to all `doc/progress/*.md` files
2. Add standard headers to key platform/testing docs
**Exit Criteria:** All progress docs have Purpose/Owner/Last Updated/Status
@@ -220,7 +220,7 @@ Create a **single authoritative documentation index** that clearly separates:
### Step 3: Archive Consolidation Artifacts (Medium Priority)
1. Create `docs/_archive/2025-12-16-consolidation/`
1. Create `doc/_archive/2025-12-16-consolidation/`
2. Move `CONSOLIDATION_COMPLETE.md` and `CONSOLIDATION_SOURCE_MAP.md`
3. Add pointer in index
@@ -242,7 +242,7 @@ Create a **single authoritative documentation index** that clearly separates:
### Step 5: Document Contracts Explicitly (Low Priority)
1. Ensure `ci/README.md` clearly states: "This is policy-as-code"
2. Add note in `docs/00-INDEX.md` that `./ci/run.sh` is the CI contract
2. Add note in `doc/00-INDEX.md` that `./ci/run.sh` is the CI contract
**Exit Criteria:** Contracts are clearly documented as policy
@@ -250,7 +250,7 @@ Create a **single authoritative documentation index** that clearly separates:
## Success Criteria
- [ ] `docs/00-INDEX.md` elevates contracts and progress docs
- [ ] `doc/00-INDEX.md` elevates contracts and progress docs
- [ ] All progress docs have drift guard headers
- [ ] Consolidation artifacts archived with pointers
- [ ] Duplicate docs consolidated (merged or archived with pointers)

View File

@@ -18,8 +18,8 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
### Files to Review
- `docs/testing/QUICK_REFERENCE.md` — Current canonical
- `docs/testing/QUICK_REFERENCE_V2.md` — Potential duplicate
- `doc/testing/QUICK_REFERENCE.md` — Current canonical
- `doc/testing/QUICK_REFERENCE_V2.md` — Potential duplicate
### Decision Process
@@ -31,12 +31,12 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
- [ ] Review both files side-by-side
- [ ] Decide: merge or archive
- [ ] If merge: Update `QUICK_REFERENCE.md` with V2 content, archive V2
- [ ] If archive: Move V2 to `docs/_archive/2025-12-16-consolidation/`, add pointer in `QUICK_REFERENCE.md`
- [ ] Update `docs/00-INDEX.md` (remove V2 from active list if archived)
- [ ] If archive: Move V2 to `doc/_archive/2025-12-16-consolidation/`, add pointer in `QUICK_REFERENCE.md`
- [ ] Update `doc/00-INDEX.md` (remove V2 from active list if archived)
### Authoritative Doc
- `docs/testing/QUICK_REFERENCE.md` (keep as canonical)
- `doc/testing/QUICK_REFERENCE.md` (keep as canonical)
### Expected Outcome
@@ -49,9 +49,9 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
### Files to Review
- `docs/integration/REFACTOR_NOTES.md` — Current canonical
- `docs/integration/REFACTOR_NOTES_QUICK_START.md` — Check if duplicate
- `docs/integration/REFACTOR_ANALYSIS.md` — Check if duplicate
- `doc/integration/REFACTOR_NOTES.md` — Current canonical
- `doc/integration/REFACTOR_NOTES_QUICK_START.md` — Check if duplicate
- `doc/integration/REFACTOR_ANALYSIS.md` — Check if duplicate
### Decision Process
@@ -65,11 +65,11 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
- [ ] Identify unique vs duplicate content
- [ ] If duplicates: Archive with pointer in `REFACTOR_NOTES.md`
- [ ] If unique: Keep all, add cross-references between files
- [ ] Update `docs/00-INDEX.md` (remove archived files from active list)
- [ ] Update `doc/00-INDEX.md` (remove archived files from active list)
### Authoritative Doc
- `docs/integration/REFACTOR_NOTES.md` (keep as canonical)
- `doc/integration/REFACTOR_NOTES.md` (keep as canonical)
### Expected Outcome
@@ -82,26 +82,26 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
### Files to Review
- `docs/platform/ios/IMPLEMENTATION_CHECKLIST.md` — Current canonical
- `docs/platform/ios/IOS_IMPLEMENTATION_CHECKLIST.md` — Check if duplicate
- `docs/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md` — Already marked legacy
- `doc/platform/ios/IMPLEMENTATION_CHECKLIST.md` — Current canonical
- `doc/platform/ios/IOS_IMPLEMENTATION_CHECKLIST.md` — Check if duplicate
- `doc/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md` — Already marked legacy
### Decision Process
1. **Compare content:**
- If `IOS_IMPLEMENTATION_CHECKLIST.md` duplicates `IMPLEMENTATION_CHECKLIST.md` → Archive with pointer
- If `IOS_IMPLEMENTATION_CHECKLIST.md` has unique content → Merge into `IMPLEMENTATION_CHECKLIST.md`, then archive
- `IMPLEMENTATION_CHECKLIST_LEGACY.md` → Move to `docs/_archive/2025-legacy-doc/` (already marked legacy)
- `IMPLEMENTATION_CHECKLIST_LEGACY.md` → Move to `doc/_archive/2025-legacy-doc/` (already marked legacy)
2. **Action:**
- [ ] Review `IOS_IMPLEMENTATION_CHECKLIST.md` vs `IMPLEMENTATION_CHECKLIST.md`
- [ ] Decide: merge or archive
- [ ] Move `IMPLEMENTATION_CHECKLIST_LEGACY.md` to `docs/_archive/2025-legacy-doc/`
- [ ] Update `docs/00-INDEX.md` (remove archived files from active list)
- [ ] Move `IMPLEMENTATION_CHECKLIST_LEGACY.md` to `doc/_archive/2025-legacy-doc/`
- [ ] Update `doc/00-INDEX.md` (remove archived files from active list)
### Authoritative Doc
- `docs/platform/ios/IMPLEMENTATION_CHECKLIST.md` (keep as canonical)
- `doc/platform/ios/IMPLEMENTATION_CHECKLIST.md` (keep as canonical)
### Expected Outcome
@@ -114,9 +114,9 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
### Files to Review
- `docs/deployment/deployment-guide.md` — Check if exists
- `docs/deployment/DEPLOYMENT_CHECKLIST.md` — Keep (complementary)
- `docs/progress/DEPLOYMENT_SUMMARY.md` — Keep (complementary)
- `doc/deployment/deployment-guide.md` — Check if exists
- `doc/deployment/DEPLOYMENT_CHECKLIST.md` — Keep (complementary)
- `doc/progress/DEPLOYMENT_SUMMARY.md` — Keep (complementary)
### Decision Process
@@ -134,13 +134,13 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
- [ ] If both exist: Compare content, decide merge or keep both
- [ ] If merge: Archive duplicate with pointer
- [ ] Ensure all deployment docs are cross-referenced
- [ ] Update `docs/00-INDEX.md` (remove archived files from active list)
- [ ] Update `doc/00-INDEX.md` (remove archived files from active list)
### Authoritative Doc
- `docs/deployment/deployment-guide.md` (primary)
- `docs/deployment/DEPLOYMENT_CHECKLIST.md` (complementary)
- `docs/DEPLOYMENT_SUMMARY.md` (complementary)
- `doc/deployment/deployment-guide.md` (primary)
- `doc/deployment/DEPLOYMENT_CHECKLIST.md` (complementary)
- `doc/DEPLOYMENT_SUMMARY.md` (complementary)
### Expected Outcome
@@ -162,8 +162,8 @@ Review and consolidate duplicate/superseded documentation with explicit "keep /
- [ ] All archived files moved to appropriate archive directories
- [ ] All pointers added to authoritative docs
- [ ] `docs/00-INDEX.md` updated (archived files removed from active list)
- [ ] `docs/progress/01-CHANGELOG-WORK.md` updated with consolidation summary
- [ ] `doc/00-INDEX.md` updated (archived files removed from active list)
- [ ] `doc/progress/01-CHANGELOG-WORK.md` updated with consolidation summary
---

View File

@@ -26,7 +26,7 @@
- [ ] Add cross-reference in both files:
- In `QUICK_REFERENCE.md`: "For P0 production-grade features testing, see [QUICK_REFERENCE_V2.md](./QUICK_REFERENCE_V2.md)"
- In `QUICK_REFERENCE_V2.md`: "For general testing commands, see [QUICK_REFERENCE.md](./QUICK_REFERENCE.md)"
- [ ] Update `docs/00-INDEX.md` to list both (already lists both)
- [ ] Update `doc/00-INDEX.md` to list both (already lists both)
---
@@ -53,7 +53,7 @@
- `REFACTOR_NOTES.md`: "See [REFACTOR_ANALYSIS.md](./REFACTOR_ANALYSIS.md) for architectural analysis and [REFACTOR_NOTES_QUICK_START.md](./REFACTOR_NOTES_QUICK_START.md) for quick start"
- `REFACTOR_NOTES_QUICK_START.md`: "See [REFACTOR_ANALYSIS.md](./REFACTOR_ANALYSIS.md) for complete analysis and [REFACTOR_NOTES.md](./REFACTOR_NOTES.md) for implementation context"
- `REFACTOR_ANALYSIS.md`: "See [REFACTOR_NOTES.md](./REFACTOR_NOTES.md) for implementation context and [REFACTOR_NOTES_QUICK_START.md](./REFACTOR_NOTES_QUICK_START.md) for quick start"
- [ ] Update `docs/00-INDEX.md` to list all three (already lists all)
- [ ] Update `doc/00-INDEX.md` to list all three (already lists all)
---
@@ -74,9 +74,9 @@
### Action
- [ ] Move `IMPLEMENTATION_CHECKLIST_LEGACY.md` to `docs/_archive/2025-legacy-doc/`
- [ ] Move `IMPLEMENTATION_CHECKLIST_LEGACY.md` to `doc/_archive/2025-legacy-doc/`
- [ ] Add pointer in `IOS_IMPLEMENTATION_CHECKLIST.md`: "For historical Phase 1 checklist, see [IMPLEMENTATION_CHECKLIST_LEGACY.md](../../_archive/2025-legacy-doc/IMPLEMENTATION_CHECKLIST_LEGACY.md)"
- [ ] Update `docs/00-INDEX.md` (remove LEGACY from active list, add to archive section)
- [ ] Update `doc/00-INDEX.md` (remove LEGACY from active list, add to archive section)
---
@@ -104,7 +104,7 @@
- In `deployment/deployment-guide.md`: "See [DEPLOYMENT_CHECKLIST.md](./DEPLOYMENT_CHECKLIST.md) for checklist and [DEPLOYMENT_SUMMARY.md](../progress/DEPLOYMENT_SUMMARY.md) for summary"
- In `deployment/DEPLOYMENT_CHECKLIST.md`: "See [deployment-guide.md](./deployment-guide.md) for complete guide"
- In `progress/DEPLOYMENT_SUMMARY.md`: "See [deployment-guide.md](../deployment/deployment-guide.md) for complete guide"
- [ ] Update `docs/00-INDEX.md` to list all three (already lists all)
- [ ] Update `doc/00-INDEX.md` to list all three (already lists all)
---
@@ -112,13 +112,13 @@
### Files to Archive
1. `docs/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md``docs/_archive/2025-legacy-doc/`
1. `doc/platform/ios/IMPLEMENTATION_CHECKLIST_LEGACY.md``doc/_archive/2025-legacy-doc/`
### Files to Keep (with cross-references)
1. `docs/testing/QUICK_REFERENCE.md` + `QUICK_REFERENCE_V2.md` (add cross-refs)
2. `docs/integration/REFACTOR_NOTES.md` + `REFACTOR_NOTES_QUICK_START.md` + `REFACTOR_ANALYSIS.md` (add cross-refs)
3. `docs/deployment/deployment-guide.md` + `deployment/DEPLOYMENT_CHECKLIST.md` + `progress/DEPLOYMENT_SUMMARY.md` (add cross-refs)
1. `doc/testing/QUICK_REFERENCE.md` + `QUICK_REFERENCE_V2.md` (add cross-refs)
2. `doc/integration/REFACTOR_NOTES.md` + `REFACTOR_NOTES_QUICK_START.md` + `REFACTOR_ANALYSIS.md` (add cross-refs)
3. `doc/deployment/deployment-guide.md` + `deployment/DEPLOYMENT_CHECKLIST.md` + `progress/DEPLOYMENT_SUMMARY.md` (add cross-refs)
### Index Updates
@@ -134,8 +134,8 @@
- [ ] Add cross-references to testing quick references
- [ ] Add cross-references to integration refactor notes
- [ ] Add cross-references to deployment docs
- [ ] Update `docs/00-INDEX.md` (archive section)
- [ ] Update `docs/progress/01-CHANGELOG-WORK.md` with consolidation summary
- [ ] Update `doc/00-INDEX.md` (archive section)
- [ ] Update `doc/progress/01-CHANGELOG-WORK.md` with consolidation summary
---

View File

@@ -47,7 +47,7 @@ After cleanup, we now have a clean, organized set of files with no redundancy or
- **Purpose**: Stale data UX handling example
- **Use Case**: Understanding fallback content and user experience
## Documentation Directory (`docs/`)
## Documentation Directory (`doc/`)
### Integration Guides

View File

@@ -248,12 +248,12 @@ await DailyNotification.scheduleDailyReminder({
- Read the [API Reference](./API.md) for complete method documentation
- Check [README.md](./README.md) for advanced usage examples
- Review [docs/notification-testing-procedures.md](./docs/notification-testing-procedures.md) for testing guidance
- Review [doc/testing/NOTIFICATION_PROCEDURES.md](./testing/NOTIFICATION_PROCEDURES.md) for testing guidance
## Support
For issues or questions:
- Check the troubleshooting section above
- Review the [API documentation](./API.md)
- Check [docs/notification-testing-procedures.md](./docs/notification-testing-procedures.md) for debugging steps
- Check [doc/testing/NOTIFICATION_PROCEDURES.md](./testing/NOTIFICATION_PROCEDURES.md) for debugging steps

Some files were not shown because too many files have changed in this diff Show More