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.
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:
- No belief, no refusal. The first pull seeds the boundary — seeding is not news.
- Every silence is booked. A silenced pull writes a receipt. A silence you cannot audit is indistinguishable from a hang.
- 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.
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.
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.
| 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) |
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
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).
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.