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
29 changes: 29 additions & 0 deletions .github/workflows/vocarium-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# SPDX-License-Identifier: MPL-2.0
# The M1 honest gate in CI (ADR-0002). Self-contained steps, SHA-pinned
# actions only (repo has sha_pinning_required). The gate script hard-fails
# on toolchain absence or version skew — never soften that.
name: Vocarium CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
gate:
name: invoke-slice gate
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Setup Zig (exact pin from .tool-versions)
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
with:
version: 0.16.0
- name: Run the invoke-slice gate
Comment thread
hyperpolymath marked this conversation as resolved.
run: ./tests/e2e/invoke_slice.sh
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -134,3 +134,7 @@ dist/

# Coaptation re-anchor basis (occasional, generated on --reanchor when red; not a baseline)
.machine_readable/coaptation/receipts/reanchor-basis.a2ml

# gate toolchain (built from pinned SHA by tests/e2e/invoke_slice.sh)
.gate-tools/
zig-out/
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@
# gleam 1.8.0
# elixir 1.18.0
# erlang 27.2
# zig 0.14.0
# idris2 0.7.0
rust nightly
zig 0.16.0
39 changes: 34 additions & 5 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,43 @@ Deny: **Nix, Node/npm, TypeScript, Python, Go, AGPL**. (Guix, not Nix.)

---

# This repo: `rsr-template-repo` · clade `rm-rsr-template-repo`
# This repo: `vocarium`

- **Identity** — uuid `a5ea1382-a34c-5334-8a46-a2ebe904c810`; clade `rm` (secondary `gv`); born 2026-03-16; forge `hyperpolymath/rsr-template-repo`.
- **IS** — Canonical RSR-compliant repository template: scaffolding (CI/CD, AI manifests, ABI/FFI standards, container ecosystem, governance) that new hyperpolymath projects are instantiated from.
- **IS-NOT** — a project in its own right · Scaffoldia (the full-featured repo designer) · standards (the canon source this template operationalises)
- **Where it sits** — pipeline position **foundation**; chain `standards → rsr-template-repo → (every estate repo)`; coordination = `standards`.
- **Identity** — forge `hyperpolymath/vocarium`; born 2026-06-26. (The uuid/clade
fields below the fold in `.machine_readable/` still carry the mint-template's
identity and need a mint-time cure + `just claude-md` regeneration.)
- **IS** — the trope database: a store for vokeable particulars (quality, bearer,
context, record) with transformation paths, grades, warrants, use-models, and
verdicts. The storage third of `Haec → Vocarium → Hermeneia`.
- **IS-NOT** — the trope language (haec) · the checker/algebra (trope-checker —
vocarium never absorbs the grading order) · the query language (hermeneia) ·
a template.
- **Where it sits** — chain `haec → vocarium → hermeneia`, verified by
`trope-checker`; coordination = `standards`.
- **Constraints here** (AGENTIC) — fail-closed; evidence-per-step; no-silent-skip; rerun-after-fix; release-claim-requires-hard-pass. Never: banned langs (above), secrets, state files in repo root, AGPL. Details: `.machine_readable/bot_directives/{methodology,coverage,debt}.a2ml`.
- **Golden path** (ANCHOR) — `just test && just quality` → Core tests pass; Quality gates pass; No unresolved critical security findings.
- **State** — phase maintenance; maturity production; 95% complete; status active.

<!-- ARRIVAL-PACK:END · provenance: CLADE@b974798d108a ECOSYSTEM@1c30abd8f618 AGENTIC@d72859864bbe STATE@9fbef88c72f8 ANCHOR@8b66b03d7736 · Manifesto@DRAFT-unratified · regenerate: `just claude-md` (k9 drift-detects; do not hand-edit above) -->

<!-- Hand-authored below the generated region. -->

# Vocarium architecture (M1, ADR-0002)

**Pure Zig, wire boundary, no C.** The store engine is `src/store/` → the `voc`
executable. Its only contract is Trope IR v0.2 JSON over process I/O; the
schema at `trope-checker/schemas/trope-ir.schema.json` is the trust boundary
and `tropecheck` is the verifier. No C sources, no C-ABI structs, no bindings
— see `docs/decisions/0002-pure-zig-wire-boundary.adoc` before adding any.

