Clone this repository
For self-hosted knots, clone URLs may differ based on your setup.
carry:// and vault:// URI schemes are not valid connection targets.
The graph only deals with https:// URLs.
- Filesystem touchpoints: extract the https:// URL from each carry/vault
note and use it as the target. Notes without URLs are skipped.
- D1 carry touchpoints: use the carry record url field (not atUri) as
the target for entities and reasonings. Citations already used url.
- Deleted 41 garbage connection records from PDS (carry://, vault://,
and at:// targets).
- Removed temporary cleanupConnections endpoint.
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Container now syncs both vault (ob sync) and carry (git pull) on startup:
- Fixed obsidian-cli → obsidian-headless (correct npm package name)
- Fixed ob sync path syntax (--path flag, not positional arg)
- Container writes auth token + vault config to ~/.config/obsidian-headless/
- Secrets: OBSIDIAN_AUTH_TOKEN, OBSIDIAN_ENCRYPTION_KEY, OBSIDIAN_ENCRYPTION_SALT
- Container health endpoint shows vaultFiles, carryFiles, token status
- Sync endpoint returns vault/carry log output for debugging
Result: 654 vault files + 42 carry files synced in container.
Analysis now finds 279 touchpoints (vault + carry) against island vertices.
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
The strata analysis now cross-references island vertices against:
1. Carry data from filesystem (synced via git clone from GitHub)
2. Structured carry records from D1 (entities, citations, reasonings)
When semantic matches are found, new network.cosmik.connection records
are created on PDS linking island vertices to carry records.
Key changes:
- Container syncs carry vault from GitHub (CARRY_GITHUB_TOKEN secret)
- Analysis reads vault/carry markdown from filesystem
- findCarryTouchpoints matches carry records to island vertices
- findFilesystemTouchpoints matches vault/carry notes to vertices
- Worker creates connection records on PDS via createRecord
- Frontend sends vertex metadata (titles) with analyze request
- Added containerHealth and syncContainer endpoints
Test: 20 carry touchpoints found for AI island, matching citations
(Knowledge Synthesis, PROV-K), entities (Jacky Alciné, Dawn Foster),
and connections (Khayame-Vickers, Matt Akamatsu-Discourse Graphs).
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Analysis now cross-references island vertices against carry data
(entities, citations, reasonings) from D1. When semantic matches are
found, new network.cosmik.connection records are created on PDS linking
the island vertex to the carry record.
Flow:
1. Worker reads carry records from D1 (records_entity, records_citation,
records_reasoning)
2. Passes carryData to container alongside island
3. Container matches carry records against island vertices by keyword
overlap (URL match, title overlap, takeaway overlap)
4. Returns newConnections array
5. Worker creates connection records on PDS via createRecord
6. New connection URIs added to highlights
No carry touchpoints found yet — carry data needs to be published to
AT Protocol first (entities, citations, reasonings) for contrail to
ingest into D1.
Removed carryRefs from frontend (replaced by real connection records).
Removed filesystem-based vault/carry reading from analysis.ts.
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
The old analysis.connections field contained fabricated connections
including Japanese text from a Bluesky post. Removed connections from
the PDS record and added cleanup to updateRecord to delete stale
fields. Restored unicode edge icons (the Japanese was in the data,
not the icons). Fixed pdsls.dev link (no encodeURIComponent).
👾 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>