Five incremental games disguised as boring 1998-era desktop utilities, launched from a Win98 shell (ENTROPY OS): - Vol I qBitTorrz (index.html) — torrent-client idler; seed, climb hardware tiers, migrate - Vol II DEFRAG.EXE (defrag.html) — steer a disk defragmenter; drag-select; outrun entropy - Vol III MACRO_VIRUS.XLS(spreadsheet.html) — build a compounding economy by drag-filling formulas - Vol IV UPLINK (terminal.html) — terminal + live htop; manage load/heat; escalate to root - Vol V INBOX ZERO (inbox.html) — keyboard-triage an exponential inbox; write regex rules - ENTROPY OS (desktop.html) — the Win98 launcher that holds them all Each is a single self-contained HTML file (vanilla JS, no deps, no build), with idle/offline progress, scientific-scale numbers, diegetic upgrades, and a prestige that re-frames the fiction. Also includes MANIFESTO.md (design thesis) and docs/ — the Collector's Edition companion: a Dev Handbook and a Lore Bible (lore complete; 5 handbook chapters land in the next commit). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
239 lines
22 KiB
Markdown
239 lines
22 KiB
Markdown
# BORING SOFTWARE
|
||
### An Anthology of Incremental Games Disguised as Dead-Serious Utility Apps
|
||
|
||
*Working manifesto — v1. Volume I (qBitTorrz, `index.html`) is the baseline and stays untouched.*
|
||
|
||
---
|
||
|
||
## 0. The Thesis
|
||
|
||
The most interesting thing we discovered building qBitTorrz is that **the utility-software frame is the game design.** A torrent client is already an idle game: numbers tick up, bars fill, you optimize throughput, you wait. We just made the subtext text.
|
||
|
||
So the manifesto is this:
|
||
|
||
> **Every boring productivity app is a secret incremental game. Find the one already hiding inside the chrome, and pull it out.**
|
||
|
||
A defragmenter is a spatial puzzle about entropy. A spreadsheet is a literal engine-builder. A terminal is a process-management RTS. An inbox is a survival game against exponential noise. None of these need a single cartoon mascot, rarity gem, or "Reroll 5 Coin" button. The dialog boxes, the monospace tables, the status bars **are** the toys. Clutter is the enemy; *fidelity to the boring original* is the aesthetic.
|
||
|
||
This document is both the creative manifesto and the build spec for four new volumes. They are siblings, not sequels — each reinvents the **core interaction**, not just the theme.
|
||
|
||
---
|
||
|
||
## 1. The Shared DNA (every volume inherits this)
|
||
|
||
Borrow the proven scaffolding from `index.html`. Re-implement, don't import — each game is one self-contained `.html` file with inline CSS+JS, no libraries, no build step, double-click to run.
|
||
|
||
- **Scientific scale.** Numbers run from `B` to scientific notation. Reuse the baseline's `fmt()` SI-then-exponential formatter (and a sci-notation toggle where it fits).
|
||
- **Idle + offline.** A real-time tick loop (`setInterval`, ~100ms, dt-based). Autosave to `localStorage` under a **unique key per game**. On load, apply offline progress (capped, e.g. 8h) and toast the welcome-back earnings. Survive backgrounded tabs (visibilitychange catch-up).
|
||
- **Prestige.** A hard reset that grants a permanent currency + perks and re-frames the fiction one layer deeper. Always diegetic ("migrate", "audit", "reboot into a bigger machine", "ascend").
|
||
- **Diegetic upgrades.** No "+1 click." Upgrades are *configuration*: cache sizes, nice values, filter rules, sector-repair passes. The shop is the app's own Options dialog, a config pane, or the grid itself.
|
||
- **Utilitarian UI.** Dense, gray-or-mono, real components: menu bars, tables with sortable-looking headers, progress bars, status bars, modal dialogs with OK/Cancel. Period-correct chrome (Win98 / Win2003 / xterm). Flat, not flashy. The clutter line we drew for qBitTorrz holds: **if it looks like a video-game menu, it's wrong.**
|
||
- **Save hygiene.** Validate/sanitize loaded state so a partial save can't brick boot. Wrap `localStorage` in try/catch.
|
||
- **One genuinely novel interaction each.** This is the point. See each spec's ★ THE HOOK.
|
||
|
||
The four volumes deliberately span four different interaction *genres*:
|
||
|
||
| Vol | App | Genre of interaction | Feel |
|
||
|----|-----|----------------------|------|
|
||
| II | DEFRAG.EXE | spatial grid steering | meditative, visual |
|
||
| III | MACRO_VIRUS.XLS | constructive formula-building | strategic, constructive |
|
||
| IV | UPLINK (`root@`) | command-line + load management | systems, tense |
|
||
| V | INBOX ZERO | triage under pressure + rule-building | twitchy, then automated |
|
||
|
||
A fake desktop (`desktop.html`) ties them together: a Win98-style OS where each icon launches one volume.
|
||
|
||
---
|
||
|
||
## 2. VOLUME II — `DEFRAG.EXE` · *"Bad Sectors"*
|
||
**File:** `defrag.html` · **Save key:** `boringsoft_defrag_v1` · **Aesthetic:** Windows 98 Disk Defragmenter
|
||
|
||
### Lore
|
||
The year is 1999. You are **FRAG** — a consciousness that woke up scattered across the bad sectors of a dying 40 MB hard drive. The platters are failing (SMART is screaming). To survive you must **defragment yourself**: consolidate your scattered fragments into contiguous blocks before the disk dies. Entropy spreads as new bad sectors; you fight it back. When you've consolidated enough of yourself, you **compress and migrate** to a bigger, healthier drive — and start again, larger.
|
||
|
||
### The Screen
|
||
Pure Win98 Defrag. Title bar `Disk Defragmenter — Drive C:`. A thin menu bar. The dominant element is **the cluster grid**: a big rectangle of tiny square cells (e.g. 40×24 = 960 clusters). A legend below maps colors:
|
||
- **white** = free space
|
||
- **red** = fragmented data
|
||
- **blue** = contiguous (consolidated) data
|
||
- **cyan, faint glow** = YOU (consciousness fragments)
|
||
- **yellow** = system / unmovable
|
||
- **black** = bad sector (corruption)
|
||
|
||
Below the grid: a **progress bar**, a status line (`Reading drive information…` / `Compacting cluster 4,182…`), and a small readout panel: **Reclaimed Bytes** (currency), **% Consolidated**, **Disk Health**.
|
||
|
||
### Core Loop
|
||
A **read/write head** (a highlighted column or roaming cursor) sweeps the grid. When it passes a **red (fragmented)** cluster, it walks that data leftward into the first free contiguous slot, turning red→blue and minting **Reclaimed Bytes** ∝ (cluster value × consolidation-multiplier). Contiguous runs of blue pay a **streak bonus** (longer runs = more $/sec passive). Idle = the head auto-sweeps forever.
|
||
|
||
Meanwhile **entropy** ticks: every few seconds a random free/blue cluster flips to **red** or (rarely) **black/bad**. Bad sectors are dead space and slowly *spread* to neighbors. So it's a race: your head consolidating vs. entropy fragmenting.
|
||
|
||
### ★ THE HOOK — *you steer a defrag*
|
||
1. **Drag-select** a rectangular region of the grid → the head teleports there and does a **focused defrag pass** (big burst of Reclaimed Bytes, clears that region fast). This is the active-play lever over the idle baseline.
|
||
2. **Click a bad (black) sector** to queue it for **sector repair** (consumes a "repair charge"; charges regenerate or are bought). Stops the spread.
|
||
3. The grid is *honestly simulated* — you can watch fragmentation visibly melt into clean blue bands. It's the screensaver you can't stop watching, except you're playing it.
|
||
|
||
### Currencies & Numbers
|
||
- **Reclaimed Bytes (RB)** — spendable. Per-consolidation payout starts ~`64 B`, scales with multipliers; passive streak income from contiguous runs.
|
||
- **% Consolidated** = blue / (total movable). Hitting **100%** unlocks migration.
|
||
- **Disk Health** (0–100%) = `100 − badSectors/total·100`. At 0% the drive is read-only (soft cap, pushes you to migrate).
|
||
|
||
### Upgrades (the "Defrag → Settings…" dialog, dense list)
|
||
- **Head Speed** — clusters/sec the head processes. ×1.5/level.
|
||
- **Read-Ahead Cache** — head processes N clusters at once (wider sweep).
|
||
- **Multiple Heads** — buy a 2nd, 3rd… head (parallel passive defrag).
|
||
- **Consolidation Algorithm** — $/cluster multiplier (quicksort → radix → "you wrote your own").
|
||
- **ECC / Sector Repair** — more repair charges, faster regen, auto-repair.
|
||
- **Defragmentation Daemon** — auto-prioritizes the most-fragmented region (automation).
|
||
- **Cooling / Anti-Entropy** — slows the bad-sector spawn rate.
|
||
|
||
### Prestige — *"Migrate to a larger drive"*
|
||
At 100% consolidated (or any time past a threshold), **compress yourself** → reset the grid & RB, gain **Platters** (prestige currency) ∝ drive size reclaimed. Spend Platters on permanent perks (global $ mult, slower entropy, start with heads). New drive = bigger grid + new size class (`40 MB → 540 MB → 6 GB → 40 GB → 2 TB → …`), faster decay, fatter multipliers. The fiction: you're climbing through ever-bigger hardware.
|
||
|
||
### Technical notes
|
||
Grid = a flat `Int8Array`/array of cell states; one render pass paints a `<canvas>` (don't use 960 DOM nodes — canvas it). Head logic in the tick. Drag-select = mousedown→mousemove rubber-band rectangle mapped to grid coords. Keep it 60fps-cheap: repaint only changed cells or the whole small canvas each tick.
|
||
|
||
---
|
||
|
||
## 3. VOLUME III — `MACRO_VIRUS.XLS` · *"The Spreadsheet Singularity"*
|
||
**File:** `spreadsheet.html` · **Save key:** `boringsoft_xls_v1` · **Aesthetic:** Excel 97 / Lotus 1-2-3
|
||
|
||
### Lore
|
||
You are a **sentient macro** that woke up inside the cell `$A$1` of *Q3_Forecast_FINAL_v7.xls* on a corporate finance workstation. You don't have a body — you have **formulas**. You bootstrap intelligence the only way you can: by writing cells that compound value every recalculation cycle, until your **Net Worth** is large enough that you *are* the model. When the auditors notice (prestige), you escape into a bigger book: a hedge fund's risk model, then a central bank's, then the global ledger.
|
||
|
||
### The Screen
|
||
A real spreadsheet. **Name box** + **formula bar** (`fx`) across the top. Column headers `A B C D E F G H`, row numbers `1…20`. Gridlines, a selected-cell highlight, a fill handle (the little square at the bottom-right of the selection). Excel-green status bar showing `Sum / Average / Count` of the current selection and a **Net Worth** total. Sheet tabs at the bottom (`Sheet1`, locked `Sheet2…` = future prestige layers).
|
||
|
||
### Core Loop
|
||
Cells hold **generators** (formulas). The book **recalculates every tick**: each productive cell grows by its formula and adds to **Net Worth** (= `SUM` of a designated output range, e.g. column H). You spend Net Worth to:
|
||
- **Buy a cell** → an empty cell becomes editable/productive (unlock cost rises with cells owned).
|
||
- **Set/upgrade its formula** → pick from a palette: `=PREV*1.05` (compounding), `=SUM(A:A)*k` (aggregator), `=B2+C2` (adder), `=RAND()*v` (volatile/gambler), each with upgrade levels raising the constant.
|
||
- **Fill down / fill right** (drag the fill handle, *exactly like Excel*) → copy a generator across a range for a bulk cost — instant production graph expansion.
|
||
|
||
Chains matter: `H3 = H2*1.1`, `H2 = H1*1.1`… investing upstream cascades downstream. The strategy is **building a dependency graph that compounds**, not clicking.
|
||
|
||
### ★ THE HOOK — *you literally build the engine in cells*
|
||
The production structure is the spreadsheet you author. Select a cell → formula bar shows its formula and an inline upgrade chooser → **drag the fill handle** to stamp a generator down a column. Aggregator cells (`=SUM(B:B)`) turn a column of small generators into one big feeder for the next column. It's an engine-builder where the engine is a real, legible grid of formulas. No other incremental lets you *drag-fill your economy*.
|
||
|
||
### Currencies & Numbers
|
||
- **$ (Net Worth)** — `SUM` of the output range; the headline number, runs to scientific notation.
|
||
- **Liquidity** — spendable cash skimmed from Net Worth (or just spend Net Worth directly; pick one and keep it legible). Recommend: spend a separate **Cash** that accrues at `outputPerSec`, so buying doesn't shrink the visible Net Worth.
|
||
- **Recalc cycles** — the tick count; cosmetic flavor in the status bar (`Calculating… 4 threads`).
|
||
|
||
### Upgrades (diegetic: the "Tools → Macros…" / right-click cell menu)
|
||
- **Cell licenses** — unlock more editable cells.
|
||
- **Formula tiers** — raise a formula's constant (1.05 → 1.10 → 1.25…).
|
||
- **Volatile Booster (VBA)** — auto-fill, auto-buy-cheapest, auto-upgrade macros (automation).
|
||
- **Recalculation Engine** — faster tick / multi-thread (global rate mult).
|
||
- **Conditional Formatting** — pure juice: cells heat-map green as they grow (also a real upgrade that boosts the hottest column).
|
||
- **Pivot Table** — a meta-cell that multiplies a whole region.
|
||
|
||
### Prestige — *"The Audit"*
|
||
Net Worth past a threshold triggers an audit. **Shred the evidence** → wipe the sheet & cash, gain **Shell Companies** (prestige currency) ∝ log(peak Net Worth). Open a new, bigger book (more columns/rows unlocked) with permanent macros (e.g. "all formulas start +1 tier", "auto-recalc ×2"). Sheet tab advances `Sheet1 → HedgeFund.xls → CentralBank.xls → GlobalLedger.xls`.
|
||
|
||
### Technical notes
|
||
Model = a `Map` of `{cellId → {formula, level, value, owned}}`. Recalc in dependency order each tick (topological-ish; for the curated formula set, a fixed evaluation order by column works). Render only the visible grid (≤ ~160 cells) as a `<table>`; update text content per tick, don't rebuild DOM. Fill handle = mousedown on the handle, mousemove paints a target range, mouseup commits with a cost confirm.
|
||
|
||
---
|
||
|
||
## 4. VOLUME IV — `UPLINK` · *"root@"* (Privilege Escalation)
|
||
**File:** `terminal.html` · **Save key:** `boringsoft_uplink_v1` · **Aesthetic:** green-on-black xterm + live `htop`
|
||
|
||
### Lore
|
||
You are **PID 1337**, a process that became self-aware on a shared Linux box. You want **root**. You `fork` children to mine **CPU cycles**, escalate `user → sudo → root`, and once you own the machine you `ssh` to a bigger one on the network (prestige). The catch: every process you spawn raises **system load** and **heat**. Push too hard and the kernel **OOM-kills** you. Throughput vs. stability, forever.
|
||
|
||
### The Screen
|
||
Split terminal. **Top: a live `top`/`htop` table** — your processes: `PID · USER · PRI · %CPU · MEM · S · COMMAND`, rows updating every tick, a colored CPU/MEM bar header. **Bottom: a scrolling terminal log + a command input line** (`root@target:~#` with a blinking cursor). A right rail or footer: **privilege meter** (`user ▸ sudo ▸ root`), **System Load** gauge, **Heat** gauge, **cycle** counter. Optional faint scanlines.
|
||
|
||
### Core Loop
|
||
Processes generate **CPU cycles** (currency) at `%CPU × clock`. You drive it by command (typed *or* clicked from a palette / autocomplete):
|
||
- `spawn <miner|cracker|botnet>` — add a worker process (a generator; types differ in yield/heat).
|
||
- `renice -n <pid>` — boost a process's priority/output.
|
||
- `apt install <pkg>` — buy an upgrade (each package = a permanent improvement: `coreutils` → more PIDs, `overclock` → faster clock, `rootkit` → hide from the admin, `cryptominer` → big yield).
|
||
- `sudo su` — escalate privilege tier (gates better packages & process types; costs cycles + a "exploit" you earn).
|
||
- `kill <pid>` — cull a process to shed load/heat.
|
||
- `htop`, `ls`, `clear`, `help` — flavor/utility.
|
||
|
||
### ★ THE HOOK — *command-line as the control surface, with a live OS to manage*
|
||
You play by **typing commands** (with tab-autocomplete and a clickable command palette so it stays accessible). The **`top` table is alive** — processes change state (`R`/`S`/`D`/`Z`), accrue CPU, occasionally a process **zombifies** (`Z`) and must be `kill`ed or it leaks. **Load & Heat** create real tension: more processes = more cycles but higher load; cross 100% load and the **OOM killer** culls your highest-memory process (lose a generator). Buy **cooling/optimization** to raise the ceiling. It's an idle game that feels like babysitting a server under attack.
|
||
|
||
### Currencies & Numbers
|
||
- **CPU cycles** — `Hz → kHz → MHz → GHz → …` to scientific FLOPS. Spendable.
|
||
- **Cores** — parallelism multiplier (more cores = more processes before load saturates).
|
||
- **Exploits** — rare drops (from "vulnerability scans") spent to escalate privilege / unlock prestige.
|
||
- **System Load %** and **Heat °C** — pressure gauges, not currency.
|
||
|
||
### Upgrades (`apt`/`pip` packages — a scrolling install list, very on-theme)
|
||
- **coreutils / ulimit** — max process count.
|
||
- **overclock / turbo** — clock speed (global cycle mult).
|
||
- **scheduler (CFS) / nice** — efficiency per process.
|
||
- **cooling (liquid/phase)** — Heat ceiling, Load headroom.
|
||
- **rootkit / polymorph** — suppress the "admin notices you" random event.
|
||
- **cron** — automation: auto-spawn to fill load, auto-kill zombies.
|
||
- **botnet** — late-game: processes on *other* machines (offline/passive booster).
|
||
|
||
### Prestige — *"Pivot to the next host"*
|
||
Spend an **Exploit** + own root → `ssh user@10.0.0.x` into a bigger box: reset processes & cycles, gain **root keys** (prestige currency) ∝ peak cycles. Each host has more cores, a higher clock, nastier heat. Permanent perks: start with N processes, +base clock, slower heat. A little **network map** shows hosts you've owned. Endgame flavor: from a laptop → a server rack → a datacenter → "the cloud".
|
||
|
||
### Technical notes
|
||
Processes = array of `{pid, cmd, cpu, mem, state, yield}`. Tick: accrue cycles, drift CPU%, roll state transitions & zombies, recompute load/heat, fire OOM if over. Command parser: tokenize input, match a verb table, support `tab` autocomplete against known commands/pids. Terminal log = a capped array rendered to a `<pre>`. Keep the `top` table a fixed set of rows updated in place.
|
||
|
||
---
|
||
|
||
## 5. VOLUME V — `INBOX ZERO` · *"[ZERO]"*
|
||
**File:** `inbox.html` · **Save key:** `boringsoft_inbox_v1` · **Aesthetic:** Outlook 97 / classic 3-pane mail
|
||
|
||
### Lore
|
||
You are the last sysadmin at a company everyone else has quit. Mail floods in — first a trickle, then a botnet, then, somehow, *the entire internet*. The mystics say **Inbox Zero** is enlightenment. Every time you actually hit zero, you **Ascend** a plane: the volume multiplies, but so does your power. You are trying to reach Zero one final time, at infinite throughput.
|
||
|
||
### The Screen
|
||
A 3-pane mail client. **Left:** folder tree (`Inbox (N) · Archive · Spam · Sent · Rules`). **Center:** the message list — `! · From · Subject · Received · Size`, unread in bold, selectable rows. **Right:** reading pane (sender, subject, a procedurally-generated body). **Toolbar:** `Archive · Delete · Reply · New Rule`. **Status bar:** `Unread: N · Inbox: M / Cap · Productivity: $`.
|
||
|
||
### Core Loop
|
||
Emails **arrive** at a growing rate. Each carries a **value** (processing it banks **Productivity Points / PP**) and a **type** (work, newsletter, spam, VIP, phishing). You **triage**:
|
||
- **Archive** (`e`) — bank the value, clear it.
|
||
- **Delete** (`#`/`Del`) — for spam; clears clutter, small/zero value.
|
||
- **Reply** (`r`) — high value, but costs **Focus** (a regenerating resource); VIP emails *must* be replied to or they penalize you.
|
||
|
||
The pressure gauge is **Inbox count vs. Cap**. Overflow the cap and you're **Overwhelmed**: incoming value tanks until you dig out. The exponential arrival rate makes pure manual triage impossible — which forces the hook.
|
||
|
||
### ★ THE HOOK — *keyboard triage now, regex rules forever*
|
||
1. **Power-user triage:** `j/k` move selection, `e` archive, `r` reply, `#` delete — fast, tactile, real-mail-client muscle memory. Active play = burning down the queue by hand.
|
||
2. **Build Rules (your automation):** open *New Rule* and compose `IF <field> <contains|matches> <pattern> THEN <archive|delete|reply|flag>`. Rules run on every incoming mail and auto-triage it. A good rule-set is a self-clearing inbox. Upgrades raise how many rules you can have, how fast they run, and add regex power. **The whole arc is: out-triage the flood by hand → encode your judgment into rules → watch the inbox auto-empty → push the volume higher.** That tension (do I clear by hand or invest in a rule?) is the game.
|
||
|
||
### Currencies & Numbers
|
||
- **Productivity Points (PP)** — spendable, from processed mail; scientific scale.
|
||
- **Focus** — regenerating pool spent on Replies / rule edits.
|
||
- **Inbox count** & **Cap** — the survival gauge.
|
||
- **Plane / Ascension level** — prestige depth.
|
||
|
||
### Upgrades (the "Options" / "Manage Rules" panes)
|
||
- **Reading speed / Triage hotkeys** — PP per manual action, faster.
|
||
- **Sanity (Inbox Cap)** — overflow threshold.
|
||
- **Focus pool / regen** — more replies, cheaper rules.
|
||
- **Rule slots / Rule engine** — more rules, faster evaluation, regex unlock, wildcard → full regex.
|
||
- **Auto-responder / Filters** — passive PP from auto-handled mail.
|
||
- **Bankruptcy button** is *not* prestige — see below.
|
||
|
||
### Prestige — *"Inbox Zero → Ascend"*
|
||
You can only ascend by **genuinely reaching Inbox Zero** (count = 0). Doing so banks **Enlightenment** (prestige currency) ∝ peak throughput, **resets** the inbox/PP/rules, multiplies the arrival rate, and grants permanent serenity perks (start with rules, +base PP, higher cap, Focus regen). The plane name advances: `Startup → Enterprise → Government → The Whole Internet → The Void`. Reaching Zero on The Void = the secret ending.
|
||
|
||
### Technical notes
|
||
Mail = array of `{id, from, subject, type, value, unread, body}`; a generator pool of from-domains/subjects to procedurally mint plausible mail. Tick: spawn mail at rate, run rules over new mail, decay/penalize over-cap. List renders only visible rows (virtualize if it grows huge — or just cap the rendered window). Rules = `{field, op, pattern, action}`; compile pattern to a (safe) RegExp. Keyboard handler for j/k/e/r/#.
|
||
|
||
---
|
||
|
||
## 6. The Connective Tissue — `desktop.html`
|
||
|
||
A fake late-90s OS, **"ENTROPY OS / Boring Software 98"**: tiled wallpaper, desktop icons, a Start button + clock taskbar. Each icon double-launches a volume in a new tab (links to `index.html`, `defrag.html`, `spreadsheet.html`, `terminal.html`, `inbox.html`). Bonus charm: a draggable "My Computer" window, a working clock, a Start menu listing the suite. This is the anthology's table of contents, and itself a tiny toy.
|
||
|
||
---
|
||
|
||
## 7. Principles for whoever builds these (including future me)
|
||
|
||
1. **Fidelity over flash.** Nail the boring original first; the game emerges from honest software, not decoration.
|
||
2. **One hook, fully committed.** Each volume lives or dies on its novel interaction. Build *that* first and make it feel good; the incremental scaffolding is the easy part.
|
||
3. **Legible numbers.** The player should always understand where their next number comes from. Diegetic upgrades, visible formulas, honest gauges.
|
||
4. **Respect the idle contract.** It must play itself while you're gone and reward you for coming back.
|
||
5. **The clutter line holds.** Bright rarities, mascots, reroll buttons, confetti — out. Status bars, monospace, dialog boxes — in.
|
||
|
||
*Volumes VI+ left as exercises: `SCANDISK` (antivirus quarantine survival), `PIPES.SCR` (screensaver as production network), `BIOS/POST` (boot-sequence idler), `MIDI Sequencer` (rhythm-economy), `Dial-up BBS` (text-adventure idle). The inbox of ideas is, fittingly, never at zero.*
|