Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
run: mypy src/

- name: Test with coverage
run: pytest --cov=matledger --cov-report=term-missing --cov-fail-under=80 -q
run: pytest --cov=nilvar --cov-report=term-missing --cov-fail-under=80 -q

security:
runs-on: ubuntu-latest
Expand All @@ -60,5 +60,5 @@ jobs:
- uses: actions/checkout@v4

- name: Build Docker image
run: docker build -t matledger:ci .
run: docker build -t nilvar:ci .

12 changes: 6 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

All notable changes to matledger are documented here.
All notable changes to nilvar are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## [0.9.0] - 2026-07-01
Expand Down Expand Up @@ -33,11 +33,11 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
`/analytics/explore-exploit`, `/analytics/data-quality`
- CLI: all 11 analytics now included in `report` command (JSON, markdown, HTML)
- Field-relevance classification in README analytics table
- `matledger export` CLI command: portable JSON evidence bundle with all events,
- `nilvar export` CLI command: portable JSON evidence bundle with all events,
hash chain verification, event counts, schema version, and timestamps
- Enhanced `matledger audit`: now shows hash version, event range, time range,
- Enhanced `nilvar audit`: now shows hash version, event range, time range,
event breakdown by type, actors, and iteration range (text and JSON modes)
- Error hierarchy: `MatledgerError` base with `LifecycleError`, `CausalLinkError`,
- Error hierarchy: `NilvarError` base with `LifecycleError`, `CausalLinkError`,
`DuplicateEventError`, `ProjectionError`, `IngestError` subclasses
- `--verbose` / `-v` and `--quiet` / `-q` CLI flags wiring Python logging level
- `SchemaError` and `ConfigError` exception subclasses for structured error handling
Expand All @@ -46,14 +46,14 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- Structured logging across handler, store, projections, and API middleware
- Bandit (ruff S) security linting with justified `noqa` for false positives
- API request logging middleware with timing
- `MatledgerError` exception handler in API returning structured error codes
- `NilvarError` exception handler in API returning structured error codes
- Trajectory plots (proxy-gaming, diversity, budget, discovery rate)
- HTML report with embedded charts
- SDK plotting helpers
- `GET /health` endpoint returning event count and status
- `--version` / `-V` flag on CLI
- `--format json` for `report` command; `--output json` for `audit` command
- `pydantic-settings` typed configuration (`MATLEDGER_DB`, `MATLEDGER_LOG_LEVEL`, `MATLEDGER_CORS_ORIGINS`)
- `pydantic-settings` typed configuration (`NILVAR_DB`, `NILVAR_LOG_LEVEL`, `NILVAR_CORS_ORIGINS`)
- Multi-stage Dockerfile with non-root user
- Docker Compose with health check, named volume, and `.env` support
- `.env.example` configuration reference
Expand Down
16 changes: 8 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Contributing to matledger
# Contributing to nilvar

Thank you for considering a contribution. matledger is an event-sourced campaign ledger for AI-driven scientific discovery, and contributions that strengthen its core invariants are welcome.
Thank you for considering a contribution. nilvar is an event-sourced campaign ledger for AI-driven scientific discovery, and contributions that strengthen its core invariants are welcome.

## Quick start

```bash
git clone https://github.com/jaysonmulwa/matledger.git
cd matledger
git clone https://github.com/jaysonmulwa/nilvar.git
cd nilvar
make dev # install with all dependencies
make check # run the full quality gate
```
Expand All @@ -28,7 +28,7 @@ Every change must pass before merging:
| Lint | `ruff check src/ tests/` | Zero errors |
| Format | `ruff format --check src/ tests/` | Zero diffs |
| Type check | `mypy src/` | Strict mode, zero errors |
| Tests | `pytest --cov=matledger --cov-fail-under=80` | 80%+ coverage |
| Tests | `pytest --cov=nilvar --cov-fail-under=80` | 80%+ coverage |

Run all four at once with `make check`.

Expand All @@ -51,13 +51,13 @@ type(scope): description

## Architecture constraints

matledger uses event sourcing with CQRS. These invariants must not be violated:
nilvar uses event sourcing with CQRS. These invariants must not be violated:

- **CQRS import boundaries.** `events/` imports nothing else. `store/` and `commands/` import from `events/` only. `projections/` imports from `events/` only. `analytics/` imports from `events/` and `projections/`. See [CLAUDE.md](CLAUDE.md) for the full import map.
- **Append-only immutability.** Events are never updated or deleted after appending.
- **Hash chain integrity.** Every event is SHA-256 hash-chained to its predecessor. Changes must not break the chain.
- **Content-hash deduplication.** Duplicate events are rejected by content hash. The hash covers type, payload, iteration, and replicate.
- **Structured exceptions.** Use `MatledgerError` subclasses, not bare `ValueError` or `AssertionError`.
- **Structured exceptions.** Use `NilvarError` subclasses, not bare `ValueError` or `AssertionError`.

## Testing guidelines

Expand All @@ -72,7 +72,7 @@ Every new dependency must justify its weight. Do not add a dependency that dupli

## Compliance awareness

matledger claims alignment (not compliance) with ALCOA+, 21 CFR Part 11, FAIR, and GAMP 5. When proposing changes, flag anything that would weaken the compliance position: breaking append-only immutability, removing actor/timestamp fields, bypassing the hash chain, or exposing event data without access boundaries.
nilvar claims alignment (not compliance) with ALCOA+, 21 CFR Part 11, FAIR, and GAMP 5. When proposing changes, flag anything that would weaken the compliance position: breaking append-only immutability, removing actor/timestamp fields, bypassing the hash chain, or exposing event data without access boundaries.

## Security

Expand Down
Loading