@@ -73,7 +73,8 @@ const openWebViewsByProject = new Map<string, string>();
7373 *
7474 * @param projectId - Project to open; if omitted a picker dialog is shown.
7575 * @returns The WebView ID of the opened (or focused) tab, or `undefined` if the user cancels.
76- * @throws If `papi.dialogs.selectProject` or `papi.webViews.openWebView` rejects.
76+ * @throws If `papi.dialogs.selectProject` rejects (e.g. platform error while showing the dialog).
77+ * @throws If `papi.webViews.openWebView` rejects (e.g. the platform cannot open or focus the tab).
7778 */
7879async function openInterlinearizer ( projectId ?: string ) : Promise < string | undefined > {
7980 const resolvedProjectId =
@@ -98,7 +99,8 @@ async function openInterlinearizer(projectId?: string): Promise<string | undefin
9899 *
99100 * @param webViewId - ID of an open WebView whose project to use; if omitted falls back to a picker.
100101 * @returns The WebView ID of the opened (or focused) tab, or `undefined` if the user cancels.
101- * @throws If `papi.webViews.getOpenWebViewDefinition` or `openInterlinearizer` rejects.
102+ * @throws If `papi.webViews.getOpenWebViewDefinition` rejects.
103+ * @throws Any error thrown by {@link openInterlinearizer} (dialog or WebView platform errors).
102104 */
103105async function openInterlinearizerForWebView ( webViewId ?: string ) : Promise < string | undefined > {
104106 if ( ! webViewId ) return openInterlinearizer ( ) ;
@@ -154,7 +156,11 @@ async function createInterlinearProject(
154156 *
155157 * @param interlinearProjectId - UUID of the interlinearizer project to delete.
156158 * @returns A promise that resolves when the deletion (or no-op) is complete.
157- * @throws Re-throws storage errors after logging/notifying so the caller can handle failure UX.
159+ * @throws {SyntaxError } If the project-IDs index contains invalid JSON (propagated from
160+ * {@link projectStorage.deleteProject} via {@link readIds}).
161+ * @throws If `papi.storage.deleteUserData` rejects for a non-ENOENT reason, or if
162+ * `papi.storage.writeUserData` rejects when updating the index. All storage errors are logged and
163+ * shown as a notification before being re-thrown so the caller can handle failure UX.
158164 */
159165async function deleteInterlinearProject ( interlinearProjectId : string ) : Promise < void > {
160166 try {
@@ -219,8 +225,10 @@ async function updateProjectMetadata(
219225 *
220226 * @param sourceProjectId - Platform.Bible project ID of the source text to query.
221227 * @returns A JSON string of `InterlinearProject[]`, or `"[]"` if none exist.
222- * @throws The storage error when the underlying read fails, so callers can distinguish an outage
223- * from an empty list.
228+ * @throws {SyntaxError } If the project-IDs index or any project record contains invalid JSON.
229+ * @throws If `papi.storage.readUserData` rejects for a non-ENOENT reason (propagated from
230+ * {@link projectStorage.getProjectsForSource}). Callers can use this to distinguish a storage
231+ * outage from a legitimately empty list.
224232 */
225233async function getProjectsForSource ( sourceProjectId : string ) : Promise < string > {
226234 try {
@@ -347,7 +355,8 @@ export async function activate(context: ExecutionActivationContext): Promise<voi
347355 updateProjectMetadata ,
348356 {
349357 method : {
350- summary : 'Update the name and description of an existing interlinearizer project' ,
358+ summary :
359+ 'Update the name, description, and analysis language of an existing interlinearizer project' ,
351360 params : [
352361 {
353362 name : 'interlinearProjectId' ,
0 commit comments