@agent-native/core-corpus 0.212.0 → 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.
Files changed (76) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/.agents/skills/onboarding-journeys/SKILL.md +29 -14
  3. package/corpus/templates/analytics/CHANGELOG.md +11 -0
  4. package/corpus/templates/analytics/actions/estimate-onboarding-journey-cost.ts +23 -6
  5. package/corpus/templates/analytics/actions/get-onboarding-journey.ts +20 -5
  6. package/corpus/templates/analytics/actions/provider-api-register.ts +2 -7
  7. package/corpus/templates/analytics/changelog/2026-10-21-analytics-recognizes-questions-about-connected-data-product-.md +6 -0
  8. package/corpus/templates/analytics/changelog/2026-10-21-onboarding-journeys-now-honor-larger-event-row-budgets.md +6 -0
  9. package/corpus/templates/analytics/changelog/2026-10-21-preserve-unknown-replay-availability-in-partial-journeys.md +6 -0
  10. package/corpus/templates/analytics/package.json +6 -0
  11. package/corpus/templates/analytics/scripts/journey-capture-plan.ts +18 -7
  12. package/corpus/templates/analytics/scripts/journey-capture.ts +3 -1
  13. package/corpus/templates/analytics/server/lib/db-admin-connections.ts +19 -12
  14. package/corpus/templates/analytics/server/lib/journey-tree.ts +24 -9
  15. package/corpus/templates/analytics/server/lib/onboarding-journey-cost.ts +163 -94
  16. package/corpus/templates/analytics/server/lib/onboarding-journey.ts +162 -74
  17. package/corpus/templates/assets/server/lib/org-admin.ts +20 -16
  18. package/corpus/templates/brain/server/lib/zoom-governance.ts +11 -6
  19. package/corpus/templates/clips/CHANGELOG.md +1 -0
  20. package/corpus/templates/clips/changelog/2026-10-16-rewind-status-says-when-it-remembers-audio.md +6 -0
  21. package/corpus/templates/clips/desktop/src/app.tsx +7 -4
  22. package/corpus/templates/clips/desktop/src/components/RewindCaptureStatus.tsx +25 -0
  23. package/corpus/templates/clips/desktop/src/lib/rewind-status.ts +6 -1
  24. package/corpus/templates/clips/desktop/src/shared/config.ts +3 -0
  25. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +2 -0
  26. package/corpus/templates/clips/server/lib/recordings.ts +4 -19
  27. package/corpus/templates/community/qr/package.json +1 -1
  28. package/corpus/templates/content/CHANGELOG.md +8 -0
  29. package/corpus/templates/content/actions/_content-space-access.ts +95 -6
  30. package/corpus/templates/content/actions/_database-utils.ts +20 -16
  31. package/corpus/templates/content/actions/_github-source-freshness.ts +72 -17
  32. package/corpus/templates/content/actions/_github-source-metadata.ts +63 -17
  33. package/corpus/templates/content/actions/_github-source.ts +141 -77
  34. package/corpus/templates/content/actions/check-github-connection.ts +15 -0
  35. package/corpus/templates/content/actions/create-github-collection.ts +180 -0
  36. package/corpus/templates/content/actions/disconnect-content-database-source.ts +5 -0
  37. package/corpus/templates/content/actions/link-github-folder.ts +104 -36
  38. package/corpus/templates/content/actions/refresh-content-database-source.ts +37 -4
  39. package/corpus/templates/content/actions/sync-github-folder.ts +23 -5
  40. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +172 -19
  41. package/corpus/templates/content/app/components/editor/database/GitHubLinkDialog.tsx +938 -0
  42. package/corpus/templates/content/app/components/editor/database/GitHubSourcePanel.tsx +228 -0
  43. package/corpus/templates/content/app/components/editor/database/GitHubSourceStatusLine.tsx +561 -0
  44. package/corpus/templates/content/app/components/editor/database/GitHubUnlinkDialog.tsx +96 -0
  45. package/corpus/templates/content/app/components/editor/database/github-availability.ts +147 -0
  46. package/corpus/templates/content/app/components/editor/database/github-source-text.ts +280 -0
  47. package/corpus/templates/content/app/components/layout/Layout.tsx +2 -0
  48. package/corpus/templates/content/app/hooks/content-action-refresh.ts +6 -0
  49. package/corpus/templates/content/app/hooks/use-content-database.ts +3 -1
  50. package/corpus/templates/content/app/hooks/use-github-folder.ts +199 -0
  51. package/corpus/templates/content/app/i18n-data.ts +154 -1
  52. package/corpus/templates/content/app/lib/github-link-dialog.ts +86 -0
  53. package/corpus/templates/content/changelog/2026-10-18-connected-ai-assistants-can-link-a-new-collection-to-a-github.md +1 -1
  54. package/corpus/templates/content/changelog/2026-10-18-link-a-new-collection-to-a-github-folder-from-its-sources.md +6 -0
  55. package/corpus/templates/content/changelog/2026-10-21-organization-favorites-include-documents-shared-with-the-cur.md +6 -0
  56. package/corpus/templates/content/docs/product/capabilities/content.source.sync-policy.md +32 -7
  57. package/corpus/templates/content/docs/product/encyclopedia.md +3 -3
  58. package/corpus/templates/content/docs/product/features/content.feature.trust-your-connected-sources.md +2 -2
  59. package/corpus/templates/content/docs/product/roadmap.md +1 -1
  60. package/corpus/templates/content/parity/matrix.md +42 -42
  61. package/corpus/templates/content/parity/matrix.ts +14 -0
  62. package/corpus/templates/content/server/lib/github-source-client.ts +50 -1
  63. package/corpus/templates/content/shared/api.ts +3 -0
  64. package/corpus/templates/content/shared/github-source.ts +68 -0
  65. package/corpus/templates/design/CHANGELOG.md +1 -0
  66. package/corpus/templates/design/actions/connect-assets-mcp.ts +5 -9
  67. package/corpus/templates/design/changelog/2026-10-21-journey-canvases-accept-partial-analytics-samples-when-repla.md +6 -0
  68. package/corpus/templates/design/shared/journey-canvas.ts +6 -4
  69. package/corpus/templates/dispatch/.agents/skills/a2a-protocol/SKILL.md +16 -13
  70. package/corpus/templates/dispatch/CHANGELOG.md +10 -0
  71. package/corpus/templates/dispatch/changelog/2026-10-21-customer-ai-credit-questions-route-to-account-health-instead.md +6 -0
  72. package/corpus/templates/dispatch/changelog/2026-10-21-workspace-apps-load-reliably-with-organization-sign-in-and-f.md +6 -0
  73. package/corpus/templates/factory/server/lib/require-workspace-member.ts +5 -17
  74. package/corpus/templates/mail/server/lib/queued-drafts.ts +9 -4
  75. package/corpus/templates/slides/server/workspace-defaults.ts +12 -15
  76. 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
- "This collection is local. Connect a source to map its columns onto these rows.",
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 link a new collection to a GitHub folder: each Markdown file becomes a view-only page, and a sync brings in the latest pushes
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
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-10-21
4
+ ---
5
+
6
+ Organization favorites include documents shared with the current member
@@ -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: "approved_shape"
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-07-29"
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 provide useful donor machinery. They do not yet prove one
139
- plain-language policy across adapters, ownership-aware routing everywhere,
140
- reliable receipt semantics, or the full interface workflow. This Capability
141
- therefore remains `approved_shape`.
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 |
20
- | Approved Shape | 87 |
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) | Approved Shape | Each connected Source declares one plain-language policy for refresh and write-back: View only, Keep in sync, or Review before write-back. |
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-07-29"
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