- Build/test: `zig build test` (Zig version is hard-pinned; see `.tool-versions`).
- Gate: `tests/e2e/invoke_slice.sh` — ingests the canonical fixtures, runs
`voc invoke` under two use-models, and asserts opposite tropecheck verdicts
(use-relativity) plus a rejected unwarranted edge. It hard-fails if the
toolchain is missing; never soften that.
- Store format: append-only JSONL (`{"t":"trope"|"edge"|"use_model"|"warrant"}`),
replayed into in-memory indexes on open. `"t":"revocation"` is reserved.
- Never implement the cross-kind retention order here (`neighbours(max_loss)`
stays `unsupported`) — that algebra belongs to trope-checker.
- Hermeneia integration is M2: a Rust adapter implementing
`hermeneia_store::StoreProvider` by driving `voc`. Do not link; wire only.
31 changes: 8 additions & 23 deletions Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,7 @@ import? "build/just/assess.just"

# Build the project (debug mode)
build *args:
@echo "Building {{project}} (debug)..."
# TODO: Replace with your build command
# Examples:
# cargo build {{args}} # Rust
# mix compile {{args}} # Elixir
# zig build {{args}} # Zig
# deno task build {{args}} # Deno/ReScript
@echo "Build complete"
zig build {{args}}

# Build in release mode with optimizations
build-release *args:
Expand Down Expand Up @@ -131,14 +124,7 @@ clean-all: clean

# Run all tests
test *args:
@echo "Running tests..."
# TODO: Replace with your test command
# Examples:
# cargo test {{args}}
# mix test {{args}}
# zig build test {{args}}
# deno test {{args}}
@echo "Tests passed!"
zig build test {{args}}

# Run tests with verbose output
test-verbose:
Expand All @@ -152,13 +138,12 @@ test-smoke:

# Run end-to-end tests (full pipeline: build → run → verify)
e2e:
@echo "Running E2E tests..."
# TODO: Replace with your E2E test command. Examples:
# bash tests/e2e.sh # Shell-based E2E
# npx playwright test # Browser E2E
# mix test test/integration/e2e_test.exs # Elixir E2E
# cargo test --test end_to_end # Rust E2E
@echo "E2E tests passed!"
./tests/e2e/invoke_slice.sh

# The M1 honest gate (ADR-0002): unit tests + end-to-end invoke slice against
# tropecheck at its pinned SHA. Hard-fails on toolchain absence or skew.
gate:
./tests/e2e/invoke_slice.sh

# Run aspect tests (cross-cutting concern validation)
aspect:
Expand Down
14 changes: 14 additions & 0 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,17 @@ Vocarium is part of a wider language/database ecology:
* **KRL** — knot resolution language

Vocarium’s role is to hold the particularities that other systems transform, interpret, narrate, or test.

## Status (honest, 2026-07-28)

*Implemented (M1 invoke slice, ADR-0002):* the `voc` store engine (pure Zig,
no C) — JSONL replay, warrant-door validation, and `voc invoke` emitting a
Trope IR v0.2 Document verified end-to-end against `tropecheck` (use-relativity
proven by the gate: same trope, opposite verdicts under two use-models).
Run `just gate`.

*Not yet implemented:* evoke/convoke/transvoke/provoke/revoke, revocation
records, neighbours/nearestness (the retention order stays in trope-checker),
Haec ingestion, the Hermeneia `StoreProvider` adapter (M2). Most docs outside
this README/EXPLAINME are un-instantiated estate template text — trust the
code and `docs/decisions/0002-pure-zig-wire-boundary.adoc` over them.
36 changes: 0 additions & 36 deletions abi.ipkg

This file was deleted.

29 changes: 29 additions & 0 deletions build.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
const std = @import("std");

pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

const exe = b.addExecutable(.{
.name = "voc",
.root_module = b.createModule(.{
.root_source_file = b.path("src/store/main.zig"),
.target = target,
.optimize = optimize,
}),
});
b.installArtifact(exe);

const tests = b.addTest(.{
.root_module = b.createModule(.{
.root_source_file = b.path("src/store/store.zig"),
.target = target,
.optimize = optimize,
}),
});
const run_tests = b.addRunArtifact(tests);
const test_step = b.step("test", "Run unit tests");
test_step.dependOn(&run_tests.step);
}
77 changes: 0 additions & 77 deletions docs-template/README.adoc

This file was deleted.

79 changes: 0 additions & 79 deletions docs-template/architecture.adoc

This file was deleted.

Loading
Loading