This checkout is on the 0.3.0 development cycle. The dependency and installation examples below target the published 0.2.0 release.
The vlajmaji JSON command for Vlajmaji's dictionary workbench.
For a source checkout, run these commands from the workspace root with Bauske checked out alongside Vlajmaji:
make build
./bin/vlajmaji --helpUse make build-release for an optimized build, or override INSTALL_DIR to
choose where the binary is copied. To install the published command, run
cargo install vlajmaji-cli --version 0.2.0 --locked. Version 0.1.0 used
the previous relojban-search command.
Requires Rust 1.98 or newer. Commands build a new SQLite store directory from a lexical archive, report corpus counts, and accept query JSON through an argument or standard input. Compound analysis and generation are enabled in the CLI.
The additive dictionary-build INPUT.json [STORE] command builds a
validated grouped-dictionary store from versioned dictionary JSON.
dictionary-query [STORE] [--request JSON] accepts exact or typed-reference
requests on the argument or stdin. info [STORE] reports counts for either the
grouped dictionary or the legacy archive store. When STORE is omitted, these
commands use $XDG_DATA_HOME/vlajmaji/stores/default; if XDG data home is unset,
empty, or relative, they fall back to
$HOME/.local/share/vlajmaji/stores/default. An explicit store always wins.
The default location is intended for a future dictionary-of-dictionaries; the
initial Lensisku-only store is provisional. Build creates missing default parent
directories privately but never replaces an existing store. Query and info do
not create or download a store. New-command runtime errors emit a structured
JSON object to stderr, no stdout, and a nonzero exit. See the
grouped dictionary query guide.
verify CHECK [STORE] runs one explicit read-only store check (schema,
metadata, hashes, model, fks, projection, or all). Ordinary open,
query, and info check only the minimum header; they do not establish full store
integrity. all reports six ordered result rows. A failed check exits nonzero,
leaves stdout empty, and writes both its structured error and complete report
to stderr.
collections register|install|migrate|update|rebuild|remove|reinstall|reconcile|list|inspect ROOT manages
an explicit local source catalogue. Registration stores typed source and
reference metadata without copying release payloads. Installation creates one
verified Unified generation; it never changes the default store or source
selection. Manifest paths resolve beside the manifest, and selected inputs are
read locally with the existing pack adapters. Synthetic packs require
--allow-synthetic. A compatible version-1 catalogue requires explicit
collections migrate ROOT --expected-revision N before writes. update uses
the same selected manifest or sealed inputs as install and replaces only
currently installed selected packs at the expected local revision. rebuild
uses retained sealed inputs to publish a new derived generation at the expected
revision. These commands do not change profile membership or the global default;
remove ROOT --pack ID... --expected-revision N removes active membership while
retaining source registrations, owned sealed inputs, and history. reinstall
uses the exact retained --release-sha256 with the ordinary sealed
input or manifest options and an expected revision. reconcile ROOT explicitly
observes SQLite physical recovery, attempts, and minimum derived-store state;
it neither activates a generation nor performs a full audit.
See the collection guide for commands, strict
manifest fields, state semantics, and structured failures.
collections configure, collections enable, collections disable,
collections default, collections profiles, and collections selection
manage a separate versioned user configuration. They accept --config; when
omitted, the CLI resolves XDG_CONFIG_HOME/vlajmaji/config.toml, falling back
to HOME/.config/vlajmaji/config.toml. A profile stores one catalogue ROOT,
ordered default pack membership, and independent disabled packs. lookup WORD
uses that profile and accepts --source, --page-size, and --cursor; a full
typed request can instead be supplied with --request or stdin. The managed
cursor binds the observed profile/catalogue/generation/selection snapshot.
collections configure updates membership while preserving a profile's
existing disabled packs; newly created profiles start with none. Explicit
library profile requests can deliberately replace the disabled list.
enable and disable change only selected members, while default --profile
sets and default --clear clears the configured default. Partial policy writes
read the latest config under its writer lock and report only changed member IDs;
semantic no-ops retain the original bytes and revision.
owned init ROOT [--input FILE], owned edit ROOT --expected-head REV [--input FILE], owned head ROOT, owned history ROOT, and owned show ROOT [--revision REV] operate on one explicit append-only owned dictionary journal.
Init and edit accept complete typed dictionary JSON from a file or stdin; they
never consult configuration or the default store. Each edit appends one
revision only when its expected head is still current. Head/history report
checked summaries, while show reconstructs and validates the selected full
state. See the owned journal guide.
After explicit migration, owned curate ROOT --expected-head REV [--input FILE]
appends a validated complete curation document, while owned curation-show ROOT [--revision REV] reads the retained document without resolving it. owned materialize ROOT [--revision REV] [--context FILE ...] --output FILE computes
a separate view from the exact supplied context files; each file contains its
declared pin ID and complete typed Dictionary. Output is created exclusively
after materialization succeeds. The owned dictionary guide
includes a self-generated Tiny example and derived-query workflow.
owned export ROOT --output FILE --seal FILE writes a canonical sealed full
history; owned check --input FILE --seal FILE validates it without opening a
journal, owned import ROOT --input FILE --seal FILE imports into a fresh
explicit root or recognizes an exact replay, and owned snapshot-model writes
one selected historical Dictionary. These commands report native paths and
exact byte counts and SHA-256 values. See the sealed-history recipe.
dictionary-query STORE --format compact --request JSON and
lookup --format compact --request JSON opt into compact Exact/Resolve output;
both commands still default to the established full response. Resolve a returned
key with dictionary-detail STORE --reference JSON [--expected-snapshot SHA]
or lookup-detail --reference JSON [--expected-snapshot SHA]. Detail keys are
strict versioned JSON and include required nullable fields. The optional
snapshot token detects a mismatch with the compact query view; it is not an
authenticity proof for an ordinary-open store.
Standalone compact dictionary-query writes the selected Exact or Resolve
response object directly at the JSON root. Configured lookup keeps its
managed envelope and operation-tagged result.
--format readable is available on both query commands and their detail
commands. It writes deterministic source-grouped text from the same compact
typed response; Full JSON stays the default, and compact JSON remains
unchanged. Detail commands accept Full or Readable; Compact is not a detail
format.
This layer does not alter dictionary-query STORE or the global default-store
route, and a selected installed payload that fails its minimum open is reported
as an error rather than as metadata-only availability.
jbotci-import RAW METADATA FRESH.json locally normalizes a hash-pinned export;
jbotci-check RAW METADATA [--release RELEASE.json] validates it without
writing. make jbotci-acquire, jbotci-replay, jbotci-check, and
jbotci-update provide the explicit pinned local workflow; each requires a
caller-chosen cache root and fresh release/store paths where applicable. See
the jbotci import guide
for pins, preservation, identity, metadata, and content-notice limits.
Corpus data is not bundled. See the data and replay guide for the current research-input workflow. Licensed under Apache-2.0.
data-pack fixture jbotci OUTPUT prepares an explicitly synthetic three-row
pack through the real importer for local feature checks and CI.
data-pack materialize jbotci RAW METADATA OUTPUT verifies caller-supplied
pins and supplier accounting, then writes canonical release, seal, and report
files into a fresh directory. It only reads the paths supplied by the caller;
it does not fetch data, overwrite an output, or build a store. The embedded
data crate has no default payload and is unpublished; its ignored local data
must be prepared before selecting that feature. A synthetic fixture is not the
full source distribution.
The optional LLG list-family package uses the same local-only workflow:
data-pack fixture llg OUTPUT creates a Synthetic fixed-column example, while
data-pack materialize llg GISMU CMAVO RAFSI NOTICE OUTPUT reads four files
supplied by the caller and verifies their complete bytes against the default
published-pin hashes. --gismu-sha256, --cmavo-sha256, --rafsi-sha256,
--notice-sha256, and --base-locator override those defaults for a different
explicitly identified input set. The command never downloads files, replaces
an existing output directory, or writes a dictionary store. The full LLG
payload is not committed or published; its notice and redistribution status
remain separate from the Apache-2.0 code license.
The optional La-Lojban pack uses the same local-only workflow:
data-pack fixture la-lojban OUTPUT prepares a clearly Synthetic example, and
data-pack materialize la-lojban RAW_JSON OUTPUT checks the pinned complete
input before writing a Full local release, report, and seal. --revision,
--raw-sha256, --raw-locator, and --notice-locator identify the input and
its provenance. The new data package is unpublished, has no default payload,
and keeps content redistribution Held until its terms are verified.
The optional Sutysisku projection pack is prepared the same way:
data-pack fixture sutysisku OUTPUT creates a Synthetic example, while
data-pack materialize sutysisku RAW_JSON OUTPUT checks the caller-provided
complete-byte pin before writing a Full local release, report, and seal.
--revision, --raw-sha256, --raw-locator, and --notice-locator identify
the input and its provenance. The package is unpublished and has no default
payload; content redistribution remains Held because the upstream lexical
lineage and data terms are unresolved.