personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

convey/import: adopt wave 0 error primitives for detail view (wave 1)

Migrate the detail bootstrap fetch to apiJson(...). Split failure UI so #importMeta shows a prominent .surface-state-refresh-error banner with err.serverMessage while the overview, import JSON, and imported JSON panels fall back to neutral unavailable copy. The literal Pending string remains reserved for legitimate server-side pending state.

Co-authored-by: OpenAI Codex <codex@openai.com>

+18 -7
+18 -7
apps/import/_detail.html
··· 176 176 let contentMonth = ''; 177 177 let searchDebounce = null; 178 178 179 + function escapeHtml(str) { 180 + if (!str) return ''; 181 + return str 182 + .replace(/&/g, '&amp;') 183 + .replace(/</g, '&lt;') 184 + .replace(/>/g, '&gt;') 185 + .replace(/"/g, '&quot;') 186 + .replace(/'/g, '&#39;'); 187 + } 188 + 179 189 tabs.forEach(tab => { 180 190 tab.addEventListener('click', () => { 181 191 const target = tab.dataset.target; ··· 434 444 } 435 445 436 446 // Load import details 437 - fetch('/app/import/api/{{ timestamp }}') 438 - .then(r => r.json()) 447 + window.apiJson('/app/import/api/{{ timestamp }}') 439 448 .then(data => { 440 449 // Update header metadata 441 450 const metaDiv = document.getElementById('importMeta'); ··· 540 549 541 550 }) 542 551 .catch(err => { 543 - console.error('Error loading import details:', err); 544 - document.getElementById('importMeta').innerHTML = '<span style="color:red;">Error loading import details</span>'; 545 - document.getElementById('overviewContent').innerHTML = '<div class="no-data">Error loading data</div>'; 546 - document.getElementById('importJsonContent').innerHTML = '<span class="no-data">Error loading data</span>'; 547 - document.getElementById('importedJsonContent').innerHTML = '<span class="no-data">Error loading data</span>'; 552 + const serverMessage = err?.serverMessage || err?.message || ''; 553 + document.getElementById('importMeta').innerHTML = `<div class="surface-state-refresh-error">Couldn&#39;t load import details.${serverMessage ? ` ${escapeHtml(serverMessage)}` : ''}</div>`; 554 + document.getElementById('overviewContent').innerHTML = '<div class="no-data">Overview unavailable</div>'; 555 + document.getElementById('importJsonContent').textContent = 'Upload metadata unavailable'; 556 + document.getElementById('importedJsonContent').textContent = 'Processing results unavailable'; 557 + document.getElementById('linksSection').style.display = 'none'; 558 + document.getElementById('filesList').style.display = 'none'; 548 559 }); 549 560 550 561 if (window.location.hash === '#content') {