Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
6f36cc4
Load Clockify and Notion integrations from Devonian
Sep 10, 2026
301883c
Load OAuth token endpoint from trusted metadata
Sep 10, 2026
80c438a
Remove server tests for extracted integration bundles
Sep 10, 2026
d689bb9
Restore integration regression tests during migration
Sep 10, 2026
9670cd3
Follow OpenAPI links across sync collections
Sep 10, 2026
b8265e4
Describe only root sync parameters
Sep 10, 2026
1e9069a
Validate full Moneybird traversal fixture
Sep 10, 2026
1c52289
Consume platform lenses from Devonian
Sep 10, 2026
7717e02
Make integration OAuth provider-driven
Sep 10, 2026
8f1cd78
Keep import budgets in consumer and preserve mixed record fields
Sep 10, 2026
aceb412
Pin generated OAuth provider metadata
Sep 10, 2026
4c1d25e
Apply catalog import selections explicitly
Sep 10, 2026
5985ad4
Handle declared absent objects and share link response context
Sep 10, 2026
f60a6e9
Document generic platform traversal regression coverage
Sep 10, 2026
f66ba5d
Extract GitHub and Calendar platform code
Sep 10, 2026
afcb5c6
Verify explicit selection removes inherited query defaults
Sep 10, 2026
cd9f29e
Validate per-item link selection and query removals
Sep 10, 2026
8ea49ec
Update Calendar import coverage ownership
Sep 10, 2026
e01599f
Load platform UI from Devonian registry
Sep 10, 2026
d2079b6
Restore neutral external action test fixture
Sep 10, 2026
32e4d5b
Run external platform tests against pinned package
Sep 10, 2026
0aa497c
Neutralize embedded platform host fixtures
Sep 10, 2026
8ab8ee2
Document pinned external platform regression coverage
Sep 10, 2026
3cd7e5e
Run external platform regressions in JS CI
Sep 10, 2026
05a3fe9
Render platform UI from external metadata
Sep 10, 2026
2f5d59f
Merge feat/api-plugins into PR 1419 and reconcile PKCE integration flow
Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions .dagger/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -468,15 +468,28 @@ export class AtomicServer {
depsContainer
.withWorkdir('/app')
.withExec(['pnpm', 'run', 'test'])
// jsBuild mounts external integration tests at /integrations and
// exposes the installed browser workspace at /browser.
.withWorkdir('/')
.withExec([
'/app/node_modules/.bin/vitest',
'run',
'--config',
'/integrations/localthought/vitest.config.ts',
])
.withExec([
'/app/node_modules/.bin/vitest',
'run',
'--config',
'/integrations/external-platform-tests.vitest.config.ts',
])
.withWorkdir('/app')
.withExec([
'node',
'--test',
'data-browser/scripts/integration-mcp.test.mjs',
])
// Provider packages stay outside core/browser bundles, but their fixture
// tests run in the same JS gate. Mirror the repo layout for SDK imports.
.withDirectory('/integrations', this.source.directory('integrations'))
.withExec(['ln', '-s', '/app', '/browser'])
// Provider certification shares the integration and browser mounts.
.withWorkdir('/')
.withExec(['node', '--test', '/integrations/tooling/certify.test.mjs'])
.withExec([
Expand Down
43 changes: 39 additions & 4 deletions TESTING_COVERAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -1196,14 +1196,16 @@ account.
COUNT/UNTIL, DST gaps and offset changes, exclusions/additions, moved/cancelled
instances, cross-calendar identities, provider-expanded deduplication and
date-only recurring spans. No real provider calls.
- `integrations/localthought/calendarRecurrence.test.ts`: complete recurrence
- The version-pinned Google Calendar Devonian package tests complete recurrence
metadata projection, normalized fields, minimal cancellation records and
refusal when instance identity is missing.
refusal when instance identity is missing. The catalog's schema overlay
declares `recurrence` and `originalStartTime` on the provider response.
- `browser/data-browser/src/chunks/TablePage/Calendar/calendarOccurrences.test.ts`:
imported/native property names, civil-day placement across offset boundaries,
recurring all-day spans clipped to the visible grid.
- `wasm/src/calendar_import.rs` unit tests: full-series queries omit date bounds,
both modes request tombstones, and catalogs retain recurrence/exception fields.
- `wasm/src/calendar_import.rs` unit tests: generic catalog selections set
documented query parameters, reject unknown paths and parameters, and remove
inherited `timeMin`, `timeMax`, and `orderBy` values for series requests.
- `browser/e2e/tests/google-calendar-import.spec.mts`: real browser/OPFS/import
preview using a mock provider, covering bounded instances and retained series,
moved/cancelled slots, reimport, reload and preservation of local notes.
Expand Down Expand Up @@ -1234,3 +1236,36 @@ tests reject malformed/mixed/nonpositive all-day intervals and verify raw
provider Start/End retention. The existing Google import E2E now imports a
three-day all-day event, asserts all three occupied cells and the excluded end,
and verifies repeated chips survive reload without duplicate resources.

## Metadata-driven platform extraction (2026-09-10)

`integrations/localthought/syncables/tests/query_bindings.rs` exercises Link
traversal with repeated identifiers in distinct parent contexts, query-only
bindings, missing source fields, duplicate incoming Links, root input discovery,
unqualified target parameters, and pagination beyond 50 pages.
`read_absence.rs` distinguishes declared missing-object responses from permission,
server, and undeclared errors. `ontology_shared_types.rs` preserves heterogeneous
shared fields as JSON.

`moneybird_fixture.rs` is explicitly ignored by the ordinary suite: it requires
external OAD and overlay directories. Run with `MONEYBIRD_OAD_DIR` and
`MONEYBIRD_OVERLAYS_DIR` plus `--ignored`. It covers 32 collections, two object
reads, the administration input, and all six consumer query selections against
the actual composed metadata. This is synthetic traversal, not live account
coverage.

`integrations/localthought/browser.test.ts` covers consumer-owned request budgets,
Retry-After handling with rotating credentials, deadline rejection, and separate
catalog selections with explicit caller precedence. OAuth provider tests cover
trusted external descriptors, origin/URL validation, and descriptor drift; the
real HTTP handoff test requires permission to bind a local socket.

The Local Thought Vitest suite imports Calendar code from the pinned Devonian
package. `integrations/external-platform-tests.vitest.config.ts` separately runs
relocated Clockify, Notion, and GitHub regressions against the installed package
with Atomic host aliases. Both suites are included in the Dagger integration
check; Devonian's own core tests do not replace these host integration tests.

Known limitations: Link `operationRef` is explicitly rejected; the implemented
traversal uses `operationId`. The browser preview rejects more than 5,000 records
with an explicit incomplete-import error rather than silently truncating.
1 change: 1 addition & 0 deletions browser/data-browser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
"clsx": "^2.1.1",
"codemirror-json-schema": "^0.8.1",
"diff": "^8.0.4",
"devonian": "github:localthought/devonian#fb415ef194f30cacb92b885e73c88b788dbcdde1",
"downshift": "^9.3.3",
"emoji-mart": "^5.6.0",
"fast-json-patch": "^3.1.1",
Expand Down
10 changes: 5 additions & 5 deletions browser/data-browser/src/chunks/DevonianDemo/demo.mjs
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
// @wc-ignore-file
import { BrowserIntegrations } from '../../../../../integrations/localthought/browser';
import { endpoint } from '../../../../../integrations/github-issues/adapter';
import { endpoint } from 'devonian/platform-lenses/github-issues/adapter';
import { get, set } from 'idb-keyval';
import { core, server, dataBrowser, Datatype, enableLoro } from '@tomic/lib';
import * as devonian from './devonian.js';
import * as devonian from 'devonian';
import { ensureAgentForDemo } from '../Demo/guestAgent';
import { buildTableFromSpec } from '../TablePage/createTableFromSpec';
import { Bridge } from '../../../../../integrations/github-issues/devonian/bridge.mjs';
import { Bridge } from 'devonian/platform-lenses/github-issues';
import {
AtomicPort,
GitHubPort,
} from '../../../../../integrations/github-issues/devonian/ports.mjs';
} from 'devonian/platform-lenses/github-issues/ports';
import {
fixtureTransport,
proxyTransport,
} from '../../../../../integrations/github-issues/devonian/proxy.mjs';
} from 'devonian/platform-lenses/github-issues/proxy';

export async function openDemo(store, options) {
await enableLoro();
Expand Down
137 changes: 0 additions & 137 deletions browser/data-browser/src/chunks/PluginRuns/CalendarSync.tsx

This file was deleted.

73 changes: 0 additions & 73 deletions browser/data-browser/src/chunks/PluginRuns/ClockifyUpgrade.tsx

This file was deleted.

Loading
Loading