@agent-native/core-corpus 0.216.0 → 0.218.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +61 -1
- package/corpus/templates/analytics/AGENTS.md +1 -1
- package/corpus/templates/analytics/CHANGELOG.md +3 -0
- package/corpus/templates/analytics/actions/get-session-replay-summary.ts +9 -65
- package/corpus/templates/analytics/actions/list-event-catalog.ts +1 -1
- package/corpus/templates/analytics/actions/list-session-outputs.ts +40 -0
- package/corpus/templates/analytics/actions/list-session-recordings.ts +17 -4
- package/corpus/templates/analytics/actions/view-screen.ts +29 -3
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +38 -167
- package/corpus/templates/analytics/app/i18n/en-US.ts +27 -0
- package/corpus/templates/analytics/app/pages/sessions/EventCatalogPage.tsx +18 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +3 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionOutputs.tsx +197 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionsTriagePage.tsx +114 -4
- package/corpus/templates/analytics/changelog/2026-10-15-sessions-can-find-people-who-made-a-slides-deck-but-didn-t-p.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-16-owned-and-shared-chats-appear-in-separate-history-sections.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-16-the-activation-funnel-counts-visitors-who-decline-analytics-.md +6 -0
- package/corpus/templates/analytics/server/db/schema.ts +67 -0
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +9 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +28 -22
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +36 -1
- package/corpus/templates/analytics/server/lib/output-outcomes.ts +712 -0
- package/corpus/templates/analytics/server/lib/replay-origins.ts +33 -0
- package/corpus/templates/analytics/server/lib/session-event-index.ts +20 -0
- package/corpus/templates/analytics/server/lib/session-performance.ts +6 -40
- package/corpus/templates/analytics/server/lib/session-recording-associations.ts +30 -1
- package/corpus/templates/analytics/server/lib/session-replay-triage.ts +99 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +45 -31
- package/corpus/templates/analytics/server/lib/sessions-triage-lab.ts +8 -2
- package/corpus/templates/analytics/server/plugins/db.ts +46 -0
- package/corpus/templates/analytics/shared/output-use.ts +205 -0
- package/corpus/templates/analytics/shared/session-events.ts +6 -0
- package/corpus/templates/assets/CHANGELOG.md +6 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +51 -117
- package/corpus/templates/assets/changelog/2026-10-16-owned-and-shared-chats-appear-in-separate-history-sections.md +6 -0
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +34 -101
- package/corpus/templates/brain/app/routes/sources.tsx +1 -1
- package/corpus/templates/brain/vitest.config.ts +7 -0
- package/corpus/templates/calendar/CHANGELOG.md +12 -0
- package/corpus/templates/calendar/actions/create-event.ts +2 -4
- package/corpus/templates/calendar/actions/update-event.ts +35 -6
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +1 -1
- package/corpus/templates/calendar/changelog/2026-10-16-booking-links-show-localized-visibility-badges.md +6 -0
- package/corpus/templates/calendar/changelog/2026-10-21-solo-events-avoid-notification-approval.md +6 -0
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +62 -101
- package/corpus/templates/clips/CHANGELOG.md +7 -20
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +20 -77
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +63 -90
- package/corpus/templates/clips/app/components/sharing/share-test-support.tsx +180 -0
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +5 -584
- package/corpus/templates/clips/changelog/2026-10-16-share-dialogs-make-it-easier-to-see-who-has-access-and-manag.md +6 -0
- package/corpus/templates/clips/changelog/2026-10-21-share-panels-describe-general-access-in-a-sentence.md +6 -0
- package/corpus/templates/community/qr/package.json +1 -1
- package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +6 -3
- package/corpus/templates/content/CHANGELOG.md +10 -0
- package/corpus/templates/content/actions/_browser-document-save-attempt.ts +23 -1
- package/corpus/templates/content/actions/_builder-cms-blob-custody.ts +467 -0
- package/corpus/templates/content/actions/_builder-cms-execution-lease.ts +17 -0
- package/corpus/templates/content/actions/_builder-cms-intent-lookup.ts +5 -0
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +881 -21
- package/corpus/templates/content/actions/_builder-cms-write-adapter.ts +28 -2
- package/corpus/templates/content/actions/_builder-cms-write-client.ts +109 -11
- package/corpus/templates/content/actions/_builder-docs-client.ts +1 -0
- package/corpus/templates/content/actions/_builder-private-blob.test-fixture.ts +90 -0
- package/corpus/templates/content/actions/_builder-source-execution-guard.ts +48 -0
- package/corpus/templates/content/actions/_content-save-outcomes.ts +5 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +290 -8
- package/corpus/templates/content/actions/_database-utils.ts +93 -7
- package/corpus/templates/content/actions/_database-view-setup.ts +21 -2
- package/corpus/templates/content/actions/_delete-content-space.ts +8 -1
- package/corpus/templates/content/actions/_github-source-freshness.ts +30 -4
- package/corpus/templates/content/actions/add-content-database-source-field-property.ts +23 -6
- package/corpus/templates/content/actions/cancel-prepared-builder-source-update.ts +110 -26
- package/corpus/templates/content/actions/change-content-database-source-role.ts +51 -7
- package/corpus/templates/content/actions/delete-document.ts +41 -3
- package/corpus/templates/content/actions/disconnect-content-database-source.ts +68 -2
- package/corpus/templates/content/actions/disconnect-local-folder-source.ts +33 -2
- package/corpus/templates/content/actions/execute-builder-source-execution.ts +900 -140
- package/corpus/templates/content/actions/get-document.ts +2 -0
- package/corpus/templates/content/actions/permanently-delete-document.ts +6 -0
- package/corpus/templates/content/actions/prepare-builder-source-execution.ts +155 -13
- package/corpus/templates/content/actions/prepare-builder-source-review.ts +299 -73
- package/corpus/templates/content/actions/set-live-body-switch.ts +45 -0
- package/corpus/templates/content/actions/update-document.ts +139 -20
- package/corpus/templates/content/actions/validate-builder-source-execution.ts +135 -26
- package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +119 -30
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +56 -13
- package/corpus/templates/content/app/components/editor/SuggestionText.tsx +18 -3
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +89 -22
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +23 -0
- package/corpus/templates/content/app/components/editor/database/GitHubSourceStatusLine.tsx +27 -2
- package/corpus/templates/content/app/components/editor/database/ListItemLayout.tsx +32 -8
- package/corpus/templates/content/app/components/editor/database/ListItemRow.tsx +27 -2
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +1 -0
- package/corpus/templates/content/app/components/editor/extensions/SuggestionHighlight.ts +383 -34
- package/corpus/templates/content/app/components/editor/suggestions/draft-session.ts +31 -0
- package/corpus/templates/content/app/components/editor/suggestions/presentation-rebase.ts +82 -4
- package/corpus/templates/content/app/global.css +31 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +40 -2
- package/corpus/templates/content/app/hooks/use-documents.ts +14 -0
- package/corpus/templates/content/app/i18n-data.ts +1 -0
- package/corpus/templates/content/changelog/2026-10-16-accepting-a-suggestion-on-a-page-that-changed-since-it-was-s.md +6 -0
- package/corpus/templates/content/changelog/2026-10-17-builder-content-avoids-retrying-a-write-when-builder-accepte.md +6 -0
- package/corpus/templates/content/changelog/2026-10-18-link-a-new-collection-to-a-github-folder-from-its-sources.md +1 -1
- package/corpus/templates/content/changelog/2026-10-20-builder-content-sync-keeps-read-and-write-status-accurate-wh.md +6 -0
- package/corpus/templates/content/changelog/2026-10-20-suggested-edits-that-add-remove-split-or-merge-paragraphs-li.md +6 -0
- package/corpus/templates/content/changelog/2026-10-21-list-rows-can-show-each-pages-first-lines.md +6 -0
- package/corpus/templates/content/changelog/2026-10-22-a-collection-linked-to-a-big-github-folder-fills-faster-and-p.md +6 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.adapters.md +29 -0
- package/corpus/templates/content/parity/matrix.md +42 -42
- package/corpus/templates/content/parity/matrix.ts +3 -1
- package/corpus/templates/content/server/db/schema.ts +20 -0
- package/corpus/templates/content/server/lib/content-trash-purge.ts +15 -1
- package/corpus/templates/content/server/lib/live-body-writer.ts +138 -26
- package/corpus/templates/content/server/live-copy/binding.ts +31 -0
- package/corpus/templates/content/server/live-copy/bounded-task.d.ts +6 -0
- package/corpus/templates/content/server/live-copy/exec-db.ts +1 -0
- package/corpus/templates/content/server/live-copy/holds.ts +59 -0
- package/corpus/templates/content/server/live-copy/persist.ts +656 -0
- package/corpus/templates/content/server/live-copy/switch.ts +136 -0
- package/corpus/templates/content/server/live-copy/task-names.ts +4 -0
- package/corpus/templates/content/server/live-copy/tasks.ts +183 -0
- package/corpus/templates/content/server/live-copy/write-cause.ts +85 -0
- package/corpus/templates/content/server/live-copy/write.ts +85 -0
- package/corpus/templates/content/server/plugins/builder-private-payload-cleanup.ts +22 -0
- package/corpus/templates/content/server/plugins/collab.ts +3 -0
- package/corpus/templates/content/server/plugins/db.ts +28 -0
- package/corpus/templates/content/shared/api.ts +30 -1
- package/corpus/templates/content/shared/database-item-layout.ts +54 -22
- package/corpus/templates/content/shared/document-intent-merge.ts +16 -9
- package/corpus/templates/content/shared/og-description.ts +258 -36
- package/corpus/templates/content/shared/suggestion-diff.ts +23 -6
- package/corpus/templates/content/shared/suggestion-formatting.ts +44 -14
- package/corpus/templates/content/shared/suggestion-text.ts +20 -5
- package/corpus/templates/design/.agents/skills/design-templates/SKILL.md +5 -1
- package/corpus/templates/design/.generated/bridge/shader-runtime.generated.ts +25 -4
- package/corpus/templates/design/CHANGELOG.md +5 -0
- package/corpus/templates/design/actions/get-getting-started.ts +53 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +10 -0
- package/corpus/templates/design/app/components/design/bridge/native-shader-runtime.bridge.ts +132 -79
- package/corpus/templates/design/app/components/design/bridge/native-source-provider.ts +268 -130
- package/corpus/templates/design/app/components/design/bridge/native-worker-scene-host.ts +122 -42
- package/corpus/templates/design/app/components/design/bridge/shader-runtime.bridge.ts +41 -4
- package/corpus/templates/design/app/components/design/design-canvas/text-content-change-result.ts +46 -12
- package/corpus/templates/design/app/components/home/DesignHomeLibrary.tsx +15 -8
- package/corpus/templates/design/app/components/layout/GettingStarted.tsx +50 -0
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +3 -0
- package/corpus/templates/design/app/components/templates/DesignTemplateGrid.tsx +163 -0
- package/corpus/templates/design/app/components/templates/DesignTemplateLibrary.tsx +65 -78
- package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +6 -2
- package/corpus/templates/design/app/global.css +6 -0
- package/corpus/templates/design/app/i18n/en-US.ts +17 -0
- package/corpus/templates/design/app/lib/canvas-load-outcome.ts +147 -0
- package/corpus/templates/design/app/lib/canvas-outcome-tracking.ts +531 -0
- package/corpus/templates/design/app/lib/canvas-style-kind.ts +50 -0
- package/corpus/templates/design/app/pages/DesignSystems.tsx +1 -1
- package/corpus/templates/design/app/pages/Index.tsx +28 -67
- package/corpus/templates/design/app/pages/design-editor/commands/commit-visual-styles.ts +86 -29
- package/corpus/templates/design/app/pages/design-editor/commands/save-file-content.ts +38 -3
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-core.ts +9 -0
- package/corpus/templates/design/app/pages/design-editor/domains/use-editor-files-and-saving.ts +2 -0
- package/corpus/templates/design/changelog/2026-10-16-design-pages-use-localized-visibility-badges-and-a-shared-ow.md +6 -0
- package/corpus/templates/design/changelog/2026-10-21-a-getting-started-checklist-at-the-bottom-of-the-sidebar-tra.md +6 -0
- package/corpus/templates/design/changelog/2026-10-21-templates-now-open-a-read-only-preview-from-the-card-and-the.md +6 -0
- package/corpus/templates/design/changelog/2026-10-22-collapsed-shader-layers-no-longer-interrupt-other-shaders-on.md +6 -0
- package/corpus/templates/design/changelog/2026-10-22-shader-fills-keep-rendering-when-other-screen-content-cannot.md +6 -0
- package/corpus/templates/design/scripts/design-export-validation/export-baseline.json +24 -0
- package/corpus/templates/design/server/lib/getting-started.ts +267 -0
- package/corpus/templates/design/server/plugins/getting-started.ts +5 -0
- package/corpus/templates/design/shared/design-template-presets/analytics-dashboard.ts +127 -0
- package/corpus/templates/design/shared/design-template-presets/design-studio.ts +98 -0
- package/corpus/templates/design/shared/design-template-presets/messaging-app.ts +101 -0
- package/corpus/templates/design/shared/design-template-presets/project-tasks.ts +120 -0
- package/corpus/templates/design/shared/design-template-presets.ts +8 -0
- package/corpus/templates/dispatch/CHANGELOG.md +4 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +75 -0
- package/corpus/templates/dispatch/changelog/2026-10-21-owned-and-shared-chats-appear-in-separate-history-sections.md +6 -0
- package/corpus/templates/factory/app/components/layout/Sidebar.tsx +34 -100
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +1 -1
- package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -1
- package/corpus/templates/plan/CHANGELOG.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +34 -109
- package/corpus/templates/plan/changelog/2026-10-16-owned-and-shared-chats-appear-in-separate-history-sections.md +6 -0
- package/corpus/templates/slides/CHANGELOG.md +7 -0
- package/corpus/templates/slides/actions/delete-deck.ts +7 -0
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +1 -1
- package/corpus/templates/slides/app/components/design-system/DesignSystemCard.tsx +1 -1
- package/corpus/templates/slides/app/pages/Index.tsx +7 -2
- package/corpus/templates/slides/changelog/2026-10-16-deck-lists-use-the-shared-ownership-filter-and-visibility-ba.md +6 -0
- package/corpus/templates/slides/changelog/2026-10-21-connected-deck-deletion-requires-approval.md +6 -0
- package/corpus/templates/slides/scripts/edit-fidelity/client-action.ts +61 -0
- package/corpus/templates/slides/scripts/edit-fidelity/run.ts +10 -0
- package/package.json +1 -1
- package/corpus/templates/chat/app/lib/sidebar-thread-state.ts +0 -29
- package/corpus/templates/slides/app/components/deck/DeckFilterMenu.tsx +0 -83
|
@@ -58,6 +58,7 @@ import type {
|
|
|
58
58
|
ValidateBuilderSourceExecutionRequest,
|
|
59
59
|
DocumentPropertyRelationTarget,
|
|
60
60
|
} from "@shared/api";
|
|
61
|
+
import { contentDatabaseViewsShowPageText } from "@shared/database-item-layout";
|
|
61
62
|
import type { Query, QueryClient } from "@tanstack/react-query";
|
|
62
63
|
import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|
63
64
|
|
|
@@ -255,6 +256,29 @@ export function contentDatabaseItemsContainingDocumentFilter(
|
|
|
255
256
|
};
|
|
256
257
|
}
|
|
257
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Collection reads whose row for a page shows its page text. The server skips
|
|
261
|
+
* a first paragraph that repeats the title, so a rename can change that text.
|
|
262
|
+
*/
|
|
263
|
+
export function contentDatabaseExcerptContainingDocumentFilter(
|
|
264
|
+
documentId: string,
|
|
265
|
+
) {
|
|
266
|
+
return {
|
|
267
|
+
queryKey: ["action", "get-content-database"],
|
|
268
|
+
predicate: (query: Query) => {
|
|
269
|
+
const data = query.state.data as
|
|
270
|
+
| Partial<ContentDatabaseResponse>
|
|
271
|
+
| undefined;
|
|
272
|
+
return (
|
|
273
|
+
data?.items?.some(
|
|
274
|
+
(item) =>
|
|
275
|
+
item.document.id === documentId && item.excerpt !== undefined,
|
|
276
|
+
) === true
|
|
277
|
+
);
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
|
|
258
282
|
export function invalidateContentDatabaseNavigationQueries(
|
|
259
283
|
queryClient: Pick<QueryClient, "invalidateQueries">,
|
|
260
284
|
scope: { databaseId?: string; parentId?: string | null } = {},
|
|
@@ -504,6 +528,20 @@ export function isContentDatabaseUnavailable(
|
|
|
504
528
|
);
|
|
505
529
|
}
|
|
506
530
|
|
|
531
|
+
/**
|
|
532
|
+
* Unpaged reads (row menus, pickers) leave out page text, so one can't stand
|
|
533
|
+
* in for the List's read of a collection whose List view shows it.
|
|
534
|
+
*/
|
|
535
|
+
function canSeedContentDatabaseRead(
|
|
536
|
+
data: ContentDatabaseResponse | undefined,
|
|
537
|
+
): data is ContentDatabaseResponse {
|
|
538
|
+
if (!data || isContentDatabaseUnavailable(data)) return false;
|
|
539
|
+
return (
|
|
540
|
+
!contentDatabaseViewsShowPageText(data.database?.viewConfig?.views ?? []) ||
|
|
541
|
+
data.items.every((item) => item.excerpt !== undefined)
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
|
|
507
545
|
export function readCachedContentDatabaseResponse(
|
|
508
546
|
queryClient: Pick<QueryClient, "getQueryData" | "getQueriesData">,
|
|
509
547
|
documentId: string,
|
|
@@ -511,13 +549,13 @@ export function readCachedContentDatabaseResponse(
|
|
|
511
549
|
const exact = queryClient.getQueryData<ContentDatabaseResponse>(
|
|
512
550
|
contentDatabaseQueryKey(documentId),
|
|
513
551
|
);
|
|
514
|
-
if (
|
|
552
|
+
if (canSeedContentDatabaseRead(exact)) return exact;
|
|
515
553
|
|
|
516
554
|
const cached = queryClient
|
|
517
555
|
.getQueriesData<ContentDatabaseResponse>(
|
|
518
556
|
contentDatabaseQueryFilter(documentId),
|
|
519
557
|
)
|
|
520
|
-
.find(([, data]) =>
|
|
558
|
+
.find(([, data]) => canSeedContentDatabaseRead(data));
|
|
521
559
|
return cached?.[1];
|
|
522
560
|
}
|
|
523
561
|
|
|
@@ -29,6 +29,7 @@ import type {
|
|
|
29
29
|
import type { ContentSidebarSections } from "@shared/content-personal-navigation";
|
|
30
30
|
import type { ContentRecentResult } from "@shared/content-personal-navigation";
|
|
31
31
|
import { applyContentPersonalNavigationPatch } from "@shared/content-personal-navigation-patch";
|
|
32
|
+
import { buildListRowExcerpt } from "@shared/og-description";
|
|
32
33
|
import type { QueryClient } from "@tanstack/react-query";
|
|
33
34
|
import {
|
|
34
35
|
hashKey,
|
|
@@ -88,6 +89,7 @@ import {
|
|
|
88
89
|
} from "./use-content-action-mutation";
|
|
89
90
|
import {
|
|
90
91
|
contentDatabaseConstrainedQueryFilter,
|
|
92
|
+
contentDatabaseExcerptContainingDocumentFilter,
|
|
91
93
|
contentDatabaseItemsContainingDocumentFilter,
|
|
92
94
|
contentDatabaseNavigationQueryFilter,
|
|
93
95
|
invalidateContentDatabaseNavigationQueries,
|
|
@@ -455,6 +457,17 @@ export function patchDocumentInDatabaseCache<
|
|
|
455
457
|
return {
|
|
456
458
|
...item,
|
|
457
459
|
document: { ...item.document, ...patch },
|
|
460
|
+
// A saved body, even an empty one, replaces the excerpt the read sent.
|
|
461
|
+
...(patch.content !== undefined &&
|
|
462
|
+
"excerpt" in item &&
|
|
463
|
+
item.excerpt !== undefined
|
|
464
|
+
? {
|
|
465
|
+
excerpt: buildListRowExcerpt({
|
|
466
|
+
content: patch.content,
|
|
467
|
+
title: patch.title ?? item.document.title,
|
|
468
|
+
}),
|
|
469
|
+
}
|
|
470
|
+
: {}),
|
|
458
471
|
};
|
|
459
472
|
});
|
|
460
473
|
return changed ? ({ ...current, items } as T) : current;
|
|
@@ -1554,6 +1567,7 @@ export function useUpdateDocument(options?: { saveOrigin?: "recovery" }) {
|
|
|
1554
1567
|
if (variables.title !== undefined) {
|
|
1555
1568
|
invalidateContentQueries(queryClient, [
|
|
1556
1569
|
contentDatabaseConstrainedQueryFilter(),
|
|
1570
|
+
contentDatabaseExcerptContainingDocumentFilter(variables.id),
|
|
1557
1571
|
...contentRowTargets(queryClient, [variables.id]),
|
|
1558
1572
|
["action", "search-documents"],
|
|
1559
1573
|
]);
|
|
@@ -473,6 +473,7 @@ const databaseMessages = {
|
|
|
473
473
|
listRowsMedium: "Medium",
|
|
474
474
|
listRowsBold: "Bold",
|
|
475
475
|
listRowsNothing: "Nothing",
|
|
476
|
+
listRowsPageText: "Page text",
|
|
476
477
|
listRowsOneLine: "1 line",
|
|
477
478
|
listRowsLineCount: "{{count}} lines",
|
|
478
479
|
listRowsNoStatus: "No status",
|
|
@@ -3,4 +3,4 @@ type: added
|
|
|
3
3
|
date: 2026-10-18
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Fill a collection from a GitHub folder through its Sources settings, which an empty collection links to from under its title and which say up front when GitHub can't link and what to do instead. A short preview comes before linking, the collection shows where its pages come from and when they last updated, with a link back to its folder in Sources, and unlinking asks first
|
|
@@ -134,6 +134,35 @@ adapters that are valuable substrate. Existing provider-specific behavior does
|
|
|
134
134
|
not yet certify the common declaration model, every operation, or cross-source
|
|
135
135
|
authorization and fidelity behavior. This Capability remains `in_progress`.
|
|
136
136
|
|
|
137
|
+
The bounded Builder OAuth consumer requests general content read/write scopes,
|
|
138
|
+
uses the existing models, query-data, and Write API routes, and binds
|
|
139
|
+
subsequent mutation calls to the Builder space observed during source refresh.
|
|
140
|
+
Focused client tests cover general OAuth precedence, legacy and Publish grant
|
|
141
|
+
separation, raw draft-inclusive enumeration, exact-entry reads, cross-space
|
|
142
|
+
rejection, and ambiguous writes without replay. This is adapter substrate, not
|
|
143
|
+
certification: Builder model discovery remains developer/admin-only, indexed
|
|
144
|
+
reads do not expose the editable autosave head, and the Write API has no
|
|
145
|
+
conditional write.
|
|
146
|
+
|
|
147
|
+
Existing-entry Builder writes are guarded on the Content side. Review records
|
|
148
|
+
the entry's Builder `lastUpdated` from the last refresh, and a later refresh
|
|
149
|
+
that moves it makes the review stale. Immediately before each existing-entry
|
|
150
|
+
write, Content reads the live `lastUpdated` through the bound OAuth content API
|
|
151
|
+
and blocks without writing when it differs from the reviewed value or when
|
|
152
|
+
either value is missing. This narrows the overwrite window but does not close
|
|
153
|
+
it: a Builder save that lands after that read and before Content's write
|
|
154
|
+
reaches Builder is still overwritten. Closing that window would need a
|
|
155
|
+
conditional write in Builder's API, which is out of scope. Unsaved Builder
|
|
156
|
+
editor state is not visible to the check. Focused execution tests cover it; it
|
|
157
|
+
has not been exercised against a live Builder space. New-entry creation keeps
|
|
158
|
+
its existing intent-reconciliation path.
|
|
159
|
+
|
|
160
|
+
Prepared requests and receipts use identity-bound private blobs with verified
|
|
161
|
+
readback; SQL stores compact opaque references. Exact replacement and deletion
|
|
162
|
+
cleanup runs after confirmed database success; ambiguous outcomes retain
|
|
163
|
+
evidence. A crash before pointer persistence can leave an unreachable blob; no
|
|
164
|
+
general garbage collector is added.
|
|
165
|
+
|
|
137
166
|
## Proof plan
|
|
138
167
|
|
|
139
168
|
1. Validate adapter declarations and Action routing for a read-only provider,
|