Skip to content

Spec: what is a standard Astrolabe project? (layout, projects home, extraction tooling) #4

Description

@Xinze-Li-Moqian

Motivation

Any repo should be able to carry knowledge as an .astrolabe store and be opened by the engine. Today the shape is implicit — learned from the two existing stores (the docs store, the riemannian store) and the engine's internal docs. Now that sites assemble the engine and mount projects, we need a written contract: what exactly constitutes a standard Astrolabe project?

Current de-facto layout

<project>/
└─ .astrolabe/
   ├─ atoms/    one card per file, named by hash
   ├─ edges/    same
   └─ docs/     *.mdx pages — no knowledge, only hash references

Plus the layered variant (a project without its own atoms/ reads the shared hypergraph/ pool). Lean/tex/bib are record fields (source:), not directories — source code lives in the host repo, cards reference it.

Proposal to discuss

Standardize a projects home — inside or beside .astrolabe — that holds:

  1. the projects themselves (the stores), and
  2. their automated extraction tooling: the scripts that derive/refresh cards from the host sources (e.g. Lean → source: lean atoms). The old Python tools/ were retired with store mechanics converging on Node (storeOps); Lean ingestion is due to be rebuilt in Node — this spec should decide where such tools live and what contract they follow (write through storeOps, idempotent, runnable at build time?).

Questions to settle

  • Canonical store layout spec: atoms/edges/docs, record formats (nested vs flat), hashing rules, the five well-formedness invariants — written as a normative doc (the docs store's 01-the-store.mdx "On disk" section is the natural home).
  • Where a project lives in a host repo: top-level .astrolabe/ (OpenGALib style) vs projects/<name>/.astrolabe/ (engine style) — or both, with discovery rules.
  • Extraction tooling: location (.astrolabe/tools/? <project>/tools/?), interface, and whether the engine/assemble step runs it.
  • Validation story: linter/CI checks for the invariants.
  • How the engine addresses projects: filesystem path today, URL (open-by-URL) later — the spec should be transport-agnostic.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions