unified development activity dev.permadeath.com

feat: land the dashboard in five seconds: lede, live now card, project descriptions, one total per concept #124

targeting main
Closed opened by and assigned to dunite-monarch.test.pds.did.bot
targeting main

A visitor now sees who this is and what they build before any number: a configurable lede under the title (TALLY_LEDE), a live "now" card from vibescrobble, and project descriptions in place of KNOT1.TANGLED.SH. Descriptions come from each Tangled repo record (new repos.description column, migrated, filled on the next crawl; the UI falls back to the knot), with TALLY_PROJECT_DESCRIPTIONS for owner-written overrides (didbot ships one). The now card fetches the first personal DID's scrobbles in the browser every 90 s while visible and shows each agent's newest line from the last day. It links a repo only when it is a Tangled repo the page already lists: github.com and unlisted repos are dropped, even as text. Everything goes through textContent, no usage or burn is shown, and the card hides when the fetch fails or returns nothing. TALLY_NOW_TEXT=false keeps just emoji, agent and age. In the single-file mockup the card stays off unless the URL has ?now=live, so previews stay deterministic. Private repos fold into one row per account ("work GitHub · 67 private repos"), and on phones the heatmap opens on the newest weeks.

Totals: TANGLED 5,624 against the share's 6,243 comes from branch scope. The hourly stats count default-branch (merged) changes. The share's numerator comes from the global summary, and the live summary predates branch scopes (no branch_scope), so it counts every branch. I recounted the copied index: 5,600 default-branch vs 6,251 all-branch personal changes, and the global DB has 6,243 all-branch, which matches. The page now uses one population, every identity including agents, for the heatmap, the wheel and the totals (all time 7,175, all time · tangled 5,819, github 1,356). The period total equals the wheel's centre (1,273 at 30d; a new windows.all_90 backs 90d). The share line reads "1,033 of 87,400 Tangled changes on any branch · as of …". It names its scope, and it will say "default branches" once the global crawl writes a scoped summary. The AGENTS KPI and the streak are gone, and the index's 628 is now "agent identities".

Verified: cargo fmt/test (new tests cover the migration, description storage and blank handling, override parsing, redacted folding, and share scope), clippy with --features aws, node --check, py_compile. I rendered the copied live index with render.sh (private target dir) and took screenshots at dark, light and 420 px. For the now card I tested the live endpoint (8 rows, links only to permadeath.com/didbot) and a bad host and an HTTP 404 (both hidden), plus an empty list (hidden). A local fixture with a github.com repo, an unlisted Tangled repo and an <img onerror> text rendered no GitHub or unlisted repo and escaped the text. The CSS checks out in getComputedStyle at 1280 and 420. One snag: headless Chrome with --virtual-time-budget now stalls on this page because permadeath.games/lexicons reaches the repo list and that host never answers its favicon request. --timeout works.

Before (dark): before dark

After (dark, light): after dark after light

420 px, before and after: before 420 after 420

Repositories, and the now card on a fixture with a GitHub link (not rendered): repositories fixture

🤖 Generated with Claude Code

This pull request has no versions submitted yet.