Skip to content

Repository files navigation

jeviter

CI

Don't poll. Rest, and react.

Homeostatic iteration for any agentic system. Replace for (const event of stream) with iteration that yields only when the world actually moves — and books every silence so a quiet stream is a receipted quiet stream, not a hang.

Why

A for loop pulls every tick whether or not the world changed. An agent doing that on a log tail, an SSE feed, a message queue, or an LLM output stream burns context, tokens, and attention on repetition. jeviter inverts it: next() pulls until the stream surprises a sliding boundary belief, then yields once.

Three laws, pinned by tests rather than promises:

  1. No belief, no refusal. The first pull seeds the boundary — seeding is not news.
  2. Every silence is booked. A silenced pull writes a receipt. A silence you cannot audit is indistinguishable from a hang.
  3. The threshold is alive. Dynamic: mean + k·σ over admitted gains. A fixed line is a target; this moves.

And the finding that makes it armor: the ratchet. A world oscillating at any fixed amplitude is silenced after exactly one admission — the threshold sets itself from the first gain and the return leg lands just under it. Adversarial resonance is impossible by construction. In Throttle form: a flood of identical requests self-sheds (an alternating-payload attacker cannot buy perpetual escalation), compute flows to the genuinely unexpected.

Canon-compatible

The ledger hash-chain is fnv1a-64 over UTF-8 — pinned to the fleet's café vector fnv1a64("café Δ 日本語") === 0x24a555471370b18d — so receipts cross-verify with jev-quilt's Bookkeeper, duke-lab's WASM port, and quilt-engine-ports' GDScript from byte one. Profiles are exact BigInt rationals; KL is computed over rationals, never a float identity.

Install / use

npm test                       # node --test
node src/cli.js tail app.log --ledger app.ledger.jsonl
node src/cli.js follow https://example.com/stream --k 1.5
node src/cli.js scan app.ledger.jsonl   # verify chain + name the silence pattern
node src/cli.js tui app.log --ledger app.ledger.jsonl  # live instrument panel (TTY)
node src/mcp.js                # MCP stdio server (Claude Desktop, fleet agents)
import { JevIterator, Ledger } from 'jeviter';
const it = new JevIterator(streamOfLines, { k: 2, ledger: new Ledger('my-cell') });
for await (const ev of it) {
  // ev: { text, gain, threshold, pulls, tick } — the world moved
}

MCP tools: jeviter_tail, jeviter_next, jeviter_throttle, jeviter_ledger_verify; ADE bridge tools: fleet_doctrine, fleet_spec_fidelity, fleet_collab_read.

Surfaces

Surface Status
Core ESM (browser/Node/Deno) ✅ zero-dep
CLI (tail, follow, scan, stdin digest) ✅
TUI (tui — instrument panel, silences rendered as data) ✅ zero-dep ANSI
Org firehose watch (in service) ✅ examples/org-watch.js
MCP stdio server ✅
Dreaming consolidation cell (receipted sleep) ✅ src/dream.js
Vibe→Spec distiller (distill — persona playtest → checked CANON stub) ✅ seed 3
TUI (valve dashboard) designed — threshold, gain histogram, silence counter
Python port exists as jev_quilt/jeviter.py (same doctrine)

Vibe→Spec distiller (SDAD seed 3)

src/distill.js: a persona playtest transcript goes in; a machine-checked CANON.md stub comes out. Every lesson must cite transcript lines that resolve (CITATION); repeats of already-pinned lessons book silence, never re-pin (DUP); new lessons pass through the Throttle — the surprising escalate as receipts, the familiar are receipted silence (JEV GATE); and the rendered stub is re-parsed and verified, hashes recomputed against the transcript (WELL-FORMEDNESS). REFUSED lessons are named, never silently dropped; malformed input yields a refused receipt and an honest empty stub, never a throw. docs/VIBE-DISTILL.md states the doctrine; the stub is the spec surface src/fidelity.js meters.

node examples/vibe-distill.js --check

Doctrine provenance

Born in jev-quilt's classifier lab (E5–E7): cascade non-monotonicity, the amplitude-invariance sweep, and the throttle sense-organ lesson (letter-class profiles beat chaotic per-char hashes — KL must always have mass to compare).


Documentation

Wave-69 documentation package (task 69-doc-b). Start here by audience:

  • Agent onboarding (zero-shot entry): docs/ONBOARDING.md — identity, verify-commands, reading order, gotchas, frontier.
  • End users: docs/USER-GUIDE.md — install, first success (real captured output), everyday tasks, troubleshooting, FAQ.
  • Developers: docs/DEVELOPER-GUIDE.md — code layout, core concepts, how to add cells/verbs, testing, conventions.
  • Engineers / operators: docs/ENGINEERING-NOTES.md — architecture, invariants, failure modes, cost envelope, design decisions.
  • Executives: docs/CTO-BRIEF.md — value, maturity, risks, strategic options.
  • Index of all deeper knowledge: docs/KNOWLEDGE-MAP.md — ledgers, docs, cells, and journal Task IDs, one line each.

About

JEV (Joint Embedding Validator) UI — promote/REVIEW/DISCUSS/REJECT oracle for canon-vs-speculation. See jev-oracle memory topic.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages