Metadata-Version: 2.4
Name: deckicorn
Version: 0.2.0
Summary: Spec-driven presentation runtime
Project-URL: Documentation, https://deckicorn.org
Project-URL: Repository, https://gitlab.com/libesys/deckicorn/deckicorn-cli
Project-URL: Changelog, https://deckicorn.org/blog
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: pydantic>=2.0
Requires-Dist: PyYAML>=6.0
Provides-Extra: dev
Requires-Dist: pre-commit>=4.0; extra == "dev"
Requires-Dist: pytest>=8.0; extra == "dev"
Requires-Dist: ruff>=0.8; extra == "dev"
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Provides-Extra: docs
Requires-Dist: sphinx>=7.4; extra == "docs"
Requires-Dist: sphinx-rtd-theme>=2.0; extra == "docs"
Provides-Extra: runtime
Requires-Dist: arcade<4,>=3.0; extra == "runtime"
Provides-Extra: packaging
Requires-Dist: pyinstaller>=6.0; extra == "packaging"

# Deckicorn

Spec-driven presentation runtime: compile Markdown decks + layout YAML into a canonical presentation spec, then render with a 2D (Arcade) runtime.

## Documentation

- **Public site:** [deckicorn.org](https://deckicorn.org) (Docusaurus + Sphinx API reference)
- ADR overview: [`docs/README-deckicorn-adr.md`](docs/README-deckicorn-adr.md)
- Presentation spec: [`docs/SPEC-presentation-spec.md`](docs/SPEC-presentation-spec.md)
- Deckicorn MD dialect: [`docs/SPEC-deckicorn-md-dialect.md`](docs/SPEC-deckicorn-md-dialect.md)
- Deck project manifest: [`docs/SPEC-deckicorn-project-manifest.md`](docs/SPEC-deckicorn-project-manifest.md)
- Implementation plan: [`plan/deckicorn-implementation-plan.md`](plan/deckicorn-implementation-plan.md)
- AI workflow rules: [`tools/ai-rules/`](tools/ai-rules/)

## Git workflow

Day-to-day work happens on **`develop`**; **`master`** is ff-merged when Development CI is green (A2C `development-workflow.md`).

```bash
git checkout develop
```

## Quick start

```bash
pip install -e ".[dev]"
pre-commit install
pre-commit install --hook-type commit-msg
```

From a deck project directory (see `examples/deckicorn-hello/deckicorn.yaml`):

```bash
cd examples/deckicorn-hello
deckicorn build
deckicorn preview          # requires pip install -e ".[runtime]"
deckicorn preview --show-bounds
deckicorn package --clean  # requires pip install -e ".[runtime,packaging]"
```

Ad hoc paths (without `deckicorn.yaml`):

```bash
deckicorn build examples/deckicorn-hello/deck.md \
  --layout examples/deckicorn-hello/layout-default.yaml \
  --out examples/deckicorn-hello/build/deck-spec.yaml
deckicorn run examples/deckicorn-hello/build/deck-spec.yaml
```

## Changelog and pre-commit

This repository follows A2C changelog policy (`tools/ai-rules/rules/11-changelog-policy.md`):

- Maintain `CHANGELOG.md` in [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format.
- Curate `## [Unreleased]` as release-relevant work lands.
- Stage `CHANGELOG.md` with any commit that changes other files (`check-changelog` hook).

Version source: root `VERSION` (kept in sync with `pyproject.toml` and `deckicorn_spec.__version__` at release time).

Release workflow: [docs/release-pipeline.md](docs/release-pipeline.md).

## Project layout

| Path | Purpose |
|------|---------|
| `docs/` | ADRs and specs (canonical) |
| `inputs/` | Read-only intake copies of source docs |
| `deckicorn-spec` (`src/deckicorn_spec`) | Presentation spec models and validation |
| `deckicorn-md` (`src/deckicorn_md`) | Deckicorn MD parser and compiler |
| `deckicorn-runtime` (`src/deckicorn_runtime`) | Presentation runtime |
| `examples/` | Documented deck projects (`deckicorn-hello/`, …) |
| `tests/fixtures/decks/` | Broken manifest fixtures for CI and unit tests |
