@agent-native/core-corpus 0.212.1 → 0.213.1
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/onboarding-journeys/SKILL.md +29 -14
- package/corpus/templates/analytics/CHANGELOG.md +11 -0
- package/corpus/templates/analytics/actions/estimate-onboarding-journey-cost.ts +23 -6
- package/corpus/templates/analytics/actions/get-onboarding-journey.ts +20 -5
- package/corpus/templates/analytics/actions/provider-api-register.ts +2 -7
- package/corpus/templates/analytics/changelog/2026-10-21-analytics-recognizes-questions-about-connected-data-product-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-21-onboarding-journeys-now-honor-larger-event-row-budgets.md +6 -0
- package/corpus/templates/analytics/changelog/2026-10-21-preserve-unknown-replay-availability-in-partial-journeys.md +6 -0
- package/corpus/templates/analytics/package.json +6 -0
- package/corpus/templates/analytics/scripts/journey-capture-plan.ts +18 -7
- package/corpus/templates/analytics/scripts/journey-capture.ts +3 -1
- package/corpus/templates/analytics/server/lib/db-admin-connections.ts +19 -12
- package/corpus/templates/analytics/server/lib/journey-tree.ts +24 -9
- package/corpus/templates/analytics/server/lib/onboarding-journey-cost.ts +163 -94
- package/corpus/templates/analytics/server/lib/onboarding-journey.ts +162 -74
- package/corpus/templates/assets/server/lib/org-admin.ts +20 -16
- package/corpus/templates/brain/server/lib/zoom-governance.ts +11 -6
- package/corpus/templates/clips/CHANGELOG.md +1 -0
- package/corpus/templates/clips/changelog/2026-10-16-rewind-status-says-when-it-remembers-audio.md +6 -0
- package/corpus/templates/clips/desktop/src/app.tsx +7 -4
- package/corpus/templates/clips/desktop/src/components/RewindCaptureStatus.tsx +25 -0
- package/corpus/templates/clips/desktop/src/lib/rewind-status.ts +6 -1
- package/corpus/templates/clips/desktop/src/shared/config.ts +3 -0
- package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +2 -0
- package/corpus/templates/clips/server/lib/recordings.ts +4 -19
- package/corpus/templates/community/qr/package.json +1 -1
- package/corpus/templates/content/CHANGELOG.md +8 -0
- package/corpus/templates/content/actions/_content-space-access.ts +95 -6
- package/corpus/templates/content/actions/_database-utils.ts +20 -16
- package/corpus/templates/content/actions/_github-source-freshness.ts +72 -17
- package/corpus/templates/content/actions/_github-source-metadata.ts +63 -17
- package/corpus/templates/content/actions/_github-source.ts +141 -77
- package/corpus/templates/content/actions/check-github-connection.ts +15 -0
- package/corpus/templates/content/actions/create-github-collection.ts +180 -0
- package/corpus/templates/content/actions/disconnect-content-database-source.ts +5 -0
- package/corpus/templates/content/actions/link-github-folder.ts +104 -36
- package/corpus/templates/content/actions/refresh-content-database-source.ts +37 -4
- package/corpus/templates/content/actions/sync-github-folder.ts +23 -5
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +172 -19
- package/corpus/templates/content/app/components/editor/database/GitHubLinkDialog.tsx +938 -0
- package/corpus/templates/content/app/components/editor/database/GitHubSourcePanel.tsx +228 -0
- package/corpus/templates/content/app/components/editor/database/GitHubSourceStatusLine.tsx +561 -0
- package/corpus/templates/content/app/components/editor/database/GitHubUnlinkDialog.tsx +96 -0
- package/corpus/templates/content/app/components/editor/database/github-availability.ts +147 -0
- package/corpus/templates/content/app/components/editor/database/github-source-text.ts +280 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
- package/corpus/templates/content/app/hooks/content-action-refresh.ts +6 -0
- package/corpus/templates/content/app/hooks/use-content-database.ts +3 -1
- package/corpus/templates/content/app/hooks/use-github-folder.ts +199 -0
- package/corpus/templates/content/app/i18n-data.ts +154 -1
- package/corpus/templates/content/app/lib/github-link-dialog.ts +86 -0
- package/corpus/templates/content/changelog/2026-10-18-connected-ai-assistants-can-link-a-new-collection-to-a-github.md +1 -1
- package/corpus/templates/content/changelog/2026-10-18-link-a-new-collection-to-a-github-folder-from-its-sources.md +6 -0
- package/corpus/templates/content/changelog/2026-10-21-organization-favorites-include-documents-shared-with-the-cur.md +6 -0
- package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +32 -7
- package/corpus/templates/content/docs/product/encyclopedia.md +3 -3
- package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +2 -2
- package/corpus/templates/content/docs/product/roadmap.md +1 -1
- package/corpus/templates/content/parity/matrix.md +42 -42
- package/corpus/templates/content/parity/matrix.ts +14 -0
- package/corpus/templates/content/server/lib/github-source-client.ts +50 -1
- package/corpus/templates/content/shared/api.ts +3 -0
- package/corpus/templates/content/shared/github-source.ts +68 -0
- package/corpus/templates/design/CHANGELOG.md +1 -0
- package/corpus/templates/design/actions/connect-assets-mcp.ts +5 -9
- package/corpus/templates/design/changelog/2026-10-21-journey-canvases-accept-partial-analytics-samples-when-repla.md +6 -0
- package/corpus/templates/design/shared/journey-canvas.ts +6 -4
- package/corpus/templates/dispatch/.agents/skills/a2a-protocol/SKILL.md +16 -13
- package/corpus/templates/dispatch/CHANGELOG.md +4 -0
- package/corpus/templates/dispatch/changelog/2026-10-21-customer-ai-credit-questions-route-to-account-health-instead.md +6 -0
- package/corpus/templates/factory/server/lib/require-workspace-member.ts +5 -17
- package/corpus/templates/mail/server/lib/queued-drafts.ts +9 -4
- package/corpus/templates/slides/server/workspace-defaults.ts +12 -15
- package/package.json +1 -1
|
@@ -6,6 +6,159 @@ import { importMessagesByLocale } from "./import-messages";
|
|
|
6
6
|
import { trashMessagesByLocale } from "./trash-messages";
|
|
7
7
|
|
|
8
8
|
const databaseMessages = {
|
|
9
|
+
githubLinkTitle: "Link a GitHub folder",
|
|
10
|
+
githubNewCollectionTitle: "New collection from a GitHub folder",
|
|
11
|
+
githubLinkDescription:
|
|
12
|
+
"Its documents show up here as read-only pages and update on their own when the files change on GitHub.",
|
|
13
|
+
githubNewCollectionDescription:
|
|
14
|
+
"Content makes a collection named after the folder. Its documents show up there as read-only pages and update on their own when the files change on GitHub.",
|
|
15
|
+
githubLinkUrlLabel: "GitHub folder link",
|
|
16
|
+
githubLinkUrlHelp:
|
|
17
|
+
"On GitHub, open the folder and copy the address from your browser.",
|
|
18
|
+
githubLinkCheck: "Check folder",
|
|
19
|
+
githubLinkReading: "Reading the folder on GitHub…",
|
|
20
|
+
githubConnectChecking: "Checking your GitHub connection…",
|
|
21
|
+
githubConnectPrompt:
|
|
22
|
+
"Connect your GitHub account so Content can read your folders.",
|
|
23
|
+
githubConnect: "Connect GitHub",
|
|
24
|
+
githubPreviewPagesOne: "1 page",
|
|
25
|
+
githubPreviewPages: "{{count}} pages",
|
|
26
|
+
githubPreviewPagesUpTo: "Up to {{count}} pages",
|
|
27
|
+
githubLinkMore: "{{count}} more",
|
|
28
|
+
githubLinkNoFiles:
|
|
29
|
+
"This folder has no Markdown (.md) files, so there’s nothing to show.",
|
|
30
|
+
githubPreviewColumnsOne: "1 column",
|
|
31
|
+
githubPreviewColumns: "{{count}} columns",
|
|
32
|
+
githubLinkNoColumns:
|
|
33
|
+
"These files have no details at the top, so each page just gets its title.",
|
|
34
|
+
githubLinkNotShownOne: "1 file won’t show yet.",
|
|
35
|
+
githubLinkNotShown: "{{count}} files won’t show yet.",
|
|
36
|
+
githubLinkPicturesWaiting:
|
|
37
|
+
"Pictures in these files won’t show until a workspace admin sets up file storage.",
|
|
38
|
+
githubShowDetails: "Show details",
|
|
39
|
+
githubHideDetails: "Hide details",
|
|
40
|
+
githubDetailsPages: "Pages",
|
|
41
|
+
githubDetailsColumns: "Columns",
|
|
42
|
+
githubDetailsColumnsSampled:
|
|
43
|
+
"Read from the first {{count}} of {{total}} files. Others can add columns.",
|
|
44
|
+
githubDetailsNotShown: "Won’t show yet",
|
|
45
|
+
githubDetailsFrom: "From",
|
|
46
|
+
githubDetailsBranchVersion: "Branch {{branch}} · version {{commit}}",
|
|
47
|
+
githubYes: "Yes",
|
|
48
|
+
githubNo: "No",
|
|
49
|
+
githubSkipMdx: "Uses MDX, which Content can’t show yet",
|
|
50
|
+
githubSkipTooLarge: "Too big for Content to show",
|
|
51
|
+
githubSkipNotText: "Not a text file Content can read",
|
|
52
|
+
githubLinkSubmitOne: "Link 1 page",
|
|
53
|
+
githubLinkSubmit: "Link {{count}} pages",
|
|
54
|
+
githubLinkSubmitUpTo: "Link up to {{count}} pages",
|
|
55
|
+
githubLinking: "Linking…",
|
|
56
|
+
githubLinkingProgressOne: "Bringing in 1 page from GitHub…",
|
|
57
|
+
githubLinkingProgress: "Bringing in {{count}} pages from GitHub…",
|
|
58
|
+
githubLinkedToastOne: "Linked. 1 page from {{folder}} is here.",
|
|
59
|
+
githubLinkedToast: "Linked. {{count}} pages from {{folder}} are here.",
|
|
60
|
+
githubLinkedPartialToast:
|
|
61
|
+
"Linked. {{done}} of {{total}} pages are here; the rest arrive within a minute.",
|
|
62
|
+
githubLinkedSyncFailed: "Linked {{folder}}, but couldn’t bring pages in yet.",
|
|
63
|
+
githubLinkInvalidUrl:
|
|
64
|
+
"That isn’t a GitHub folder link. On GitHub, open the folder and copy the address from your browser.",
|
|
65
|
+
githubLinkFileUrl: "That’s a link to one file.",
|
|
66
|
+
githubLinkUseFolder: "Use the “{{folder}}” folder",
|
|
67
|
+
githubLinkRepositoryNotFound:
|
|
68
|
+
"Can’t open “{{repo}}”. Check the spelling, or make sure your GitHub account can see it.",
|
|
69
|
+
githubLinkBranchNotFound:
|
|
70
|
+
"There’s no branch called “{{branch}}” in {{repo}}. Check the link.",
|
|
71
|
+
githubLinkFolderNotFound:
|
|
72
|
+
"There’s no folder called “{{folder}}” in {{repo}}. Check the link.",
|
|
73
|
+
githubLinkForbidden:
|
|
74
|
+
"Your GitHub account can’t open “{{repo}}”. Ask its owner for access.",
|
|
75
|
+
githubLinkTooLarge:
|
|
76
|
+
"This folder has more than {{max}} files. Pick a smaller folder inside it.",
|
|
77
|
+
githubLinkUnavailable:
|
|
78
|
+
"Couldn’t reach GitHub just now. Try again in a minute.",
|
|
79
|
+
githubLinkBlockedHasRows:
|
|
80
|
+
"This collection has pages now, so a GitHub folder can’t fill it.",
|
|
81
|
+
githubLinkBlockedLinked:
|
|
82
|
+
"This collection already gets its pages from another app.",
|
|
83
|
+
githubLinkBlockedSystem: "This collection can’t show a GitHub folder.",
|
|
84
|
+
githubNewCollectionInstead: "New collection from GitHub",
|
|
85
|
+
githubRowAvailable: "Show a GitHub folder’s documents here",
|
|
86
|
+
githubRowConnectFirst: "Connect your GitHub account first",
|
|
87
|
+
githubRowEmptyOnly: "Only for empty collections",
|
|
88
|
+
githubRowOtherSource: "Already gets its pages from {{source}}",
|
|
89
|
+
githubRowFiles: "Not available for Files",
|
|
90
|
+
githubRowSystem: "Not available for this collection",
|
|
91
|
+
githubRowEditorsOnly: "Editors only",
|
|
92
|
+
githubRowLinked: "{{folder}} folder · Updated {{time}}",
|
|
93
|
+
githubRowLinkedNotUpdated: "{{folder}} folder · Not updated yet",
|
|
94
|
+
githubRowUnavailableWhileLinked: "Not available while linked to GitHub",
|
|
95
|
+
githubExplainHasPagesOne:
|
|
96
|
+
"A GitHub folder fills a whole collection, so it needs one with no pages. This one has 1 page.",
|
|
97
|
+
githubExplainHasPages:
|
|
98
|
+
"A GitHub folder fills a whole collection, so it needs one with no pages. This one has {{count}} pages.",
|
|
99
|
+
githubExplainOtherSource:
|
|
100
|
+
"A collection gets its pages from one place. This one uses {{source}}.",
|
|
101
|
+
githubExplainFiles: "The Files collection can’t show a GitHub folder.",
|
|
102
|
+
githubExplainSystem: "This collection can’t show a GitHub folder.",
|
|
103
|
+
githubExplainEditorsOnly:
|
|
104
|
+
"Only people who can edit this collection can link a GitHub folder. Ask its owner for edit access.",
|
|
105
|
+
githubExplainLinked:
|
|
106
|
+
"This collection’s pages come from GitHub. Unlink the folder to use another source.",
|
|
107
|
+
githubDetailFolder: "Folder",
|
|
108
|
+
githubDetailBranch: "Branch",
|
|
109
|
+
githubDetailVersion: "Version",
|
|
110
|
+
githubDetailUpdated: "Updated",
|
|
111
|
+
githubCheckForUpdates: "Check for updates",
|
|
112
|
+
githubOpenFolder: "Open in GitHub",
|
|
113
|
+
githubUnlinkFolder: "Unlink folder…",
|
|
114
|
+
githubUnlinkTitle: "Unlink this GitHub folder?",
|
|
115
|
+
githubUnlinkBodyOne:
|
|
116
|
+
"The 1 page stays here and becomes a normal page you can edit. Changes on GitHub won’t come in anymore. To link this folder again later, you’ll use a new collection.",
|
|
117
|
+
githubUnlinkBody:
|
|
118
|
+
"The {{count}} pages stay here and become normal pages you can edit. Changes on GitHub won’t come in anymore. To link this folder again later, you’ll use a new collection.",
|
|
119
|
+
githubUnlink: "Unlink",
|
|
120
|
+
githubUnlinking: "Unlinking…",
|
|
121
|
+
githubUnlinkedToast:
|
|
122
|
+
"Unlinked. Your pages are kept and you can edit them now.",
|
|
123
|
+
githubUnlinkFailed: "Couldn’t unlink the folder",
|
|
124
|
+
githubFromFolder: "From the {{folder}} folder on GitHub",
|
|
125
|
+
githubFromRepo: "From {{repo}} on GitHub",
|
|
126
|
+
githubUpdatedAgo: "Updated {{time}}",
|
|
127
|
+
githubJustNow: "just now",
|
|
128
|
+
githubNotUpdatedYet: "Not updated yet",
|
|
129
|
+
githubEditOnGitHub: "Edit on GitHub",
|
|
130
|
+
githubDetails: "Details",
|
|
131
|
+
githubNotShownOne: "1 file not shown",
|
|
132
|
+
githubNotShown: "{{count}} files not shown",
|
|
133
|
+
githubNotShownHeading: "Not shown",
|
|
134
|
+
githubShowingAsOf: "Showing pages as of {{time}}.",
|
|
135
|
+
githubSyncingProgress: "Bringing in changes: {{done}} of {{total}} files",
|
|
136
|
+
githubPicturesWaiting:
|
|
137
|
+
"Some pictures won’t show until a workspace admin sets up file storage.",
|
|
138
|
+
githubReconnect: "Reconnect GitHub",
|
|
139
|
+
githubProblemConnection:
|
|
140
|
+
"Stopped updating: GitHub needs you to sign in again.",
|
|
141
|
+
githubProblemForbidden:
|
|
142
|
+
"Stopped updating: your GitHub account can’t open this repository now. Ask its owner for access.",
|
|
143
|
+
githubProblemRepositoryNotFound:
|
|
144
|
+
"Stopped updating: the repository was moved, renamed or made private.",
|
|
145
|
+
githubProblemBranchNotFound:
|
|
146
|
+
"Stopped updating: the “{{branch}}” branch is gone from GitHub.",
|
|
147
|
+
githubProblemFolderNotFound:
|
|
148
|
+
"Stopped updating: the “{{folder}}” folder is gone from that branch.",
|
|
149
|
+
githubProblemPaused:
|
|
150
|
+
"Updates are paused for a moment. They’ll resume on their own.",
|
|
151
|
+
githubProblemTooLarge:
|
|
152
|
+
"Stopped updating: the folder now has more than {{max}} files.",
|
|
153
|
+
githubProblemStorageUnavailable:
|
|
154
|
+
"Pictures won’t show until a workspace admin sets up file storage.",
|
|
155
|
+
githubAlreadyUpToDate: "Up to date.",
|
|
156
|
+
githubSyncedToastOne: "Updated. 1 page changed.",
|
|
157
|
+
githubSyncedToast: "Updated. {{count}} pages changed.",
|
|
158
|
+
githubSyncPartialToast: "Updating: {{done}} of {{total}} files so far.",
|
|
159
|
+
githubSyncBusy:
|
|
160
|
+
"Already checking for updates. Changes show when it finishes.",
|
|
161
|
+
emptyCollectionSourceHint: "Or fill it from a source",
|
|
9
162
|
aField: "a field",
|
|
10
163
|
addAnotherItemSourceBeforeChangingToDetails:
|
|
11
164
|
"Add another item source before changing this source to details.",
|
|
@@ -377,7 +530,7 @@ const databaseMessages = {
|
|
|
377
530
|
range: "Range",
|
|
378
531
|
sum: "Sum",
|
|
379
532
|
thisDatabaseIsLocalConnectASourceToMapIts:
|
|
380
|
-
"
|
|
533
|
+
"Bring pages into this collection from another app.",
|
|
381
534
|
builderApiReadOnly: "Builder API read-only",
|
|
382
535
|
builderBodyEditsNeedSaferPath:
|
|
383
536
|
"Builder body edits need a safer push path before they can be sent.",
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** What the GitHub folder dialog links: a collection, or a new one it makes. */
|
|
2
|
+
export type GitHubLinkTarget =
|
|
3
|
+
| {
|
|
4
|
+
kind: "collection";
|
|
5
|
+
databaseId: string;
|
|
6
|
+
documentId: string;
|
|
7
|
+
/** Where a new collection beside this one would go, if it can't link. */
|
|
8
|
+
spaceId?: string;
|
|
9
|
+
parentId?: string | null;
|
|
10
|
+
}
|
|
11
|
+
| { kind: "new"; spaceId: string; parentId: string | null };
|
|
12
|
+
|
|
13
|
+
export interface GitHubLinkDialogRequest {
|
|
14
|
+
target: GitHubLinkTarget;
|
|
15
|
+
/** A folder link to start from, like one typed before connecting GitHub. */
|
|
16
|
+
url?: string;
|
|
17
|
+
returnFocusTo?: HTMLElement | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const GITHUB_LINK_DIALOG_OPEN_EVENT = "content:open-github-link";
|
|
21
|
+
|
|
22
|
+
export function openGitHubLinkDialog(request: GitHubLinkDialogRequest) {
|
|
23
|
+
window.dispatchEvent(
|
|
24
|
+
new CustomEvent<GitHubLinkDialogRequest>(GITHUB_LINK_DIALOG_OPEN_EVENT, {
|
|
25
|
+
detail: request,
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// The page's address carries the dialog through GitHub's sign-in, so the
|
|
31
|
+
// person comes back to it open rather than to where they started.
|
|
32
|
+
const KIND_PARAM = "githubLink";
|
|
33
|
+
const ID_PARAM = "githubId";
|
|
34
|
+
const PAGE_PARAM = "githubPage";
|
|
35
|
+
const URL_PARAM = "githubUrl";
|
|
36
|
+
const PARAMS = [KIND_PARAM, ID_PARAM, PAGE_PARAM, URL_PARAM];
|
|
37
|
+
|
|
38
|
+
/** This page's address with the dialog's target, for GitHub to return to. */
|
|
39
|
+
export function githubLinkReturnPath(
|
|
40
|
+
location: { pathname: string; search: string },
|
|
41
|
+
target: GitHubLinkTarget,
|
|
42
|
+
url?: string,
|
|
43
|
+
): string {
|
|
44
|
+
const params = new URLSearchParams(location.search);
|
|
45
|
+
for (const name of PARAMS) params.delete(name);
|
|
46
|
+
params.set(KIND_PARAM, target.kind);
|
|
47
|
+
if (target.kind === "collection") {
|
|
48
|
+
params.set(ID_PARAM, target.databaseId);
|
|
49
|
+
params.set(PAGE_PARAM, target.documentId);
|
|
50
|
+
} else {
|
|
51
|
+
params.set(ID_PARAM, target.spaceId);
|
|
52
|
+
if (target.parentId) params.set(PAGE_PARAM, target.parentId);
|
|
53
|
+
}
|
|
54
|
+
if (url?.trim()) params.set(URL_PARAM, url.trim());
|
|
55
|
+
return `${location.pathname}?${params.toString()}`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** The dialog an address asks to reopen, if any. */
|
|
59
|
+
export function githubLinkRequestFromSearch(
|
|
60
|
+
search: string,
|
|
61
|
+
): Omit<GitHubLinkDialogRequest, "returnFocusTo"> | null {
|
|
62
|
+
const params = new URLSearchParams(search);
|
|
63
|
+
const kind = params.get(KIND_PARAM);
|
|
64
|
+
const id = params.get(ID_PARAM);
|
|
65
|
+
const page = params.get(PAGE_PARAM);
|
|
66
|
+
const url = params.get(URL_PARAM) ?? undefined;
|
|
67
|
+
if (!id) return null;
|
|
68
|
+
if (kind === "collection" && page) {
|
|
69
|
+
return {
|
|
70
|
+
target: { kind, databaseId: id, documentId: page },
|
|
71
|
+
url,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if (kind === "new") {
|
|
75
|
+
return { target: { kind, spaceId: id, parentId: page || null }, url };
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The query string without the dialog's params, or "" when none are left. */
|
|
81
|
+
export function searchWithoutGitHubLink(search: string): string {
|
|
82
|
+
const params = new URLSearchParams(search);
|
|
83
|
+
for (const name of PARAMS) params.delete(name);
|
|
84
|
+
const rest = params.toString();
|
|
85
|
+
return rest ? `?${rest}` : "";
|
|
86
|
+
}
|
|
@@ -3,4 +3,4 @@ type: added
|
|
|
3
3
|
date: 2026-10-18
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Connected AI assistants can
|
|
6
|
+
Connected AI assistants can make a collection from a GitHub folder, or link an empty one: each Markdown file becomes a view-only page, and a sync brings in the latest pushes
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: added
|
|
3
|
+
date: 2026-10-18
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Make a collection from a GitHub folder in the sidebar's New menu, or fill an empty one from its Sources settings, 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, and unlinking asks first
|
|
@@ -6,7 +6,7 @@ name: "Source sync policy"
|
|
|
6
6
|
user_promise: "Each connected Source declares one plain-language policy for refresh and write-back: View only, Keep in sync, or Review before write-back."
|
|
7
7
|
primary_user_job: "Connect work that remains trustworthy without deciding on every edit whether it should leave Content."
|
|
8
8
|
kind: "primitive"
|
|
9
|
-
state: "
|
|
9
|
+
state: "in_progress"
|
|
10
10
|
publicness: "public"
|
|
11
11
|
availability: "configured"
|
|
12
12
|
dependencies: ["content.source.catalog", "content.event.committed"]
|
|
@@ -23,9 +23,20 @@ proof_requirements:
|
|
|
23
23
|
"Per-field or representation ownership, access intersection, base revisions, deterministic routing, conflict, retry, and receipt behavior",
|
|
24
24
|
"End-to-end View only, Keep in sync, and Review before write-back workflows with provider-side verification",
|
|
25
25
|
]
|
|
26
|
-
evidence:
|
|
26
|
+
evidence:
|
|
27
|
+
[
|
|
28
|
+
"templates/content/actions/_github-source.ts",
|
|
29
|
+
"templates/content/actions/_github-source-freshness.ts",
|
|
30
|
+
"templates/content/actions/github-source.db.test.ts",
|
|
31
|
+
"templates/content/shared/github-source.spec.ts",
|
|
32
|
+
"templates/content/actions/create-github-collection.ts",
|
|
33
|
+
"templates/content/app/components/editor/database/github-availability.ts",
|
|
34
|
+
"templates/content/app/components/editor/database/GitHubSourcePanel.tsx",
|
|
35
|
+
"templates/content/app/components/editor/database/GitHubSourceStatusLine.tsx",
|
|
36
|
+
"templates/content/app/components/editor/database/GitHubSourceStatusLine.ui.test.tsx",
|
|
37
|
+
]
|
|
27
38
|
superseded_by: null
|
|
28
|
-
last_reviewed: "2026-
|
|
39
|
+
last_reviewed: "2026-10-20"
|
|
29
40
|
---
|
|
30
41
|
|
|
31
42
|
# Source sync policy
|
|
@@ -134,11 +145,25 @@ mutation occurs until the required review decision succeeds.
|
|
|
134
145
|
|
|
135
146
|
## Current evidence
|
|
136
147
|
|
|
148
|
+
GitHub folders are the first Source whose **View only** policy holds end to
|
|
149
|
+
end. `templates/content/actions/_github-source.ts` brings a branch's Markdown
|
|
150
|
+
files into a Collection as Pages, resumably, renaming and trashing Pages as
|
|
151
|
+
files move or disappear, and Content refuses edits to those Pages with the
|
|
152
|
+
reason. `templates/content/actions/_github-source-freshness.ts` brings in
|
|
153
|
+
pushes on a background sweep and before stale reads, so nobody has to ask.
|
|
154
|
+
`GitHubSourceStatusLine.tsx` shows where the Pages come from and when they
|
|
155
|
+
last updated, with the synced commit behind Details and the specific problem
|
|
156
|
+
when one stops refresh. Sources says before any typing whether a Collection
|
|
157
|
+
can take a folder and why not (`github-availability.ts`), and
|
|
158
|
+
`create-github-collection.ts` makes a new Collection for the folder instead. `actions/github-source.db.test.ts`,
|
|
159
|
+
`shared/github-source.spec.ts`, and the status line's UI tests exercise these
|
|
160
|
+
paths through shared Actions and the interface.
|
|
161
|
+
|
|
137
162
|
Existing change sets, guarded writes, source metadata, local synchronization,
|
|
138
|
-
and audit records
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
therefore
|
|
163
|
+
and audit records remain useful donor machinery. No Source yet offers **Keep
|
|
164
|
+
in sync** or **Review before write-back**, and nothing proves ownership-aware
|
|
165
|
+
routing, conflict handling, or receipts for outbound writes. This Capability
|
|
166
|
+
is therefore `in_progress`.
|
|
142
167
|
|
|
143
168
|
## Proof plan
|
|
144
169
|
|
|
@@ -16,8 +16,8 @@ This index summarizes the atomic product contracts beneath the public roadmap. E
|
|
|
16
16
|
| Verified | 4 |
|
|
17
17
|
| Failing | 1 |
|
|
18
18
|
| Stale | 0 |
|
|
19
|
-
| In Progress |
|
|
20
|
-
| Approved Shape |
|
|
19
|
+
| In Progress | 21 |
|
|
20
|
+
| Approved Shape | 86 |
|
|
21
21
|
| Exploring | 8 |
|
|
22
22
|
| Deferred | 0 |
|
|
23
23
|
| Superseded | 5 |
|
|
@@ -499,7 +499,7 @@ graph LR
|
|
|
499
499
|
| [Page-linked Sources](capabilities/content.source.page-link.md) | Exploring | A Page can bind to one external item while keeping Content identity and the provider's ownership clear. |
|
|
500
500
|
| [Materialized multi-source Collections](capabilities/content.source.row-union.md) | Superseded | The former multi-source row-union model remains migration evidence, while active composition moves toward source Queries. |
|
|
501
501
|
| [Content spaces and Files](capabilities/content.source.spaces-files.md) | Verified | Personal and organization-backed Content spaces and Files views keep work navigable without becoming a second permission system. |
|
|
502
|
-
| [Source sync policy](capabilities/content.source.sync-policy.md) |
|
|
502
|
+
| [Source sync policy](capabilities/content.source.sync-policy.md) | In Progress | Each connected Source declares one plain-language policy for refresh and write-back: View only, Keep in sync, or Review before write-back. |
|
|
503
503
|
|
|
504
504
|
## System
|
|
505
505
|
|
|
@@ -8,7 +8,7 @@ order: 10
|
|
|
8
8
|
roadmap_status: "partially_implemented"
|
|
9
9
|
summary: "Keep supported edits synchronized according to one plain-language policy without silently losing provider-specific content."
|
|
10
10
|
example_workflow: "An editor updates a Builder article from Content; the supported changes synchronize, an unknown Builder component survives untouched, and changing Draft to Published remains a separate guarded action."
|
|
11
|
-
works_today: "Builder change sets, guarded writes, raw sidecars, local-folder synchronization, and source metadata already preserve several difficult round-trip and conflict boundaries."
|
|
11
|
+
works_today: "Builder change sets, guarded writes, raw sidecars, local-folder synchronization, and source metadata already preserve several difficult round-trip and conflict boundaries. A new Collection can follow a GitHub folder as View only, bringing in pushes within about a minute."
|
|
12
12
|
remains: "Every adapter needs certification against one plain-language sync policy, seamless automatic synchronization where safe, faithful unknown-content preservation, explicit lifecycle changes, and dependable receipts."
|
|
13
13
|
required_capabilities:
|
|
14
14
|
[
|
|
@@ -22,7 +22,7 @@ enhancing_capabilities:
|
|
|
22
22
|
increments: []
|
|
23
23
|
feature_proof: null
|
|
24
24
|
publicness: "public"
|
|
25
|
-
last_reviewed: "2026-
|
|
25
|
+
last_reviewed: "2026-10-18"
|
|
26
26
|
---
|
|
27
27
|
|
|
28
28
|
# Feature 10: Trust your connected Sources
|
|
@@ -285,7 +285,7 @@ Keep supported edits synchronized according to one plain-language policy without
|
|
|
285
285
|
|
|
286
286
|
**Example workflow:** An editor updates a Builder article from Content; the supported changes synchronize, an unknown Builder component survives untouched, and changing Draft to Published remains a separate guarded action.
|
|
287
287
|
|
|
288
|
-
**What works today:** Builder change sets, guarded writes, raw sidecars, local-folder synchronization, and source metadata already preserve several difficult round-trip and conflict boundaries.
|
|
288
|
+
**What works today:** Builder change sets, guarded writes, raw sidecars, local-folder synchronization, and source metadata already preserve several difficult round-trip and conflict boundaries. A new Collection can follow a GitHub folder as View only, bringing in pushes within about a minute.
|
|
289
289
|
|
|
290
290
|
**What remains:** Every adapter needs certification against one plain-language sync policy, seamless automatic synchronization where safe, faithful unknown-content preservation, explicit lifecycle changes, and dependable receipts.
|
|
291
291
|
|