Clone this repository
For self-hosted knots, clone URLs may differ based on your setup.
Download tar.gz
- Add footnoteReference facet type to lexicon
- Add footnoteDefinition block type to lexicon
- Handle footnoteReference in mdastInlineToOxa and flattenInlines
- Handle footnoteDefinition in mdastToAtprotoBlocks
- Render footnotes back to markdown with [^label] syntax
- Update OxaInline and OxaRecordBlock types
Footnotes are now isomorphic through the lens: references ([^1])
and definitions are preserved on round-trip.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Footnote references ([^1]) and definitions are not preserved through
the lens. References are stripped from text, definitions become plain
paragraphs. Test documents the missing feature.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
POST /api/index-record upserts the record into records_document
and fts_document so search works right away instead of waiting
for the firehose to catch up. Called fire-and-forget from the
frontend after a successful putRecord.
Replaced the one-off rebuild-fts endpoint with this general
indexing endpoint.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Contrail derives the FTS table name from the collection short name
("document"), not the NSID. The rebuild endpoint was using the wrong
table name so it populated a table nobody queries.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
The OXA record title is { $type: "...", text: "..." }, not a plain
string. Contrail's getNestedValue with "title" returns the object,
which buildFtsContent skips (not typeof string). Changed searchable
to "title.text" so FTS gets the actual text.
Added POST /api/rebuild-fts to drop and repopulate the FTS table
from existing records. Needs to be called once after deploy.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Search input with debounce (300ms) queries contrail's FTS on
pub.oxa.document.listRecords?search=<query>. Uses the existing
searchable: ["title"] config. Falls back to full list when empty.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Public doc edits now go through the OAuth session's fetchHandler to
get the live record from the PDS, not the D1 index which may be stale.
Falls back to the unauthenticated proxy if no session.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>