npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

caelus-delineations-pd

v0.1.2

Published

Public-domain astrology delineations and correspondence data for the Caelus interpretation layer.

Downloads

1,515

Readme

caelus-delineations-pd

A public-domain astrology interpretation corpus for the Caelus interpretation layer, and the default validation set for any interpreter built on it.

Caelus is an interpretation-free fact engine: it stops at validated geometry and projects a chart into ranked, citable fact atoms. The engine ships the contract (interpret(), selectors), never the content. This package is content: public-domain delineations decomposed, working backward from that contract, into InterpretationSources you drop straight into interpret(ctx, sources).

Use

import { Engine, julianDay, interpretationContext, interpret } from "caelus";
import { loadNodeData } from "caelus/node";
import { sources } from "caelus-delineations-pd";

const engine = new Engine(loadNodeData(dataDir));
const chart = engine.chartAt(julianDay(1990, 6, 10, 14, 30, 0), 27.95, -82.46, "placidus");

const reading = interpret(interpretationContext(chart), sources);
// reading.entries: ranked, each citing the atom ids it rests on, tagged with
// its tradition and source work.

Also exported: corpusManifest (the source bibliography), correspondences (a Liber 777 table), passages / passageSets (the raw records), and selectorFromSpec / compileSource (the compiler) for building your own sources.

How it is built

The corpus is data, not hand-written code, so every claim stays traceable:

sources/text/*.txt          public-domain scans (manifest-driven fetch)
  -> scripts/extract/*.ts    parse enumerated delineations into PassageRecords
  -> data/passages/*.json    a passage + a serializable SelectorSpec + provenance
  -> src/compile.ts          SelectorSpec -> live Caelus Selector -> Rule
  -> src/sources.ts          one InterpretationSource per work  ->  `sources`

A PassageRecord names the fact it speaks to with a serializable SelectorSpec (placement / aspect / pattern / signature / angle), so the corpus ships as JSON and the binding to the engine is auditable. The atom-id and sign strings it targets must match the engine's exact output (e.g. "Aries", not "aries"); npm test enforces this.

Scripts:

  • npm run fetch — (re)acquire the source texts from the manifest.
  • npm run extract — parse texts into data/passages/*.json.
  • npm run build:correspondences — rebuild the Liber 777 table.
  • npm run build / npm test — compile, then validate the corpus.

Validation

npm test (test/validation.test.ts) is what makes this a validation set. With no ephemeris it proves every compiled rule binds to a legal atom, fires for its condition and only that condition, and cites only atoms that exist (no invented provenance); it then runs the corpus against a real engine projection end to end, and audits the manifest for rights and text integrity.

Coverage

The fact model is finite and enumerable, so the target is cell coverage. 334 passages across seven sources today:

| Cell | Selector | Status | |---|---|---| | Planet in sign | placement{ body, sign } | Sun 12, Moon 9, Mercury 8, Venus 7, Mars 9, Jupiter 9, Saturn 11, Uranus 10, Neptune 10 | | Planet in house | placement{ body, house } | Alan Leo Key 21 + How to Judge 63 | | Planet aspect planet | aspect{ between, aspect } | Heindel 118 (5 Ptolemaic aspects) | | Rising sign | angle{ asc, sign } | Heindel 12/12 | | Fixed-star conjunction | star{ body, star } | Robson 20 (curated) | | Dignities | placement{ dignity } | pending | | Hermetic lots | lot{ lot, sign, house } | selector ready; corpus pending |

Sun/Moon-in-sign and the houses/aspects/rising cells are public domain. The Mercury–Saturn (and outer-planet) sign cells come from Llewellyn George's A to Z — the only spelled-out natal planet-in-sign source, since every other comprehensive book of the era glyph-codes the sign entries and OCR mangles them. Its text is core 1910 (first-edition, public-domain) content sourced from the 1960 reprint scan, so those 73 records are tagged gratis-not-pd and isolated in their own source. Import publicDomainSources instead of sources for a reading that drops them and keeps strict public-domain provenance.

The lot selector compiles, but no public-domain source in the set delineates the Part of Fortune by house or sign (Sepharial: it "has no qualities of its own"), so there are no lot rules yet. The lot atom is still useful on its own: fed via Engine.lots(chart), it enriches the fact projection an LLM brief or the MCP chart_facts tool reads.

Fixed-star rules need star atoms, which the bare projection cannot compute (the catalog lives in the data pack). Supply them when projecting:

const stars = engine.starConjunctions(chart, { orb: 1 });
const reading = interpret(interpretationContext(chart, { stars }), sources);

The Robson star set is hand-curated from his documented attributions: his scan's star catalog is a garbled OCR table, so unlike every other source these records are transcribed, not auto-extracted (data/passages/robson-stars.json).

Coverage is partial by design: an extractor emits only the cells it can lift cleanly from the OCR, and the harness reports the rest. Known gaps and why:

  • Vedic (Brihat Jataka): the translation is verse/sloka-structured with no "planet in rashi" headings, so it needs a verse-level parser, not heading extraction. Text is vendored.
  • Fixed-star, lot, varga, yoga, dasha: these have no atom kind yet — binding them needs a Caelus-core extension to FactKind and a cleanly enumerable corpus (Robson's star catalog, the one PD candidate in the set, is a garbled OCR table). Both are required, so they remain follow-ons.

Corpus and licensing

sources/manifest.json is the bibliography; rights is one of pd-us, cc0, gratis-not-pd. Each text carries a status; needs-refetch flags a file the fetch pipeline captured corrupt (an HTML wrapper) or only partially, awaiting a clean re-acquisition. The data/correspondences.json table is derived from the open_777 transcription of Crowley's (public-domain) Liber 777 and attributed in derivedFrom.

Verify rights before relying on any entry: a "public-domain scan" is only PD for the specific edition/translation cited (e.g. Ptolemy here is Ashmand 1822, not the in-copyright Robbins 1940). One source — Llewellyn George's A to Z — is vendored as gratis-not-pd (the available scan is a 1960 reprint of unconfirmed status); it is not drawn on for any shipped rule. The full source texts are vendored to the repo but not published to npm; only the manifest, compiled passages, and correspondence data ship.

MIT (this package's code and data wiring; the source texts are public domain).