Skip to content

Get started

How the repositories fit together

3 min readUpdated

Page actions

ChatGPT and Claude are third-party services. The link gives them this page's public address and a short instruction. This site records nothing.

The three repositories — data, platform, app — what lives in each, the pinned artifacts that join them, and where a given kind of change is made.

Since release 1.3.8 the project is three repositories joined by pins: small, reviewed files that name an exact commit and the checksum of the artifact taken from it (ADR-0007, ADR-0008). Nothing is copied by hand between them, so nothing can drift.

Three repositories and their pins sggs-data builds and publishes the scripture database; sggs-platform pins it by commit and sha256, serves the API and website, and publishes the golden contract; gurbani-soul-ios pins the contract at a platform release and builds its own database from the same dataset pin; this wiki pins the sibling repositories’ docs. One version number spans web, API and app. 02 · Three repositories and their pins Nothing is copied by hand between data, platform and app — every hand-off is areviewed lock file with a commit and a checksum sggs-data — the scripturesggs-platform — API and webgurbani-soul-ios Source Bir PDF — sha256 attestedSource Bir PDFsha256 attestedRebuild + gates — char-exact, ledgeredRebuild + gateschar-exact, ledgereddb/sggs.sqlite — commit + sha256db/sggs.sqlitecommit + sha256pinsdataset.lock.json — commit + sha256dataset.lock.jsoncommit + sha256make dataset — verified, atomicmake datasetverified, atomicgeneratesAPI + website — one APP_VERSIONAPI + websiteone APP_VERSIONcontract/ — golden vectors — + the OpenAPI speccontract/golden vectors+ the OpenAPI specpinssame pinvendor.lock.json — contract, by tagvendor.lock.jsoncontract, by tagBundled DB pair — built from the pinBundled DB pairbuilt from the pindataset.lock.json — the same pindataset.lock.jsonthe same pinByte-parity tests — Swift = PythonByte-parity testsSwift = PythonThe app — version = platformThe appversion = platformsources.lock.json — sibling docs (wiki)sources.lock.jsonsibling docs (wiki)One version number — the website = the API = the App Store binaryOne version numberthe website = the API = the App Store binary data at restcomponent in this projectpin: a reviewed lock fileproven, verified stategate: fails the build or the deployflow: data or control moves this wayreference: pins, reads or derives from Source of truth: dataset.lock.json · scripts/data/fetch_dataset.py ·docs-site/sources.lock.json · tools/gen_golden_vectors.py v1.3.10 · verified 2026-09-27 · d85c2adSri Guru Granth Sahib Ji — Knowledge Base · engineering wiki
Poster 02 — three repositories and their pins: sggs-data builds and publishes the database, sggs-platform pins and serves it, gurbani-soul-ios pins the contract and the dataset, one version number · open full size

What lives where

RepositoryOwnsYou go there to…
sggs-datathe source PDF’s corpus, the SQLite/FTS5 database, the rebuild pipeline, the scripture gates (character-exact reconcile, golden checks, the editorial ledger), the answer protocol, the validation reportschange anything about the text or how it is extracted, indexed or proven — always with a scholar’s review
sggs-platform (this one)the stdlib API (webapp/), the website (frontend/), the golden contract (contract/), tooling (tools/, scripts/), CI, and this wiki (docs/, docs-site/)change search, verification, the API, the website, delivery, documentation
gurbani-soul-iosthe iOS app, its widgets, its bundled database pair, TestFlight and App Store tooling, the Nitnem registrychange the app

A fourth, private repository (sggs-source) holds the backup of the source PDF and the private translation inputs; you will not need it.

The pins, in one table

PinLives inNamesBump it when
dataset.lock.jsonplatform, appan sggs-data commit + the database’s sha256 and sizea new dataset was built and reviewed in sggs-data
vendor.lock.jsonappa platform release tag + the sha256 of each vendored contract filethe platform released vX.Y.Z
docs-site/sources.lock.jsonplatform (this wiki)a sibling commit + the sha256 of each published docthe sibling’s docs changed and should appear here

A pin bump is an ordinary pull request: small, reviewed, gated. make dataset installs the pinned database; make dataset-check proves sggs-data publishes exactly that object at that commit.

One version number

The web footer, /api/meta, /api/health, the iOS About screen and the App Store all report the same X.Y.Z (ADR-0004). Every platform release is re-archived as iOS X.Y.Z (1) from the release tag, even a web-only change. The dataset has its own version (db_version), released on its own cadence through the pin.

Where does my change go?

  • Search returns the wrong line for a spelling → platform (webapp/sggs/search.py, the fold in webapp/romannorm.py) — and if the fold changes, it must change byte-identically in sggs-data and the app (the golden vectors prove it).
  • A verse looks wrong on screen → do not edit anything; open a scripture fidelity issue.
  • A page on the website → platform (frontend/).
  • A screen in the app → gurbani-soul-ios.
  • This wiki → platform (docs/; the site itself in docs-site/).
  • A decision about how we work → an ADR in docs/adr/, proposed in a pull request.