Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
a09267a
chore - add strict MkDocs docs CI (#9)
dannymeijer Jul 8, 2026
141d61a
chore - add Prismplane docs site foundation (#9)
dannymeijer Jul 8, 2026
b32bd97
chore - add docs pages deploy (#9)
dannymeijer Jul 8, 2026
a0359d7
chore - refine Prismplane docs visual language (#9)
dannymeijer Jul 8, 2026
241b57d
chore - polish docs visual system (#9)
dannymeijer Jul 8, 2026
326777b
docs - refine InQL positioning copy (#9)
dannymeijer Jul 8, 2026
7ddf6ee
chore - align Prismplane hero with visual direction (#9)
dannymeijer Jul 8, 2026
5e7918a
chore - bust Prismplane docs theme cache (#9)
dannymeijer Jul 8, 2026
2378624
chore - replace Prismplane scene with hero image (#9)
dannymeijer Jul 8, 2026
300503b
chore - update Prismplane font stack (#9)
dannymeijer Jul 9, 2026
2eaf78c
chore - refine Prismplane structured glass theme (#9)
dannymeijer Jul 9, 2026
5080f77
chore - make Prismplane homepage launch-led (#9)
dannymeijer Jul 9, 2026
2842c80
chore - push Prismplane homepage art direction (#9)
dannymeijer Jul 9, 2026
52a85f1
chore - rebuild Prismplane homepage with real assets (#9)
dannymeijer Jul 9, 2026
d073536
chore - realign Prismplane homepage to reference (#9)
dannymeijer Jul 9, 2026
f15e5b1
chore - fix Prismplane homepage layout fit (#9)
dannymeijer Jul 9, 2026
152eff2
chore - address Prismplane browser feedback (#9)
dannymeijer Jul 9, 2026
c7202ac
chore - add Incan syntax highlighting to docs (#9)
dannymeijer Jul 9, 2026
c09bbaa
chore - refine Prismplane convergence section (#9)
dannymeijer Jul 9, 2026
821dd70
chore - use convergence image as section background (#9)
dannymeijer Jul 9, 2026
95a4c81
chore - refine Prismplane process section (#9)
dannymeijer Jul 9, 2026
16463eb
chore - tighten Prismplane process visual (#9)
dannymeijer Jul 9, 2026
b8f3389
chore - widen Prismplane homepage composition (#9)
dannymeijer Jul 10, 2026
26f2429
chore - align Prismplane semantic map (#9)
dannymeijer Jul 10, 2026
6a6cadb
chore - compact Prismplane semantic map (#9)
dannymeijer Jul 10, 2026
0111bab
chore - refine Prismplane map fit (#9)
dannymeijer Jul 10, 2026
f5fa9c1
chore - use simplified Prismplane convergence stage (#9)
dannymeijer Jul 10, 2026
4910bd3
chore - tune Prismplane stage scale (#9)
dannymeijer Jul 10, 2026
a12c153
chore - align Prismplane semantic stage (#9)
dannymeijer Jul 10, 2026
f120d58
chore - enlarge Prismplane InQL mark (#9)
dannymeijer Jul 10, 2026
6d29510
chore - strengthen semantic-stage identity (#9)
dannymeijer Jul 11, 2026
b9999a6
chore - rebuild Prism process stage (#9)
dannymeijer Jul 11, 2026
6a8394b
Merge remote-tracking branch 'origin/main' into HEAD
dannymeijer Jul 14, 2026
1845f02
chore - align PR #98 with IncQL rename
dannymeijer Jul 14, 2026
827f803
chore - refine IncQL landing page visuals and interactions (#9)
dannymeijer Jul 16, 2026
55ca04f
docs - rebuild IncQL architecture and navigation (#9)
dannymeijer Jul 18, 2026
9155938
docs - organize IncQL RFC lifecycle folders (#9)
dannymeijer Jul 18, 2026
c155e5f
docs - fix IncQL-DB Incan example syntax (#9)
dannymeijer Jul 18, 2026
a76e240
docs: formatted md table
dannymeijer Jul 18, 2026
639053e
docs - add searchable RFC context reader
dannymeijer Jul 18, 2026
f3b4bba
docs - harden RFC reader interaction boundary
dannymeijer Jul 18, 2026
a8359ad
docs - refine RFC reader density
dannymeijer Jul 18, 2026
c295ab5
docs - replace RFC topics with controlled tags
dannymeijer Jul 18, 2026
f6d4273
docs - fix RFC keyboard navigation
dannymeijer Jul 19, 2026
af2480b
docs - preserve mobile RFC focus
dannymeijer Jul 19, 2026
af5a3ad
docs - compact the RFC workspace and unify code styling
dannymeijer Jul 19, 2026
b3adf75
docs: streamline RFC discovery controls
dannymeijer Jul 19, 2026
a47c3b6
docs: reduce ordinary prose density
dannymeijer Jul 19, 2026
7d8e4b5
docs: add guided IncQL book
dannymeijer Jul 19, 2026
4fc3e8e
docs: structure the IncQL book into parts
dannymeijer Jul 19, 2026
6c64e8b
docs: clarify the inspection source boundary
dannymeijer Jul 19, 2026
42eadc6
docs: strengthen the IncQL Book visual hierarchy
dannymeijer Jul 19, 2026
67c2a3d
docs: align the Book reading surface
dannymeijer Jul 19, 2026
f1fbd0d
docs: rebuild the Book as annotated rails
dannymeijer Jul 19, 2026
36ff84f
docs: add query-block learning path
dannymeijer Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ What does this PR change, and why?
- [ ] Refactor / maintenance
- [ ] Documentation
- [ ] CI / tooling
- [ ] RFC (adds/updates `docs/rfcs/*`)
- [ ] RFC (adds/updates `docs/rfcs/**`)

## Area(s)

Expand Down
94 changes: 94 additions & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Docs

on:
push:
branches: [main]
paths:
- "docs/**"
- "examples/tutorial_book/**"
- "tests/docs/**"
- "utils/**"
- "Makefile"
- "mkdocs_hooks.py"
- "mkdocs.yml"
- "requirements-docs.txt"
- ".github/workflows/docs.yml"
pull_request:
branches: [main]
paths:
- "docs/**"
- "examples/tutorial_book/**"
- "tests/docs/**"
- "utils/**"
- "Makefile"
- "mkdocs_hooks.py"
- "mkdocs.yml"
- "requirements-docs.txt"
- ".github/workflows/docs.yml"
workflow_dispatch:

concurrency:
group: docs-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
mkdocs:
name: MkDocs strict build
runs-on: ubuntu-latest

steps:
- name: Check out IncQL
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: requirements-docs.txt

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: "22"

- name: Install docs dependencies
run: python -m pip install -r requirements-docs.txt

- name: Build docs
run: make docs-build

deploy-pages:
name: Deploy docs to GitHub Pages
needs: mkdocs
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Check out IncQL
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: requirements-docs.txt

- name: Install docs dependencies
run: python -m pip install -r requirements-docs.txt

- name: Configure deploy identity
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Publish docs
run: mkdocs gh-deploy --force --strict --remote-branch gh-pages --message "chore - deploy docs site"
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Normative behavior is defined in **`docs/rfcs/`**. If package code and an RFC di
## General workflow

1. **Branch from `main`**: Prefer `<type>/<issue>-<slug>` (e.g. `feature/8-rfc-table-automation`, `docs/9-mkdocs-ci`), matching team practice.
2. **Follow RFCs**: Behavior changes should be reflected in the right `docs/rfcs/*.md` (or a new RFC) before or alongside code in the appropriate repository.
2. **Follow RFCs**: Behavior changes should be reflected in the right RFC under `docs/rfcs/` (or a new RFC) before or alongside code in the appropriate repository.
3. **Run the local gate**: `make ci` (or at least `make fmt-check`, `make build`, `make test`) before considering work done for **this** repo.
4. **Version sync**: If you bump the package version, update **both** [incan.toml][incan-toml] (`[project] version`) and [src/metadata.incn][metadata-incn] (`incql_version()`) in the same commit (see [CONTRIBUTING.md][contributing]).
5. **Documentation**: User-facing or spec changes should update `README.md`, relevant `docs/*`, or RFCs as appropriate. Keep prose markdown **without hard wrapping** (natural paragraphs).
Expand Down
20 changes: 20 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Thank you for your interest in IncQL — the typed relational layer for [Incan][
| [Incan `CONTRIBUTING.md`][incan-contributing] | Compiler, tooling, and Rust workspace workflow |
| [Incan docs-site contributor loop][incan-docsite-loop] | Divio layout, snippets, checklist for Incan’s MkDocs site — mirror these patterns when shaping IncQL `docs/` |
| [Incan AGENTS — Docs-site workflow][incan-agents-docs-workflow] | Prose **without hard wrapping**, `mkdocs build --strict`, Material-friendly Markdown |
| [Prismplane docs theme][prismplane-theme] | IncQL-specific docs visual rules adapted from the local Prismplane prototype |

**Compiler and language implementation** (lexer, parser, typechecker, lowering, codegen for `query {}` and related surfaces) lives in the **Incan** repository. Use that project’s docs and gates when you change the toolchain. Use **this** repo for the IncQL **library source** (`.incn`) and **IncQL RFCs** that specify the relational surface.

Expand Down Expand Up @@ -48,6 +49,21 @@ Thank you for your interest in IncQL — the typed relational layer for [Incan][

With `incan` on your `PATH` you can call `incan build --lib` and `incan test tests` directly (use the `tests/` path so a sibling Incan checkout under `./incan/` is not collected). Override the binary with `make build INCAN=/path/to/incan` if needed.

4. **Build the documentation site**

Install the pinned docs dependencies and run a strict build before opening documentation-heavy PRs:

```bash
python -m pip install -r requirements-docs.txt
mkdocs build --strict
```

Use `mkdocs serve` for local preview while editing. The GitHub Actions docs workflow runs the same strict build for changes under `docs/`, `mkdocs.yml`, `requirements-docs.txt`, or the workflow itself.

5. **Preview or publish the documentation site**

The public documentation site is published at [encero-systems.github.io/IncQL/][docs-site]. The docs workflow publishes to the `gh-pages` branch after a successful strict build on `main` or manual dispatch. Repository Pages settings should use **Deploy from a branch**, branch `gh-pages`, folder `/ (root)`.

## Project structure

See [docs/architecture.md][architecture] for a concise map. In short:
Expand All @@ -56,6 +72,8 @@ See [docs/architecture.md][architecture] for a concise map. In short:
- `src/*.incn` — library modules; `lib.incn` re-exports the public surface
- `tests/` — Incan tests for the package
- `docs/rfcs/` — design specifications (numbered separately from Incan’s RFC index)
- `mkdocs.yml` — documentation site navigation and strict-build configuration
- `requirements-docs.txt` — pinned Python dependencies for local and CI docs builds

## Changing behavior

Expand Down Expand Up @@ -163,3 +181,5 @@ Open an issue on this repository for IncQL-specific design or package questions;
[issue-templates]: .github/ISSUE_TEMPLATE/
[incan-docsite-loop]: https://github.com/encero-systems/incan/blob/main/workspaces/docs-site/docs/contributing/tutorials/book/08_docsite_contributor_loop.md
[incan-agents-docs-workflow]: https://github.com/encero-systems/incan/blob/main/AGENTS.md#docs-site-workflow-mkdocs-material
[prismplane-theme]: docs/contributing/prismplane_docs_theme.md
[docs-site]: https://encero-systems.github.io/IncQL/
55 changes: 54 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,23 @@
INCAN ?= incan
export INCAN_NO_BANNER ?= 1

TUTORIAL_BOOK_DIR := examples/tutorial_book
TUTORIAL_BOOK_CHAPTERS := \
src/chapter_01.incn \
src/chapter_02.incn \
src/chapter_03.incn \
src/chapter_04.incn \
src/chapter_05.incn \
src/chapter_06.incn \
src/chapter_07.incn \
src/chapter_08.incn \
src/chapter_09.incn

TUTORIAL_BOOK_RUNNABLES := \
src/main.incn \
src/chapter_08.incn \
src/chapter_09.incn

.DEFAULT_GOAL := help

.PHONY: help
Expand Down Expand Up @@ -66,6 +83,42 @@ test-locked: ## Run tests with `--locked`
@echo "\033[1mRunning IncQL tests (locked)...\033[0m"
@$(INCAN) test $(INCQL_TEST_DIR) --locked

# =============================================================================
# Documentation
# =============================================================================

.PHONY: rfc-index
rfc-index: ## Validate RFC metadata and regenerate the RFC catalog
@python3 utils/rfc_catalog.py --tags docs/rfcs/catalog.json --write

.PHONY: rfc-index-check
rfc-index-check: ## Validate RFC metadata and fail when the catalog is stale
@python3 utils/rfc_catalog.py --tags docs/rfcs/catalog.json --check

.PHONY: docs-test
docs-test: ## Run documentation tooling unit tests
@python3 -m unittest discover -s tests/docs -p 'test_*.py'
@node --test tests/docs/test_rfc_reader.cjs

.PHONY: docs-build
docs-build: rfc-index-check docs-test ## Validate and build the documentation site strictly
@mkdocs build --strict

.PHONY: tutorial-book
tutorial-book: ## Type-check every tutorial chapter and run each complete learning path
@echo "\033[1mChecking IncQL tutorial-book chapters...\033[0m"
@cd $(TUTORIAL_BOOK_DIR) && $(INCAN) lock >/dev/null
@for script in $(TUTORIAL_BOOK_CHAPTERS); do \
echo "\033[1m -> $$script\033[0m"; \
cd $(TUTORIAL_BOOK_DIR) && $(INCAN) --check "$$script" || exit $$?; \
cd ../..; \
done
@for script in $(TUTORIAL_BOOK_RUNNABLES); do \
echo "\033[1m -> run $$script\033[0m"; \
cd $(TUTORIAL_BOOK_DIR) && $(INCAN) run "$$script" --locked || exit $$?; \
cd ../..; \
done

# =============================================================================
# Formatting (Incan source)
# =============================================================================
Expand All @@ -76,7 +129,7 @@ test-locked: ## Run tests with `--locked`
# packages are listed by source directory so generated `target/` output stays
# outside the formatting walk.

INCQL_FMT_DIRS := src tests examples/advanced_retail_query_blocks/src
INCQL_FMT_DIRS := src tests examples/advanced_retail_query_blocks/src examples/tutorial_book/src
INCQL_FMT_FILES := examples/*.incn

.PHONY: fmt
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# IncQL

**IncQL** is the **typed data logic plane** for [Incan](https://github.com/encero-systems/incan): the place where you express **relational queries**, **schema-aware table transformations**, and **streaming-shaped relational work** with compile-time checks, without folding orchestration, catalogs, or engine-specific runtime into the authoring model. Row shapes come from Incan `model` types; column, join, and alias rules are part of one semantic core whether you use `query { }` blocks, method chains on `DataSet[T]` carriers, or (later) optional pipe-forward (`|>`).
**IncQL** is the **typed data logic plane** for governed relational work, implemented as an [Incan](https://github.com/encero-systems/incan) library package. It is where you express **relational queries**, **schema-aware table transformations**, and **streaming-shaped relational work** with compile-time checks, without folding orchestration, catalogs, or engine-specific runtime into the authoring model. Row shapes come from Incan `model` types; column, join, and alias rules are part of one semantic core whether you use `query { }` blocks, method chains on `DataSet[T]` carriers, or (later) optional pipe-forward (`|>`).

**What IncQL is not:** It is not a pipeline or workflow framework, not a semantic catalog, and not a catch-all that swallows execution concerns. It owns **data logic**: query authoring, relational plan shape, resolution and schema flow, typed carrier semantics, and **backend-neutral logical intent**. Execution, binding, and operational semantics live in the layer below (session, adapters, runners).

**Why it matters:** Raw SQL strings and untyped rows defer mistakes to runtime. IncQL keeps relational work **in the language**: schemas are ordinary models, invalid references and many aggregation mistakes are caught where Incan promises checking, and plans are intended to lower to **Apache Substrait** so logical intent stays portable while credentials and physical reads are resolved outside the normative plan story.
**Why it matters:** Raw SQL strings and untyped rows defer mistakes to runtime. IncQL keeps relational work **in source**: schemas are ordinary models, invalid references and many aggregation mistakes are caught by the typechecked authoring surface, and plans are intended to lower to **Apache Substrait** so logical intent stays portable while credentials and physical reads are resolved outside the normative plan story.

**Bottom line:** IncQL is where you write **checked relational logic** in Incan: the same naming and schema rules apply to `query { }` blocks and `DataSet[T]` APIs, and **execution stays downstream** (sessions, adapters, runners) and consistent.
**Bottom line:** IncQL provides **checked relational logic** for data systems: the same naming and schema rules apply to `query { }` blocks and `DataSet[T]` APIs, and **execution stays downstream** (sessions, adapters, runners) and consistent.

## What you get

Expand All @@ -19,6 +19,8 @@

Design is **RFC-driven**; **[docs/rfcs/](docs/rfcs/README.md)** is the source of truth.

Documentation site: **https://encero-systems.github.io/IncQL/**

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for workflow and [architecture.md](docs/architecture.md) for how this repo relates to the Incan compiler.
Expand Down Expand Up @@ -46,7 +48,8 @@ Normative proposals live under **[docs/rfcs/](docs/rfcs/README.md)**. IncQL’s
- `src/lib.incn` — public exports
- `src/` — library modules
- `tests/` — tests
- `.github/workflows/` — CI (builds the pinned Incan release branch, then runs IncQL checks)
- `mkdocs.yml` — documentation site configuration for the `docs/` tree
- `.github/workflows/` — CI for package checks, strict docs builds, and GitHub Pages deployment

Build and test from this repo root (with `incan` on your `PATH`):

Expand All @@ -61,4 +64,4 @@ incan build --lib
incan test tests
```

See `make help` for other targets (`fmt`, `fmt-check`, `registry-metadata`, `build-locked`, …). Continuous integration builds **Incan from source** from the workflow's pinned `INCAN_REF` release branch or tag, then runs `fmt-check`, `test-style`, function registry metadata validation, `build`, `test`, and the pub-consumer smoke check (see [.github/workflows/ci.yml](.github/workflows/ci.yml)).
See `make help` for other targets (`fmt`, `fmt-check`, `registry-metadata`, `build-locked`, …). Continuous integration builds **Incan from source** from the workflow's pinned `INCAN_REF` release branch or tag, then runs `fmt-check`, `test-style`, function registry metadata validation, `build`, `test`, and the pub-consumer smoke check (see [.github/workflows/ci.yml](.github/workflows/ci.yml)). The docs workflow runs `mkdocs build --strict` for documentation changes and publishes the site to GitHub Pages from `main` or manual dispatch; see [CONTRIBUTING.md](CONTRIBUTING.md) for the local docs build loop.
Loading
Loading