Spaces:
Running
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.pymust keepcompute_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.dbfrom 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_TOKENsecret. Until then it's a fail-soft no-op.
- ensure the Space has the
- 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: truein README; authlib OIDC flow (/login,/auth/callback,/logout,/me); signed session. - On login, the OIDC
subis 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;/sayreturnsrecognitiononly when signed in; the creature welcomes returnees. /mereturns 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): effectivedim_resilience_maxrises 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-targetScoreinto the one shared soul; audit-logged like chat. - In-browser physics + fluid animation (
static/physics.jspulse engine +app.jsloop): arequestAnimationFrameloop drives spring-damped squish (impulse on every response, sized by |VADUGWI deltas|) and continuous breathing (rate+depth from arousal). Writes to a#blob-animwrapper so it never fightsrenderBlob'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(/toyreturns 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.