Skip to content

Overture docs update - #215

Open
MitchellShiell wants to merge 10 commits into
mainfrom
overtureDocsUpdate
Open

Overture docs update#215
MitchellShiell wants to merge 10 commits into
mainfrom
overtureDocsUpdate

Conversation

@MitchellShiell

@MitchellShiell MitchellShiell commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Documentation for the Overture docs site. The placeholder docs/02-lyric.md is replaced by two real pages, and the README's developer-docs links are repointed at the current site.

No Source code changes

Changes

  • docs/01-overview.md (new). Feature overview
  • docs/02-Setup.md (new). Task-oriented development-environment setup: prerequisites (pnpm, Node 20+, Docker), dependent services, configuration, and verification.
  • docs/02-lyric.md (deleted). Superseded by the two pages above.
  • README.md. The two Developer Documentation links moved off docs.overture.bio/docs/under-development/lyric/ onto docs.overture.bio/build/core-software/Lyric/overview.

Restructure the Lyric docs into the standard Overture core-software
layout (Overview + Setup), mirroring the other components. Replaces the
single 02-lyric.md overview, fills in the repository-structure detail,
and points the README's developer-docs link at Lyric's new
core-software home on docs.overture.bio.
The two new pages replace docs/02-lyric.md, which main had since updated
for the Kafka document topic and category aliases (#208, #213). Port those
changes onto the replacement pages so nothing regresses, and document the
KAFKA_* and VALIDATOR_CONFIG variables main added to the README.
The docs site has since renamed /build/core-software/* to /build/*, then
/build/* to /develop/*, so the previous target only resolved through two
redirect hops.
The site renamed /docs/core-software/* to /build/* to /develop/*, moved
/docs/contribution to /develop/contributing, /guides/getting-started to
/deploy, and /guides/administration-guides to /use. Each old path only
resolved through a redirect hop. Verified every new target against a
local site build.
@MitchellShiell

Copy link
Copy Markdown
Contributor Author

Comment thread docs/01-overview.md Outdated
- **Comprehensive data management:** Offers complete CRUD operations (Create, Read, Update, Delete) through a RESTful API documented in Swagger.
- **Detailed change history:** Maintains a complete audit trail of all data modifications, tracking changes from committed submissions and updates ensuring data governance and accountability.
- **SQON query endpoint:** Provides an endpoint for SQON (Structured Query Object Notation) based queries allowing complex search operations through combinations of simple field operations (`in`, `<=`, `>=`) and logic (`and`, `or`, `not`). This allows complex queries to be expressed in a simple JSON format.
- **Multi-dictionary support:** Handles multiple Lectern dictionaries simultaneously, allowing organizations to manage different data categories with distinct schemas while maintaining data integrity and relationships. A category can optionally be given an alias, a human-readable identifier usable anywhere a numeric category ID is accepted.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alias is superfluous information for this feature summary. i would remove the second sentence.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed.

Comment thread docs/01-overview.md
- **SQON query endpoint:** Provides an endpoint for SQON (Structured Query Object Notation) based queries allowing complex search operations through combinations of simple field operations (`in`, `<=`, `>=`) and logic (`and`, `or`, `not`). This allows complex queries to be expressed in a simple JSON format.
- **Multi-dictionary support:** Handles multiple Lectern dictionaries simultaneously, allowing organizations to manage different data categories with distinct schemas while maintaining data integrity and relationships. A category can optionally be given an alias, a human-readable identifier usable anywhere a numeric category ID is accepted.

## System Architecture

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I expected this to be a breakdown of Lyric's architecture, but this is actually how lyric fits into the overture system.

This is fine, but I would reorder the points here

  1. Lyric functionality and required dependencies
  • lyric web api
  • lyric data storage (postgres)
  1. Overture system integrations
  • maestro reads from lyric for search indexing, uses lyric api
  • song reads from lyric for external data validation, lyric provides configurable endpoints to facilitate this integration
  1. Optional Integration - Kafka
  • publishes messages after data submission events to notifying other systems that new data is available

Also, you have a "why elasticsearch" section but lyric doesnt interact with elasticsearch at all. why kafka may be worthwhile (standardized message queue across overture, high throughput and performance)

@MitchellShiell MitchellShiell Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed elasticsearch, reordered the info and added lectern and postgres as required dependencies, dropped score

Comment thread docs/01-overview.md Outdated

## Repository Structure

The repository is a PNPM monorepo, organized with deployable applications under `apps/` and shared libraries under `packages/`:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pnpm monorepo link: https://pnpm.io/workspaces

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated accordingly

Comment thread docs/02-Setup.md
Comment on lines +19 to +22
```bash
# From the repository root
docker-compose up -d
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

docker compose for modern docker installations (docker-compose no longer distributed as a separate command, instead just a command inside the docker cli)

The primary difference is that docker-compose (with a hyphen) is the deprecated legacy version written in Python, while docker compose (with a space) is the modern, actively supported version integrated directly into the Docker CLI using Go.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, you have them reference the compose file before cloning the repo in step 2. This is out of order.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed!

Comment thread docs/02-Setup.md Outdated
Comment on lines +72 to +99
A minimal development configuration looks as follows:

```env
# Server
PORT=3030
LOG_LEVEL=info

# PostgreSQL (matches the docker-compose defaults)
DB_HOST=localhost
DB_PORT=5432
DB_NAME=lyric
DB_USER=postgres
DB_PASSWORD=secret

# Lectern schema service
LECTERN_URL=http://localhost:3000

# Local ID generation
ID_USELOCAL=true
ID_CUSTOM_ALPHABET=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ID_CUSTOM_SIZE=21

# Behaviour flags
AUDIT_ENABLED=true
CORS_ENABLED=false
ALLOWED_ORIGINS=
PLURALIZE_SCHEMAS_ENABLED=true
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be best to rely on the content of the .env.schema to have functioning defaults. maintaining them in two places will 100% lead to them drifting and these instructions failing. I would remove this example and rely on the example .env file and the main readme.

Env var official docs: https://github.com/overture-stack/lyric/blob/main/README.md#environment-variables

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done, that said .env.schema didn't have functioning defaults, updated it to have values matching the bundled compose file.

Comment thread docs/02-Setup.md Outdated
Comment on lines +108 to +146
**Server**

- `PORT`: Server port (default: 3030)
- `LOG_LEVEL`: Log verbosity (default: info)

**PostgreSQL**

- `DB_HOST`: Database hostname
- `DB_PORT`: Database port
- `DB_NAME`: Database name
- `DB_USER`: Database user
- `DB_PASSWORD`: Database password

**Schema Service**

- `LECTERN_URL`: URL of the Lectern service supplying dictionary schemas

**ID Generation**

- `ID_USELOCAL`: Generate record IDs locally (default: true)
- `ID_CUSTOM_ALPHABET`: Custom alphabet for local ID generation
- `ID_CUSTOM_SIZE`: Length of locally generated IDs (default: 21)

**Behaviour**

- `AUDIT_ENABLED`: Log all modifications to submitted data (default: true)
- `CORS_ENABLED`: Enable CORS (default: false)
- `ALLOWED_ORIGINS`: Comma-separated list of permitted CORS origins
- `PLURALIZE_SCHEMAS_ENABLED`: Automatically pluralize schema names for compound documents (default: true)

**Kafka (optional)**

- `KAFKA_BROKERS`: Comma-separated broker addresses (for example `localhost:9092`). When set, Lyric publishes each committed record to a Kafka topic for Maestro to index. Omit to run without Kafka publishing
- `KAFKA_TOPIC`: Topic that committed records are published to, created on startup if it does not exist. Required when `KAFKA_BROKERS` is set
- `KAFKA_CLIENT_ID`: Kafka client identifier, unique per environment to distinguish producers in broker logs (default: `lyric`)

**Record Validation (optional)**

- `VALIDATOR_CONFIG`: JSON array enabling the endpoint that checks whether a record exists with a given field value. Each entry needs `categoryId`, `entityName`, and `fieldName`, where `categoryId` accepts either a category's numeric ID or its alias — for example `[{"categoryId": "1", "entityName": "sample", "fieldName": "sample_id"}]`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of this should have a table to reference, its nicely formatted here, but again this will lead to drift.

Env var official docs: https://github.com/overture-stack/lyric/blob/main/README.md#environment-variables

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deleted the whole block. The README table is now the only place these are documented, linked from the setup step as the single source of truth.

Comment thread docs/02-Setup.md Outdated

### Submission Testing

1. Navigate to the Swagger UI.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably include the link: [Swagger UI](http://localhost:3030/api-docs)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

linked

Comment thread docs/02-Setup.md Outdated
### Submission Testing

1. Navigate to the Swagger UI.
2. Register a Lectern dictionary against a category using the dictionary-registration endpoints.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which endpoint is that? Can you link here to a sample dictionary to use?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated to use curl commands for each step, updated a section preceeding this to state that all commands shown can be achieved via the swagger ui.

Comment thread docs/02-Setup.md Outdated

1. Navigate to the Swagger UI.
2. Register a Lectern dictionary against a category using the dictionary-registration endpoints.
3. Submit a tabular data file and verify that it is validated against the registered schema.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, which endpoint and sample data.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as above

Comment thread docs/02-Setup.md Outdated

**Troubleshooting:**

- Ensure PostgreSQL and Lectern are running and reachable at the configured hosts and ports.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hows? consider adding more details like docker ps to ensure container status.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expanded with docker ps and troubleshooting tips

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants