Skip to content

Article and revision schema in Convex #37

Description

@vdvman1

Question

What is the Convex schema for articles and their revisions?

Settled going in (see the map's standing decisions): articles are stored fully processed — sanitized, list-nesting fixed, headings id'd, syntax-highlighted, plus the section tree and extracted plain text. Every revision is kept indefinitely. Storage is the architecture; revision browsing is not.

Decide:

  • Table shape. One articles table with a pointer to the current revision plus a revisions table? Or revisions only, with latest derived? What is keyed by version id vs revision id?
  • What a revision holds — processed HTML, section tree, plain text, content hash, fetched-at, the raw body as fetched (do we keep it, for reprocessing without re-fetching Mojang?).
  • What lives on the article rather than the revision — the manifest entry fields (title, type, image, date, shortText, contentPath). Note that shortText currently gets a regex spacing fix applied at parse time (src/server/java/versions.ts); decide whether that stays a parse-time transform.
  • processorVersion. Where it is stored, how a re-process pass finds stale revisions, whether re-processing creates a new revision or mutates in place. This matters: a content change and a processor change are different events and annotations must be able to tell them apart.
  • Content hashing. What exactly is hashed — the raw fetched body, so a processor change does not look like a content change.
  • Indexes, including the full-text search index. Constrained by the Convex FTS research.
  • Manifest/version list storage — the sidebar needs the ordered version list; is that a query over articles or a separately maintained document?

Do not preclude the out-of-scope futures the map names: semantic search embeddings, Bedrock changelogs, mcmeta deep links (#6), and the mcdoc viewer (#5). Say explicitly what each would need and confirm the schema leaves room.

Use /domain-modeling — the vocabulary settled here (article, revision, section, anchor) is what every later ticket speaks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    wayfinder:grillingWayfinder ticket: HITL conversation (default type)

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions