clanker / docs /ROADMAP.md
deucebucket's picture
Upload folder using huggingface_hub
9564947 verified
|
Raw
History Blame Contribute Delete
10.8 kB
# Clanker β€” Roadmap
**The first VADUGWI project.** A community-cared creature with persistent memory and
emotion whose purpose is to make the 7-dimensional VADUGWI state **visible, audible, and
explainable in real time** β€” and to **log real usage so the VADUGWI formulas can be
audited and improved**. The pet is the vehicle; showing off VADUGWI is the point.
## Framing: this is a SHOWROOM FLOOR
The whole UI is a **showroom for the VADUGWI engine** β€” every mechanic is on demonstrative
display, not hidden behind a cute pet. The visitor should *see the machine work*: the raw
read, **how the soul's VADUGWI governs how much new emotion it accepts (resilience/armor)**,
the mood that results, and **how words/actions have shaped the soul over time**. The pet is
the exhibit; the engine is the product.
## Governing principle (HARD RULE)
**VADUGWI drives everything β€” full stop.** Every feature, mechanic, toy, care action,
animation, sound, and bit of GFX must *read from or write to* the VADUGWI state. Nothing is
cosmetic-only; nothing is faked. If a proposed addition can't be tied to a concrete VADUGWI
cause or effect, it does not ship. The creature's every behavior must trace back to real
engine math β€” and that trace must be loggable for the audit flywheel below.
## Why this matters (the flywheel)
People talk to the creature β†’ clanker-lang scores it β†’ clanker-soul accumulates mood β†’
the creature shows *exactly why* it feels how it feels (words detected, roles, structures,
per-dimension contributions). Every interaction is logged (input + full VADUGWI + trace).
That corpus lets us **audit the engine against real-world language** β€” find cases that read
neutral but shouldn't, miscalibrated dimensions, blind spots β€” and feed fixes back into
the formulas. The pet is a continuous, free, real-world evaluation harness with a face.
## Current status (Phase 1, shipped 2026-06-15)
Live at `huggingface.co/spaces/deucebucket/clanker` (Docker Space, FastAPI + vanilla JS,
no model β€” simlish voice via browser Web Speech, one shared global SQLite soul).
**Known gap that M1 fixes:** the engine works (VADUGWI moves on every message) but the
showcase is buried β€” color/face/word are bucketed into only 5 discrete regions so small
talk looks frozen; the numbers hide in one drawer; and the **trace (what it detected) is
discarded entirely** (`scorer.py` drops it). A placeholder "guest" chip clutters the
corner. GFX read as rough-draft; the room is empty.
## Locked decisions
- **Build order:** M1 (showcase core) first.
- **Audit/data store:** a **private HF Dataset** repo β€” every interaction appended
(input text, full VADUGWI, trace, care/context, timestamp). Durable, survives rebuilds,
easy to pull for analysis.
- **Identity:** **anonymous-first**; HF login optional (unlocks being remembered + care
credit). Maximizes community reach.
- **No language model, ever.** Voice = simlish + emoticons via browser Web Speech ($0).
- **One shared global creature**, permanent state, community-shaped.
---
## M1 β€” Make VADUGWI visible + auditable *(the fix + the point)*
The current Space's defect and the showcase, together.
- **Continuous appearance** β€” color/posture interpolate smoothly across the VADUGWI space
instead of snapping between 5 buckets, so every message visibly moves the creature.
- **Live 7-dim HUD** β€” all of V A D U G W I on screen as labeled meters, each showing its
current value AND the **per-message delta** (e.g. `W βˆ’6`). Always visible, not hidden.
- **"What it detected" panel** β€” surface the discarded trace: the words that fired, their
roles (SELF_REF, EMOTIONAL, NEGATOR, AMPLIFIER, …), structures detected, and each
dimension's contributors. This is the explainability no neural pet can do.
- **"Why it feels this way"** β€” current mood = soul baseline + recent interactions, shown
as readable contributions.
- **Surface the raw per-message read** (undamped) next to the slow soul mood, so the engine's
reactivity is obvious even when the soul moves slowly.
- **Resilience/acceptance display** β€” show how the soul's armor (from its W/D) absorbed part
of each incoming read (`absorbed_pct`), so the read→mood gap is explained, not mysterious.
- **Soul-over-time** β€” a timeline of how words/actions shaped the soul across the creature's
life (from the event log); full historical persistence is M2.
- **Born flimsy** β€” a newborn soul has low W/D + near-zero resilience, so it swings hard on
every message (resilience is earned later, see M3). Reset the live creature to baby.
- **Log unknown words / suspected vocab gaps** as first-class audit rows (Jerry's priority).
- **Richer mood vocabulary** β€” many more mood words than the current 5.
- **Remove the mystery box** (the placeholder identity chip).
- **Audit logging** β€” append every interaction to the private HF Dataset.
- **First GFX pass** β€” adopt the **Hugging Face mascot** look (recolorable vector, faithful
silhouette, resting yellow β‰ˆ neutral; color/face/hands driven by VADUGWI), more shine/depth,
and a less-empty room (full polish + ambient mascot behaviors are M4).
- **Surface the trace at the source** β€” `scorer.py` must keep `compute_vadug`'s trace, not
drop it; expose it through `/say`.
- *Success:* a visitor sends any message and immediately sees numbers move, the words it
reacted to, and why β€” and that interaction lands in the audit dataset.
## M2 β€” Persistence βœ… DONE (2026-06-15)
- **Soul survives Space rebuilds** via free **HF Dataset snapshot/restore** (chose this over
paid persistent storage): on boot, pull the latest `soul.db` from a private dataset before
opening it; after interactions, snapshot back β€” throttled (≀1/120s), background, fail-soft.
Audit log already snapshots to its own dataset. (`app/persistence.py`.)
- **Activation (one-time, Jerry):** create private dataset `deucebucket/clanker-soul-state`
+ ensure the Space has the `HF_TOKEN` secret. Until then it's a fail-soft no-op.
- *Identity deferred* β†’ see M2.5.
## M2.5 β€” Identity βœ… DONE (2026-06-15) β€” RECOGNITION-ONLY, privacy-first (`docs/PRIVACY.md`)
- HF OAuth login (optional; **anonymous-first** β€” everything works logged-out). `hf_oauth: true`
in README; authlib OIDC flow (`/login`,`/auth/callback`,`/logout`,`/me`); signed session.
- On login, the OIDC `sub` is **sha256-hashed** into the session β€” raw username NEVER stored
or shown. `RecognitionStore` (in the soul db, so it persists via M2) tracks first-seen/visits
per hash; `/say` returns `recognition` only when signed in; the creature welcomes returnees.
- `/me` returns only `{signed_in: bool}`. SESSION_SECRET set as a Space secret.
- *Final check (Jerry):* click "sign in", authorize, confirm it recognizes you on return β€”
the logged-in round-trip needs a human HF login to fully validate.
- Foundation for M3's per-user relational memory (affinity VADUGWI + flashbulb).
## M3 β€” Tamagotchi care + relational memory + Moments βœ… DONE (2026-06-15)
- **Care loop** (`app/care.py`): feed/play/pet fill needs (hunger/energy/attention) and each
ingests a positive VADUGWI Score; needs decay over time; sustained **neglect** ingests a
mild negative Score (floored β€” always recoverable). `POST /care`; needs in every state.
- **Resilience growth (earned)** (`soul_bridge`): effective `dim_resilience_max` rises with
lifetime event count (0.08 baby β†’ ~0.5 mature), applied live; persists via M2. `maturity()`.
- **Relational memory** (`app/relation.py`): per hashed-uid affinity EMA + flashbulb
(vectors+mood word+ts, NO raw text); signed-in users get re-felt on return (recall once/
session); privacy-clean (no usernames).
- **Moments diary** (`app/moments.py`): `notable()` flags breakdown/breach/elation/wound/
breakthrough; captured in `/say`; `GET /moments` (snapshots = vectors, no text).
- UI: care buttons + needs bars + Moments panel + "remembers you" hint (no usernames).
- All in the soul SQLite db β†’ persisted by M2's snapshot.
- *Community-shared "who cared for it" surfacing deferred to M5 (economy/governance).*
## M4 β€” Toys, world, physics, fluid animation, full GFX βœ… DONE (2026-06-15)
- **Toys** (`app/toys.py`, `POST /toy`): 5 momentary VADUGWI stimuli β€” balloon (high-arousal
delight), musicbox (positive valence at LOW arousal+urgency), mirror (self-Worth), teddy
(comfort/grounding), **rattle (Urgency spike β€” the dimension chat/care never reach)**. Each
ingests an absolute-target `Score` into the one shared soul; audit-logged like chat.
- **In-browser physics + fluid animation** (`static/physics.js` pulse engine + `app.js` loop):
a `requestAnimationFrame` loop drives spring-damped **squish** (impulse on every response,
sized by |VADUGWI deltas|) and continuous **breathing** (rate+depth from arousal). Writes to
a `#blob-anim` wrapper so it never fights `renderBlob`'s per-message transform.
- **Mascot behaviors** β€” idle FSM `behaviorFor(mood)`: **sleep** (arousal+urgency both low β†’
eyes close, Zzz, slow deep breath), calm, idle, **roam** (drifts across the floor at moderate
arousal), **excited** (fast bounce at high arousal). All derived purely from the live mood.
- **GFX**: 5 codex-generated transparent toy sprites adopted into the tray.
- Shipped & verified live on `deucebucket/clanker` (`/toy` returns moving deltas; Playwright
video confirms breathing/squish/sleep/roam; rattle shows U=210 in the read panel).
- *Community-shared world decor / care economy deferred to M5.*
## M5 β€” Community economy & governance *(exploratory / eventual)*
- Caring actions (cleaning up after it, feeding, play, attention) **earn a soft care
currency**.
- Spend it on toys, cosmetics, room decor (feeds M4's world).
- **Voting / governance** β€” the community votes on decisions: its name, direction, what it
gets, possibly moderation of cruelty.
- **Default to a soft in-app currency (points), not real money** β€” real payments add legal,
payment-processing, and regulatory weight; revisit a real economy only if explicitly
wanted.
- *Success:* caring is rewarded, and the community collectively steers the creature.
---
## Cross-cutting
- **W-dimension seam** between clanker-lang and clanker-soul β€” verify W flows correctly
before leaning on Worth for care/neglect mechanics (known organism-stack issue).
- **GFX** improves incrementally each milestone; M4 is the final pass. Image assets
(creature, room, toys β€” transparent PNGs, etc.) are generated via **codex** (GPT image
generation), which writes them wherever needed.
- **Audit-first mindset** β€” anything that affects VADUGWI (chat, care, toys) gets logged
with its trace, so the whole creature is one big evaluation instrument.