Update OpenWiki for source ingest
All checks were successful
CI / build-and-deploy (push) Successful in 16s
All checks were successful
CI / build-and-deploy (push) Successful in 16s
This commit is contained in:
@@ -32,7 +32,7 @@ xcodegen generate
|
||||
Common target-membership traps:
|
||||
|
||||
- The main app includes `/MarksWidget/WidgetDataStore.swift` directly so it can write widget JSON.
|
||||
- The share extension includes selected shared files from `/Marks/Models` and `/Marks/Services`; if the extension needs new model/service code, add it in `/project.yml`.
|
||||
- The share extension includes selected shared files from `/Marks/Models` and `/Marks/Services`, including `IngestPayload.swift` for URL extraction; if the extension needs new model/service code, add it in `/project.yml`.
|
||||
- The app, widget, and share extension all depend on matching app-group entitlements.
|
||||
|
||||
## Testing
|
||||
@@ -46,6 +46,8 @@ Covered today:
|
||||
- `IntentRouter` open/search setters.
|
||||
- Direct no-network `perform()` tests for Search and Open intents.
|
||||
- App Shortcuts registration count.
|
||||
- `IngestPayloadParser` URL extraction from direct URLs, plain text, HTML-ish text, and notes.
|
||||
- `IngestedSourceStore` save/load behavior plus plain-text file import into a temporary root.
|
||||
|
||||
Not currently covered by repository tests:
|
||||
|
||||
@@ -56,6 +58,7 @@ Not currently covered by repository tests:
|
||||
- Widget timeline rendering/deep links.
|
||||
- Browser reading progress/reader mode.
|
||||
- Podcast generation, playback, queue, played/unplayed, and background audio behavior.
|
||||
- Sources tab UI, QuickLook presentation, PDF extraction edge cases, and source-backed podcast backend behavior.
|
||||
|
||||
Suggested test command:
|
||||
|
||||
@@ -88,17 +91,26 @@ AI changes:
|
||||
|
||||
Share extension changes:
|
||||
|
||||
- Share a new URL and an already-saved URL.
|
||||
- Share a new URL, an already-saved URL, and text/HTML/RTF content that contains a URL plus notes.
|
||||
- Verify duplicate-aware update behavior.
|
||||
- Test linkding auto-tags, AI suggestion chips, tag parsing, notes, read-later, and Create Podcast.
|
||||
- Confirm the extension works when shared config is missing; current UI shows an "Open Marks first" style failure.
|
||||
|
||||
Source ingest changes:
|
||||
|
||||
- Import typed text with title/tags and confirm it appears in Sources search.
|
||||
- Import a text file and a PDF through the file importer; confirm originals copy into Application Support and QuickLook opens imported files.
|
||||
- Confirm PDF text extraction works for text PDFs and handles image-only PDFs gracefully.
|
||||
- Delete a source and confirm metadata, copied file, and Spotlight entry are removed.
|
||||
- Create a podcast from a source and confirm cached playback uses the same `marks-source://` entry.
|
||||
|
||||
Podcast changes:
|
||||
|
||||
- Generate from bookmark row and Browser view.
|
||||
- Start generation while another podcast is playing; confirm background generation does not interrupt playback.
|
||||
- Test queue playback, played/unplayed state, delete, sleep timer, saved speed, background audio, remote controls, now-playing metadata, relaunch restore, and widget recent podcasts.
|
||||
- Share a URL with Create Podcast and confirm the main app drains and starts the queued request.
|
||||
- Generate from a local text/PDF source and confirm backend support for `text` and `source_kind`.
|
||||
|
||||
Widget/deep-link changes:
|
||||
|
||||
@@ -136,6 +148,8 @@ App-group defaults/files (`group.com.magicive.marks`):
|
||||
Application Support files:
|
||||
|
||||
- `bookmarks_cache.json` or `bookmarks_{host}.json` — cached bookmarks.
|
||||
- `Sources/sources.json` — local source metadata.
|
||||
- `Sources/files/{uuid}.{ext}` — copied originals for imported PDFs/files.
|
||||
- `podcasts/{hash}.mp3` — generated podcast audio.
|
||||
- `podcasts/index.json` — podcast metadata and played state.
|
||||
|
||||
@@ -148,7 +162,8 @@ Application Support files:
|
||||
- `MarksAuth` stores backend JWT/device state in `UserDefaults`, not Keychain.
|
||||
- App-group ID strings are duplicated in code and entitlements; update all occurrences together if changing it.
|
||||
- Share-extension podcast queue draining clears requests before generation success, so crash/retry semantics deserve care.
|
||||
- Recent git history shows podcast and on-device AI features were added across many files; avoid narrow changes that ignore cross-target data flow.
|
||||
- Source-backed podcast generation sends extracted text to the Marks backend; if the backend only accepts URL fetches, local source podcasts will fail even though bookmark podcasts still work.
|
||||
- Recent git history shows source ingest, podcast, and on-device AI features were added across many files; avoid narrow changes that ignore cross-target data flow.
|
||||
|
||||
## Existing design guidance
|
||||
|
||||
|
||||
Reference in New Issue
Block a user