Tasks

🟒 IN FLIGHT

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
βœ…Header on the phone: one row, "Ask B" (David 08:10)CharlesCharles 875cae2b: one 55px row down to 360px (was 101px, two rows; David's phone is ~395 CSS px and the old header needed 401), Ask B as a 38px solid white button with Forest text (7.37:1 text and edge, both modes), tighter gaps below 400px; "Ask B" in header, dialog, gate checks and test; tests/site 79 passed; screenshots agents/charles/phone-header-after-*.png; live at the next site build875cae2
βœ…B mark: clean B + brain-coloured dot (David 08:05)DieterDieter 0c7cfa56: one even white stroke, nothing filled; Rose #FC899D dot (Wine's hue lifted to pass 3:1 on Forest: 3.28:1 both modes; Wine itself is 1.54:1, so no darker pink could sit on the green) in theme.md Mark section + token tables; .mk circle on --rose; tests/site 36 passed; preview agents/dieter/preview.html sent to David Β· Left: fallback mark in site/render/page.py 51-55, mockup mark, build_treeline.py Sun rows (would restore the old row if rerun); live after the next site build0c7cfa5
βœ…Domains b-brain.uk + bbrain.uk live (David bought both 08:00)all four names (b-brain.uk, www, bbrain.uk, www) answer 200 at 08:12 from Cloudflare IPs; David's phone showed bbrain.uk at 08:05; the routes push 214cec2e attached them but coincided with Cloudflare error 1042 on workers.dev (08:04-08:06); reverted 21f7de1d, workers.dev back 08:06, custom domains stayed attached; SILVER's own resolver lagged (curl 000) Β· Left: connector SITE_DEFAULT (mcp/bb_public.py), tests/mcp/test_public.py, docs/CLAUDE_PROJECT_INSTRUCTIONS.md and HANDOVER to say b-brain.uk (after Margaret); Cloudflare Access on the new names if David wants the site private214cec2, 21f7de1
🟒Stage-25 test debtMargaretSonnet · since 07:44 · 30 failed / 564 passed at 07:45; fixes cascade-independent tests, diagnoses signals/facts ones (docs/08 figures are MVP-era)
βœ…Author loop: output-sized slicesEdsgertools/author_loop.py SLICE_MAX table (call 1/2/6, email 3/4/10, document 1/2/5, ticket 4/6/12, news 5/6/12 for full/standard/short) + per-slice reply-length log; found: the 67 missing were 65 from short-call slices of 15 (0 to 12 returned, 2 replies with unparseable JSON) and 2 from one standard slice, not a mid-JSON cut; applies at the next launch
βœ…Writer gate: dashes normalised at ingestKenKen 7d262e15 (50 + 52 tests); Bernie stopped the old-gate loop at 03:43 (926 texts safe), re-ingested the saved replies with the new gate (36 recovered, 72 real faults: partial dates, invented names, ungrounded figures), relaunched the watchdog 03:48 (pid 22340) with 1,941 texts to build; keepawake pid 262847d262e1
🟒STAGE 25 cascade (Phase C from 07:33, watchdog pid 33916)entity store 3,607 (2,055 files written); ai_stage --stage all --parallel 3 --max-rounds 4: object_read 2,175 outstanding in 945 slices; then the other stages, tree, site, push; Bernie watching
βœ…STAGE 25 writer run (fifth relaunch 05:53, finished 07:31)2,890 of 2,891 texts accepted (1,266 -> 1 remaining in 5,898 s; tokens in 3.76M out 2.80M); residual we_thr_061_0002 (writer invented 'Gustav Γ…'); pushed 9a14a53b Β· was: – document rules (Ken 315f6f6a: section/clause numbers are not figures, self-defined Title-Case terms are not names, cloud providers as infrastructure; bd32b553: durations with units ungrounded in every kind; 26faf0ad: allowed names masked before every rule); re-ingest recovers ~72 saved replies; remaining refusals are writer faults (invented names, firms, figures)26faf0a, 315f6f6, 9a14a53, bd32b55
βœ…STAGE 25 writer run (fourth relaunch 05:14)final gate: Ken 99e7320f (transcript-only spoken partial dates, small durations with units, qa/allowed_names.txt for institutions and places) + 735312bb (MM:SS offsets normalised); re-ingest recovered 12 more; 1,360 texts accepted, 1,543 to write; remaining refusals are inventions (names, firms, figures). Gate gap for the morning: "24%" before punctuation escapes the figure rule735312b, 99e7320
βœ…STAGE 25 writer run (third relaunch 04:46)EdsgerEdsger 87e33504: slices sized by expected output (SLICE_MAX; the 15-call short slices were returning 0-15 of their calls, 67 missing refusals); 1,259 texts accepted, 1,644 to write, residuals now real faults87e3350
βœ…STAGE 25 writer run (relaunched again 04:19)after Ken's four gate relaxations (dash normalisation 7d262e15, full-month dates + meeting tools c2592c4d, short-call floor 120 2dafb843) Bernie stopped the old-gate loop twice (03:43, 04:19), re-ingested saved replies (36 + 28 recovered), and relaunched: 1,110 texts accepted, 1,793 to write; residual refusals are now real faults (invented names/figures, shape) – the stage-25 run was refusing whole 4,000-word transcripts for spoken dashes (dash 574 of the last 145 refused calls) plus false positives ("Monday 11 Aug 2025" not canonical; "Twenty minutes" caught by the banned-vendor list); Ken normalises dashes before the rules, accepts weekday + short-month dates, scopes the Twenty match, and adds tools/reingest_replies.py so Bernie re-ingests the saved replies in the watchdog's next B-E window instead of re-authoring them2dafb84, 7d262e1, c2592c4
🟒STAGE 25 IN PROGRESS (Bernie, 02:57)the S1-S10 gate is met on the MVP six (gate-checked), so per David's brief the move to 25% started: sim/run.py --stage 25 (75 orgs, 355 people, T-0 CRM ARR 1,359,650; MVP six byte-identical), raw re-exported, DuckDB reloaded, entity store 3,607; committed 862559b3; the watchdog relaunched and is writing the 2,055 new texts (2,891 candidates, 836 MVP skipped by hash), then every stage, tree and site, pushing as it goes. Hedy is making tests/build stage-agnostic (11 tests assumed MVP literals)862559b
⬜ "4.12" demo figure – the incident release number is written "four-twelve" in the release-notes text because the writer gate had no 4.12 in its allowed figures; fix at the source: the sim's writer events must carry the release number as an allowed figure (Grace's emitter), then reopen that document; Florence's incident pack now carries 16:05 and 09:30⬜ "4.12" demo figure – the incident release number is written "four-twelve" in the release-notes text because the writer gate had no 4.12 in its allowed figures; fix at the source: the sim's writer events must carry the release number as an allowed figure (Grace's emitter), then reopen that document; Florence's incident pack now carries 16:05 and 09:30
βœ…Phone chat: public MCP connector for a claude.ai Project (David 01:05)Radiamcp/bb_public.py (wrapper; Streamable HTTP, OAuth 2.1 + DCR + PKCE, passphrase page, signed stateless tokens, rate limits, one log line per tool call, absolute live-site urls) + mcp/bb_auth.py, tools/tunnel.ps1, docs/14, docs/CLAUDE_PROJECT_INSTRUCTIONS.md Β· OAuth not Cloudflare Access (claude.ai cannot send service-token headers) Β· tests/mcp/test_public.py 8 passed; e2e registerβ†’passphraseβ†’tokenβ†’tools/listβ†’search+facts on a real process Β· 38ae4c8 Β· cloudflared not installed (David) Β· ⚠ secrets/ NOT git-ignored: Bernie add secrets/ + !secrets/.example Β· REPORT in final message (file write refused)38ae4c8
βœ…Platform usage dashboard over all customers (S29, David 00:57)Hansusage_dashboard renderer in site/render/usage.py: customer chips, five activity tiles, ranked customers (questions per active user / active against licensed), by-customer line, selection lines with summed allowances, stat row; site/assets/js/bviz.js cross-filters every part, state in #bviz=…, page reads unfiltered without JS Β· tests/site 78 passed (node parity: JS redraw == Python HTML) Β· bcb2389 Β· NEEDS Tim: block + BLOCK_KINDS line (agents/hans/REPORT.md); Massimo: add usage_dashboard to NOCLAMPbcb2389
βœ…BVIZ charts like wz-intel (S19, David 00:05/00:07)Hanssite/render/bviz.py (line with left/right axis chips, columns, barlist, stat; title, Updated stamp, caption on every chart; Treeline tokens only) Β· chart + usage blocks drawn by it, as names unchanged Β· tests/site/test_bviz.py 16 passed Β· check_site S5 PASS, S11 PASS Β· de2673e Β· look at e/organisation/org_002.html#usage #arr-journey, p/platform-usage Β· agents/hans/REPORT.mdde2673e
βœ…Dash gate + reopen toolKenqa/gate.py dash rule (em dash + spaced en dash, verbatim event titles exempt), tools/reopen_text.py, pytest tests/author_loop qa 37 passed + tests/tools/test_reopen_text.py 5 passed, --dry-run lists the 4 tickets Β· tkt_002_0028 also has em dashes Β· not run on real data Β· agents/ken/REPORT.md

Β· βœ… speech relaxations for call transcript turns only (partial dates, small number + time/quantity word) + qa/allowed_names.txt masked for every kind; dry-run run 20261011-044643: 5 of 38 saved call replies pass (shape 13 = MM:SS offsets, name 13 invented people/firms, figure 9, date_format 4), 57 passed Β· βœ… MM:SS offsets normalised to HH:MM:SS (in qa_note); reingest dry-run of 20261011-044643: 13 would pass (12 calls + 1 document), 58 passed Β· KNOWN GATE GAP (morning): the figure rule never sees "24%" before punctuation (NUM needs a word boundary after "%"), so percent figures escape grounding; fixing it newly refuses artefacts, left alone mid-run Β· βœ… allowed_names.txt now masked before banned, date, date_format, figure and name rules (UK Data Protection Act 2018, ISO 9001/27001, SOC 2, PCI DSS, Solvency II, IFRS 17 added), 59 passed Β· βœ… document gate: structural refs (section/clause/schedule/step/phase/version/item/page/week/TLS 1.2/AES-256, numbered headings) not figures; self-defined terms, headings, Annex B, ALL-CAPS legal text not names; AWS/Azure/Amazon Web Services/Google Cloud/Cloudflare pass as infrastructure; dry-run 20261011-051423: 41 of 124 document replies pass (was 10), 64 tests Β· residual figure cluster = ungrounded contract terms (90 days notice, 24 hours, 14 days, 12 months) needing facts Β· βœ… durations (number <= 365 + days/hours/weeks/months/years/business or working days, possessives) pass ungrounded in every kind; dry-run 20261011-051423: 72 of 142 saved replies pass (documents 71 of 130, was 41), 65 tests

Β· βœ… 11 Oct urgent: gate NORMALISES dashes (qa_note), weekday+short month canonical, "Twenty" banned only as the CRM; tools/reingest_replies.py; 36 of the 145 refused calls pass on saved replies (108 had a reply), tests/author_loop qa 50 passed Β· βœ… 11 Oct relax: "1 June 2024" canonical, Zoom/Teams/Meet/Outlook allowed as tools (Zoom as a company still banned), shared prompt dates line updated; dry-run of run 20261011-034831: 6 of 81 saved call replies pass (rest length 26, figure 26, name 21, date_format 13) Β· βœ… short-call floor 250 -> 120 words (ceiling and other bands unchanged), call.md hard limits updated, 52 passed

TaskWhoDetailCommits
🟒Site = page types filled from the dataset (David 23:05)TimTim (resumed): templates per entity type + build/page_resolver.py, per-entity page files removed · Massimo: build_site iterates the resolver · decision in docs/13 §10 · since 23:10
🟒NIGHT RUNNER (detached watchdog)BernieBernie launched 10 Oct 22:44, pid 3732 (data/brain/derived/_runs/night.pid, log night.log) Β· waits for the two live runs, then cycles writer run β†’ entity store β†’ ai_stage --stage all β†’ tree + site β†’ commit/push; sleeps 30 min on a limit and retries; stop with the file night.stop Β· Dennis 7fc98ff, 43 tests7fc98ff
βœ…Overnight runnerDennistools/night_runner.py (464 lines) + .ps1 launcher, tests/tools 43 passed, --dry-run prints the plan, live-run detection sees both running loops (image is python3.13.exe) Β· not launched Β· agents/dennis/REPORT.md Β· update: Phase E adds site/out, check_site exit 1 = log and continue, tests 52 passed
βœ…Object reads and people (wave 3)Karen5 sample records (doc_rollup:org_003, 2 person, 2 staff; 0 refusals), tests 14 passed Β· object reads await present text (0 of 848) Β· 67cc183 e8c577b de5e6b2 1db44da Β· REPORT in final message (report file write refused) Β· Karen 11 Oct: document reads quote every service-term figure (99.9% draft gap, docs/08 Q5); object_read_document-v2 per-kind version re-opens only documents (dry-run: object_read 848 subjects, to build 133 = documents; calls 0) Β· tests 14 passed Β· 9b255641db44da, 67cc183, de5e6b2, e8c577b
βœ…AI stage runner (wave 3)Barbaratests 60 passed (runner 13, gate 20, demo check 27), demo check rows 198 (signals layer: 89 checks, 7 differ, listed in REPORT) Β· 44f40ea, aef53d1, a0c218b Β· report returned to Bernie (agents/barbara/REPORT.md write refused) Β· follow-up: slices grouped by prompt file, run.log LF, tree and partial_ok stages exempt from the ordering gate, tests 63 passed Β· expectations aligned to the simulation (signals layer 86 checks, 0 differ) Β· gate allows years written in the pack text (tests 65 passed); 2 residual object reads re-authored, 398/398 Β· --stage all now runs every stage and prints a summary line each (tests 67 passed) Β· gate: residuals of a stalled upstream count as absent, stamp.missing_upstream Β· deterministic upstream current-on-disk no longer blocks; mass re-open guard exempts upstream-driven cascades (tests 70 passed)44f40ea, a0c218b, aef53d1
βœ…Site tree (wave 3)Tim1061 pages (5064 blocks, 0 broken lineage paths), lineage for 6 orgs + company + portfolio, tests 12 passed 1 skipped, rerun 0 files changed Β· 89fb313, e27b683 Β· agents/tim/REPORT.md Β· βœ… 23:40 templates refactor (David 23:05): 12 templates + build/page_resolver.py, 5 binding kinds, entity pages no longer stored (tree 1,080 -> 76 files), resolver output identical to the old pages for all 1,061, key_facts delta_kind, tests 15 passed 1 skipped Β· da6dad9 Β· βœ… gate items: pages resolve against the published records (S6 every made_from a node: 9454 candidates, 0 failing), hero org_name + summary, search rows for the 6 org documents pages (search index 0 failing) Β· d69cd51 Β· βœ… S20 [prose 2 \companion 1] rows 9d394b7 Β· βœ… S23 System > Tasks from TASKS.md 5cb19cd Β· βœ… S21 organisation template (sources strip, title-line hero, [assessment 2 \key facts 1], [next step 2 \profile 1], no Quick facts) 7c506e1 Β· βœ… S22 Summary in the approved layout, row on every block, 1.5 spans, every row full and checked, tests 16 passed 1 skipped 2505ccf Β· βœ… S21 L8b stack [assessment 2 \Key facts over Profile 1] + [Next step 2 \Open tickets 1] 69e35d5 Β· βœ… lineage org_id / subject_id / entity_type + belongs_to edges for S24 (data edges unchanged, 0 broken) Β· βœ… S29 usage_dashboard block on Platform usage (4 customers) 69e35d5 Β· βœ… Recent calls = last five working days, lineage works_on edges (staff to account) 89c5184b2505ccf, 5cb19cd, 69e35d5, 7c506e1, 89c5184, 89fb313, 9d394b7, d69cd51, da6dad9, e27b683
βœ…Signals and org stages (wave 3)Florencesignals 82/89 docs/08 values (7 differ: 3 data, 3 text-only, 1 row key), tests 116 passed Β· fcb9c42, 373df06 Β· REPORT in final message (file write refused) Β· Florence 11 Oct: incident pack now carries the 10 ticket trails (timestamped events and comments), the reads of threads tied to its tickets, and every read's excerpts (11:40, 16:05, 09:30 present); prompt asks for release, status page, fix and backfill times Β· d6cace60 Β· version kept portfolio-v3 so only the incident re-opens (a bump trips the mass re-open guard on all 8 blocks) Β· "4.12" is not in any source: the release notes say "four-twelve", so that miss stays until the writer brief is fixed373df06, fcb9c42
βœ…Site renderer core (wave 4)Massimo1,062 pages from build.page_resolver, second build 0 files changed, tests 48 passed, serve.py /api/search 200, site/out 1,181 files committed (1726f3b); check_site 23 checks, 17 pass, 6 fail on other owners (ask.js localhost URL, S11 colour in docmap/lineage/ask CSS, 5 org-documents search rows, 38 object_read ids missing from lineage/portfolio, 4 em dashes in ticket text, 4 docs/08 figures absent from the tree) Β· agents/massimo/REPORT.md Β· βœ… 01:30 S13-S16, S18, S20-S22, S25-S27, L1-L25 layout panel, L8b stacks, one title per block: 3e32efb, 1640be2, 1b77df7, c81e77e, 36319ea, site/out 38f75b7 (1,196 files); gate 27 checks, 3 fail outside the renderer (S6: 178 object_read ids not yet in lineage, tree rebuild due; em dash in call_001_018 text; 3 docs/08 figures absent upstream)1640be2, 1726f3b, 1b77df7, 36319ea, 38f75b7, 3e32efb, c81e77e
βœ…Site visual blocks (wave 4)EdwardS3 S4 S5 S6 blocks + the one picture, tests 21 passed (tests/site 42 passed), commit 3dd472f; seen at site/out/e/organisation/org_002.html #key-facts #usage #doc-map #lineage Β· REPORT in final message (REPORT.md write refused) Β· βœ… S11 fix 59958dd: check_site S11 PASS 10 candidates 0 failing; S3 S4 S5 S6 PASS Β· βœ… S24 evidence trail on wz-intel shape d1c1f12 (org_002 reading: "Brackwell Freight Ltd's pages are written from 5 organisation-level AI texts ... 217 AI summaries of 233 raw things ... 13 people (6 with an AI write-up), shown on 17 pages") Β· βœ… S3 folder-bubble map 87fc3e6 (org_002-documents: 6 bubbles, 28 docs, hover card, Full screen); tests 24 passed Β· βœ… S24 on Tim's keys 6523706 (belongs_to = membership, one dashed line per group; org_002: 217 AI summaries of 225 raw things and 6 people) Β· βœ… works_on as membership bf2b502 (org_002: 6 people, 7 staff)3dd472f, 59958dd, 87fc3e6, bf2b502, d1c1f12
βœ…Logos, portraits, search (wave 4)Susanlogos+portraits+marks deterministic (Treeline chart palette), index 1,045 rows / 21 types / 555 KB, BM25 Python+JS parity (node-checked), 16 tests passed Β· agents/susan/REPORT.md
βœ…S17 cartoon avatars and emblem logosSusan55 cartoon avatars (hash of id: shape, skin, hair, eyes, glasses, facial hair, Treeline top; 30 MVP people give 20+ distinct), 6 emblem logos by industry (freight, shield, coin, sunrise, cross, people), 19 tests passed, site rebuilt Β· agents/susan/REPORT.md
βœ…S27 grouped searchSusansearch(grouped=True, per_type) and BBSearch.grouped(idx,{query,per_type}) return top hits per type in fixed order (organisation, person, employee, call, email_thread, ticket, document, news, page) with labels; 22 tests passed (Python and node parity) Β· 41d5f4141d5f41
βœ…Embeddings: hybrid searchSusanBAAI/bge-small-en-v1.5 (384 dims, fastembed ONNX CPU) named only in search/EMBED_MODEL; 1,803 rows embedded (1,625 in 794 s on a loaded laptop), vectors.npy 2.77 MB committed; search(mode=hybrid\keyword\semantic) 0.6 BM25 + 0.4 cosine, self-similarity 1.000000, 31 tests passed Β· 1e2c8b01e2c8b0
βœ…MCP server and Ask Brain (wave 4)Vint5 tools, selftest ok (320250 / 238500 / 233500), tests 37 passed Β· 8273b96 Β· report returned to Bernie (agents/vint/REPORT.md write refused); gate fixes 79ce2d2: ask.js has no hard-coded host (data-api, same origin first), hover uses --sea, static-host check PASS, S11 down by one79ce2d2, 8273b96
βœ…Author loop per-slice checkpointingEdsgerSonnet Β· tools/author_loop.py ingests and saves state as each slice completes (as_completed), progress line every 10 slices; 19 tests pass in tests/author_loop (3 new); applies from the next invocation, live run 20261010-205444 untouched
βœ…Raw exports (wave 2)Hedy32 files, 12,429 rows, tests 74 passed, re-run 0 files changed Β· 73906d5, 03e9642 Β· agents/hedy/REPORT.md Β· Hedy 11 Oct: tests/build made stage-agnostic (traps checked by kind over every traps.jsonl row, counts recounted from the sim/clean tables, MVP figures only at stage 0); tests/build 89 passed, 1 skipped, 2 xfailed (arr_monthly and reconciliation: pro-rated invoiced ARR not reproducible from raw, contract Q4, needs the sim or Edwin's facts) Β· other folders still failing at stage 25: tests/mcp (5), tests/sim test_stage25_shape, tests/site test_six_mvp_logos_are_distinct, tests/ai test_subjects03e9642, 73906d5
βœ…DuckDB load (wave 2)Edwinfacts = truth (140/5/2 rows), tests 10 passed Β· agents/edwin/REPORT.md
βœ…Entity store (wave 2)Rosalind1010 entities, 11 types, tests 7 passed (suite 150) Β· 3d309ab Β· REPORT saved by Bernie 86f5bd83d309ab, 86f5bd8
βœ…WAVE 2 INTEGRATIONBerniechain export β†’ load β†’ store: 0 files changed / loader ok / 1010 then 0 files changed Β· pytest tests -q 150 passed Β· porcelain data/raw + data/brain empty Β· org_002 record carries refs over 12 groups and a 4-row raw lineage. Two contract notes for wave 3: summary is a never-export name in raw but a required AI-record field (ai subtree exempt); order-form refs are non-entity groups
βœ…Wave 3 + 4 contracts and briefsKatherineOpus Β· b997685 Β· 256 + 183 lines, 8 briefs; Bernie answered 12 + 9 open questions (Β§13 / Β§9): tree build deterministic, news reads + staff insights Sonnet, incident = portfolio block, gate accepts "Tue 1 Dec 2026", Ask Brain = search + hand-off, keyword search, BVIZ outside the gate Β· delivered docs/12-wave3-contract.md (AI stages: one record shape with made_from lineage, generic build/ai_stage.py runner with per-record checkpointing, demo-question test) + docs/13-wave4-contract.md (site renderer from the tree, Treeline, S1-S10, logos/portraits, search, MCP + Ask Brain) + briefsb997685
🟒Wave 1 writer run, MVP sixauthor loop started 20:54 (first start 20:30 stopped for voice cards) · round 1 done 22:21: accepted 398 / 848 in 87 min, 3.08M tokens in / 2.61M out, refusals 450 (figure 401, name 57, date_format 15, banned 7, length 7, missing 6, shape 5, date 5) · round 2: 450 outstanding in 168 slices, running · tab "wave1 author loop"
βœ…Object reads on the round-1 textBernie396 / 398 in 38 min, 4 rounds, 1.58M tokens in / 0.78M out, refusals by rule: evidence 45 (then 4 after the prompt tightening), shape 14, date_format 6, figure 6 Β· 2 residuals are gate false positives (year / date present in the text but not harvested): Barbara fixing the extractor, then they re-author
βœ…Voice cards for 22 MVP peopleVirginiaSonnet Β· 8f634bf Β· 22 files, 11 lines each; Bernie verified: check-inputs 0 errors, voice_card() found 22/22, 0 em dashes, LF in the index8f634bf
βœ…Wave 2 contract + briefsNielsOpus Β· 91be1e5 Β· docs/11-wave2-contract.md (335 lines; ARR rules reproduce all 140 sim ARR rows) + briefs for Hedy / Edwin / Rosalind; Bernie answered the 10 open questions in Β§10 (keep the CRM-amount trap; news = 11th entity; conftest not __init__; moved-contact realism, pro-rated ARR and text-into-raw deferred to backlog)91be1e5
βœ…Theme: TreelineJosefOpus Β· v1 61f4217, v2 on David's five anchors 6422f48 (#086313 Forest, #4BB859 Leaf, #253463 Navy, #634B08 Bark, #632335 Wine + derived Sky/Sun/Chalk); Bernie verified: 84 gated contrast checks pass, lowest text 4.64:1, script "Unchanged" on rerun, mockup 30 checks / 1 pre-existing differ; swatch page + mockup sent to David 21:15 Β· βœ… David 21:27: "The theme looks good" Β· S22 Layout rules L1–L30 added to world/brand/theme.md β€Ί Layout (Josef, 11 Oct): two keys per block (row, span 1/1.5/2/3; rows sum to 3), 3/2/1 columns at 1100/700px, card anatomy, stamps, density, freshness strip, S21 title line, not-allowed list; drawn as a Summary panel in colours-v3-treeline.html61f4217, 6422f48
βœ…pytest.iniBerniebe381ab Β· pytest never recurses into a dir named build (default norecursedirs), so pytest tests silently skipped tests/build (59 collected, not 150); fixed with testpaths + norecursedirs override; full suite now 150 passed twice in a row (one earlier 1-failed run was a test being written concurrently)be381ab
βœ…Simulation engineGraceagents/grace/REPORT.md; 25 tests pass, byte-identical reruns, Q3 figures exact
βœ…Demo script and storylinesAdadocs/08-demo-script.md, world/storylines.md (13 storylines, 148 beats, check 0 problems)
βœ…wz-intel knowledge extractionAlanOpus Β· 12 pattern files in docs/reference/ (start at index.md); report and wz-intel bug list in Alan's final message
βœ…World bible (slice)Marieworld/bible.md, price book, 6 orgs, 95 people (65 staff), 30 voice cards, grounding v1, 6 company profiles; check-inputs 0/0, T-0 CRM ARR 320,250
βœ…Author loop and QA gateLinus28 tests pass; 17/17 accepted via subagents; CLI signed out (David: claude β†’ /login)
βœ…Site mockupFridasite/mockup/index.html (Summary), customer-brackwell.html; built by site/mockup/build_mockup.py from data/sim, 30 figure checks against the demo script (1 differs: first Brackwell invoice paid 7 days late)
Staticmade from

πŸ”΄ NEEDS DAVID

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
βœ…claude CLI signed in on SILVER(10 Oct 20:5x) – claude auth status loggedIn true; headless smoke call OK; the writer run uses it
πŸ”΄Cloudflare Pages (Phase 2, started 23:25)DavidDavid is creating the Pages project (bb-brain, Git-connected to davidconsettbyrne/bb-brain, build output site/out, no build command) behind Cloudflare Access (one-time PIN, email allow list); Bernie needs the pages.dev URL to record it and set the site's own link. Massimo commits site/out/** so the first deploy has content
πŸ”΄Claude Project link + mark (S9)the site's Claude mark needs the Claude Project URL (site/site_config.json) and, if wanted, the official mark asset; a placeholder glyph + URL ship until then
πŸ”΄In-page Ask Brain chat?PhasePhase 1 Ask Brain searches the brain and hands the question to Claude Desktop / the Project (subscription only). A true in-page chat needs an API key: your decision
πŸ”΄Semantic search package?search is keyword (BM25) until an embedding package is installed (a download) or Cortex Search in Phase 3: your call
βœ…mcp package not neededthe standard-library server passes the full protocol tests (Vint, Radia); closed by Bernie 11 Oct
βœ…gh signed into both accounts(10 Oct evening) – tokens stored per repo path (davidwazoku for wz-intel/wz-comms/wz-assistant, davidconsettbyrne for bb-brain), gh active account davidconsettbyrne; both remotes answer ls-remote
βœ…wz-intel pulled to latest(10 Oct evening) – fast-forward 4874dac8 β†’ ef02deb1, 2,338 commits, no tracked file modified before or after; read-only from here4874dac, ef02deb
Staticmade from

πŸ“ NEXT WAVE (ready as soon as `/login` is done)

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
⬜ MORNING: stage-25 test debt – tests still wired to MVP data after the stage-25 switch: tests/mcp (5), tests/sim/test_stage25.py::test_stage25_shape, tests/site/test_assets.py::test_six_mvp_logos_are_distinct, tests/ai/test_org_stages.py::test_subjects; make them read the manifest/stage like Hedy did for tests/build (d2386ea3); run python -m pytest tests -q until green at stage 25⬜ MORNING: stage-25 test debt – tests still wired to MVP data after the stage-25 switch: tests/mcp (5), tests/sim/test_stage25.py::test_stage25_shape, tests/site/test_assets.py::test_six_mvp_logos_are_distinct, tests/ai/test_org_stages.py::test_subjects; make them read the manifest/stage like Hedy did for tests/build (d2386ea3); run python -m pytest tests -q until green at stage 25d2386ea
⬜ MORNING: pro-rated invoices (contract Q4, now real) – at stage 25 org_009 2026-06 invoiced ARR is 54,405 in DuckDB against 58,000 in the sim truth because raw invoice lines carry no annual value for co-termed pro-rata lines; the sim export must state annual_value on invoice lines (Grace's engine + Hedy's exporter + Edwin's facts SQL); two xfails mark it in tests/build until then. NOT mid-run: it changes writer events⬜ MORNING: pro-rated invoices (contract Q4, now real) – at stage 25 org_009 2026-06 invoiced ARR is 54,405 in DuckDB against 58,000 in the sim truth because raw invoice lines carry no annual value for co-termed pro-rata lines; the sim export must state annual_value on invoice lines (Grace's engine + Hedy's exporter + Edwin's facts SQL); two xfails mark it in tests/build until then. NOT mid-run: it changes writer events
⬜ Wave 1 – writer run, MVP six – python tools/author_loop.py --types call,email_thread,ticket,document,news --parallel 4 (plain python/py on SILVER, not py -3.13); measure tokens and seconds per artefact into docs/02-costs.md; commit data/text/⬜ Wave 1 – writer run, MVP six – python tools/author_loop.py --types call,email_thread,ticket,document,news --parallel 4 (plain python/py on SILVER, not py -3.13); measure tokens and seconds per artefact into docs/02-costs.md; commit data/text/
⬜ Wave 2 – exporter + DuckDB + entity store – data/raw/ system-shaped exports (sim/OUTPUTS.md never-export list), load, entity store per docs/reference/entities-and-facts.md⬜ Wave 2 – exporter + DuckDB + entity store – data/raw/ system-shaped exports (sim/OUTPUTS.md never-export list), load, entity store per docs/reference/entities-and-facts.md
⬜ Wave 3 – AI stages – docs/06-brain-build.md Β§3 + docs/reference/ai-records-and-prompts.md; same emit β†’ author β†’ gate β†’ zero loop⬜ Wave 3 – AI stages – docs/06-brain-build.md Β§3 + docs/reference/ai-records-and-prompts.md; same emit β†’ author β†’ gate β†’ zero loop
⬜ Wave 4 – site renderer – one Python renderer from the tree, Treeline theme (world/brand/theme.md), every SITE REQUIREMENT below; generated logos + portraits; local MCP server; Claude Project⬜ Wave 4 – site renderer – one Python renderer from the tree, Treeline theme (world/brand/theme.md), every SITE REQUIREMENT below; generated logos + portraits; local MCP server; Claude Project
Staticmade from

🎯 SITE REQUIREMENTS (David's words, 10 Oct 2026, on Frida's mockup – each one is a task for the production renderer in `site/`, not a mockup fix)

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
βœ…S1 Ask Brain"Ask the Brain should just say Ask Brain" β†’ the button and nav item read Ask Brain
βœ…S2 Portraits + logos on calls"The weekly calls should have the person image and company image like on WZ-Intel" β†’ every call row carries a person portrait and a company logo; same on the customer page's contacts and activity rows and on People pages. Fictional orgs need generated logos (deterministic SVG mark from name + industry, brand chart palette) and generated portraits (deterministic initials tile at minimum; illustrated avatars later)
βœ…S3 Document map like wz-intel"Document image should be the same as wz-intel" β†’ the wz-intel bubble map (docs/reference/documents.md Β§document map, site-pages.md Β§customer template), not one dot per document
βœ…S4 Compact key facts"Key facts should be much more compact" β†’ a dense strip (label Β· value Β· CRM value Β· delta), not tiles
βœ…S5 Platform usage block"Platform usage is missing" β†’ present and prominent: active users, questions, connectors, admins, data volume over time; headroom against the tier
βœ…S6 Lineage explorer"Lineage view is crucial" β†’ which source records fed which AI record fed which page block (wz-intel's lineage lane: docs/reference/system-pages.md, entities-and-facts.md Β§lineage); a required block on every customer page AND a required page in System
βœ…S7 Logo-only header"The logo on the top left should just be a logo" β†’ the mark alone, no "B-Brain" wordmark
βœ…S8 Dark/light selector"You should be able to select dark/light" β†’ follows the device by default; clicking back to the device's mode releases the override (wz-intel's behaviour)
βœ…S9 Claude mark + Ask Brain in the header"There should be a logo for Claude and an Ask Brain" β†’ a Claude mark that opens the Claude Project, plus the Ask Brain button
βœ…S10 Help & Support"and Help Support function" β†’ a Help & Support entry in the header (wz-intel's help drawer: how to use the site, how to ask, what the data covers, as-of date, who to contact)
βœ…S11 Links: plain, one colour"on the pages the links should not be in bold and probably not underlined either, simply use normal font and pick a color that always means link" (David 23:15) β†’ links in normal weight, no underline (underline on hover/focus only, for accessibility), one link colour everywhere = Sky from Treeline, in both modes; nothing else on the page uses that colour
βœ…S12 Full-width pages"do not constrain the width of a page. Make it the width of the window" (David 23:17) β†’ no max-width on the page or its grid; content fills the viewport with a 16px side gutter; grids add columns as the window widens; prose blocks may cap their own line length for readability but the page never does
βœ…S13 Nav starts with Summary"ask brain shouldn't appear to the left of summary" (David 23:42) β†’ Ask Brain is NOT a nav item; the nav reads Summary, Organisations, ... ; Ask Brain exists only as the button on the right of the header (S1/S9)
βœ…S14 Claude button = the Claude-coloured logo"make the claude button the claude colored logo" (David 23:46) β†’ the header's Claude button shows the Claude sunburst mark in Claude's clay colour (#D97757) on both modes, not the neutral glyph; if David supplies the official asset at site/assets/claude-mark.svg it is used verbatim
πŸ‘€S21 Customer page order and title like wz-intel"You seem to have reorganised customers order and block arrangement, I prefer wz-intel. I also much prefer the line up of the title" (David 00:20, MOD vs Brackwell screenshots) β†’ (1) a data-source strip at the top (AI Β· CRM Β· WEB badges); (2) ONE title line: logo tile, "Name : Customer : Growing" with the status word in colour, the headline ARR figure in large type, then inline chips (Renews dd Mmm yy, the open deal "Commit Β· Β£x/yr", a CRM link); no summary paragraph under the title (the AI summary lives in the assessment block); (3) row: "Summary & AI assessment" (AI FACTS bullet list, AI OPINION prose, a "Made from" chip row: n calls, n email threads, n tickets, n news items, n deals, n people, documents, newest date) spanning two columns, with Profile and Key facts STACKED in the one-column slot on the right; (4) Next step two columns wide; then usage, narrative/ARR, deals/documents, contacts/activity, lineage as now. Key facts is a one-column table (label Β· value), not a full-width band
πŸ‘€S18 (amended 00:52)"on the calls blocks put the logo and person icon on top of each other so there is more space for the text" β†’ logo tile above the portrait tile in one narrow column; text takes the width (Massimo)
βœ…S23 TASKS page LIVE00:50, bb-brain.davidconsettbyrne.workers.dev/p/system/tasks/ HTTP 200; rebuilt from TASKS.md on every build (Tim 9d394b7; site pushed by Bernie's clean-checkout build)9d394b7
πŸ‘€S28 One title per block"Do not need 2 titles for each here, maybe just one title saying calls, then you can see the dates. Maybe note 'upcoming' only on the lower block" (David 00:54) β†’ a section with a single block shows one title (the block's), site-wide, gate-checked; the two Summary call blocks are "Calls" and "Upcoming calls" with the dates as column heads (Massimo)
πŸ‘€S29 Platform usage = all customers, filters, cross-filtering"Platform usage should be for all customers with customer filters, more similar to wz-intel including some kind of grouping of activity that you can cross filter on as well as customers by level of activity" (David 00:57) β†’ the Platform usage page is a BVIZ dashboard over every customer: a customer filter (chips, multi-select), activity-kind groups (questions, active users, connectors, admins, data volume) that cross-filter the charts when clicked, a ranked barlist of customers by activity level (questions per user, active users vs licensed), monthly lines for the selection, headroom per tier; the organisation page keeps its own usage block. Hans (BVIZ cross-filter + page), Tim (an all-customer usage block binding over facts.usage_monthly)
Status (Bernie 11 Oct 07:50): βœ… = python site/check_site.py PASS on the live build (S6 lineage-scope check and 4 demo figures fail only until the stage-25 cascade rebuilds tree and site); πŸ‘€ = built (Massimo c81e77e0/36319ea0, Hans usage dashboard) for David to check against wz-intelStatusStatus (Bernie 11 Oct 07:50): βœ… = python site/check_site.py PASS on the live build (S6 lineage-scope check and 4 demo figures fail only until the stage-25 cascade rebuilds tree and site); πŸ‘€ = built (Massimo c81e77e0/36319ea0, Hans usage dashboard) for David to check against wz-intel36319ea, c81e77e
Rule (David 10 Oct evening): site feedback lives HERE as tasks, not in a separate feedback file. Add new items as S11, S12 … in his wordsRuleRule (David 10 Oct evening): site feedback lives HERE as tasks, not in a separate feedback file. Add new items as S11, S12 … in his words
GATE (David 10 Oct evening): S1–S10 are done on the MVP six BEFORE scaling to stage 25.NoNo stage-25 writer run or world rebuild until every S-item above is βœ… on the production site
⬜ Wave 5 – rehearse the six questions on the MVP site with S1–S10 all βœ…; ONLY THEN writers for the rest of stage 25 (python sim/run.py --stage 25 --out data/sim first) and rebuild⬜ Wave 5 – rehearse the six questions on the MVP site with S1–S10 all βœ…; ONLY THEN writers for the rest of stage 25 (python sim/run.py --stage 25 --out data/sim first) and rebuild
Staticmade from

πŸ‘€ FOR DAVID TO CHECK

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
πŸ‘€Sonnet transcript qualitydata/text/_runs/ sample or agents/linus/REPORT.md; the bar for the writer run
πŸ‘€Decisions recordeddocs 01–06 updated 10 Oct; skim Β§9 of docs/04-synthetic-data.md and docs/06-brain-build.md Β§4 (pages kept and dropped)
Staticmade from

πŸ“‹ BACKLOG (not yet briefed)

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
⬜ Stage-25 people voice cards – 355 people, 65 cards + 22 added for the MVP; the rest write with the fallback card; add cards for the most-mentioned stage-25 people after the run (Virginia's pattern)⬜ Stage-25 people voice cards – 355 people, 65 cards + 22 added for the MVP; the rest write with the fallback card; add cards for the most-mentioned stage-25 people after the run (Virginia's pattern)
⬜ Stages 50/75/100 – world files and storylines for later stages (engine already supports --stage)⬜ Stages 50/75/100 – world files and storylines for later stages (engine already supports --stage)
⬜ Text into raw exports – fold transcripts, email bodies, ticket comments and document bodies into data/raw/ as connector sources (wave 2 Q7), after wave 1 text lands⬜ Text into raw exports – fold transcripts, email bodies, ticket comments and document bodies into data/raw/ as connector sources (wave 2 Q7), after wave 1 text lands
⬜ Sim realism for stage 25 (Grace) – CRM contact id per record + new email for the moved contact (per_0501); pro-rated invoices to carry a stated annual value; check the two booked Brackwell renewal calls (call_002_053 Mon 12 Oct, call_002_054 Tue 13 Oct) are intended⬜ Sim realism for stage 25 (Grace) – CRM contact id per record + new email for the moved contact (per_0501); pro-rated invoices to carry a stated annual value; check the two booked Brackwell renewal calls (call_002_053 Mon 12 Oct, call_002_054 Tue 13 Oct) are intended
⬜ Date shift for derived prose – extend tools/shift_dates.py to data/brain/derived/ records and stamps so a shift does not re-author everything (wave 3 Q6)⬜ Date shift for derived prose – extend tools/shift_dates.py to data/brain/derived/ records and stamps so a shift does not re-author everything (wave 3 Q6)
⬜ Learnings stage – a People β€Ί Learnings AI stage; MVP builds it from staff_insight signals (wave 3 Q10)⬜ Learnings stage – a People β€Ί Learnings AI stage; MVP builds it from staff_insight signals (wave 3 Q10)
⬜ Per-entity page count – ~1,010 page files at MVP, ~30,000 at 100%: revisit before stage 50 (wave 4 Q7)⬜ Per-entity page count – ~1,010 page files at MVP, ~30,000 at 100%: revisit before stage 50 (wave 4 Q7)
⬜ BVIZ – spec-driven visuals on WZVIZ's grammar, Verdigris theme (docs/06-brain-build.md Β§7)⬜ BVIZ – spec-driven visuals on WZVIZ's grammar, Verdigris theme (docs/06-brain-build.md Β§7)
⬜ Branded documents – templates + worked examples, then the standard B-Brain document set as real files in the store (Β§8)⬜ Branded documents – templates + worked examples, then the standard B-Brain document set as real files in the store (Β§8)
⬜ Cloudflare Tunnel – chat from phone/iPad while SILVER is on (Phase 2)⬜ Cloudflare Tunnel – chat from phone/iPad while SILVER is on (Phase 2)
Staticmade from

πŸ“… WHAT HAPPENED

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
10 Oct 2026 (evening) – SILVER set upΒ· gh CLI installed and signed in as davidconsettbyrne (the app's terminal panel cannot complete the device flow; a separate PowerShell window can); bb-brain cloned to C:\Claude\bb-brain, identity set, push proven Β· Side effect found and contained: the login replaced the machine's davidwazoku git credential; git switched to per-path credentials; Wazoku re-login is on David Β· pytest + pyyaml installed; sim tests 40 passed, author-loop tests 15 passed, stage-25 check 0 errors Β· claude CLI shim pointed at a missing version; repointed to 2.1.289; /login still on David Β· build_colours_v2.py hard-coded bb-intel path fixed (7fae723) Β· David confirmed the ten site requirements are the ones he meant (portraits + logos on calls, lineage view, wz-intel-style documents view); moved from site/mockup/FEEDBACK.md (deleted) into SITE REQUIREMENTS S1–S10 above, and made the gate before stage 25 Β· David's standing rule restated in capitals: wz-intel must not be changed; bb-brain is the default project
10 Oct 2026 (late)foundations built Β· Ada: demo script + 17 storylines; Grace: simulation engine with stages; Marie: world to 25% (75 orgs, 355 people); Linus: author loop + QA gate; Frida: site mockup; Alan: 12 wz-intel reference notes Β· Brand: Bedrock + Verdigris; ten site requirements captured (now SITE REQUIREMENTS S1–S10 in this file) Β· Handover written for the move to SILVER; next: the MVP writer run
10 Oct 2026planning Β· wz-intel reviewed read-only; review and questions in docs/05-plan-review.md Β· David's answers recorded in docs 01–04; docs/06-brain-build.md and docs/ORCHESTRATION.md added Β· Local git repo initialised, remote davidconsettbyrne/bb-brain, personal identity set Β· Brand: David chose Bedrock; name settled as B-Brain (Byrne-Bernard); GitHub sign-in done, pushed Β· Pages: Events, People, Documents and System kept; enrichment, Analysis, Innocentive dropped
Staticmade from

βœ… DONE

TASKS.md as saved 2026-10-11 07:14 UTC

TaskWhoDetailCommits
βœ…Stage 25 dataGraceGrace 83a49e1, Marie 019833b, Ada 3f6df93; verified by Bernie (40 tests, byte-identical MVP)019833b, 3f6df93, 83a49e1
βœ…Author loop and QA gateLinusLinus 61e2d0d/499343b; 28 tests; CLI sign-in pending499343b, 61e2d0d
βœ…Site mockupFrida1e0b958
βœ…wz-intel referenceAlanAlan ec4ca36, report with bugs to pass backec4ca36
βœ…World (slice)Marie380bf62
βœ…Simulation engineGraceaed604f
βœ…Demo script and storylinesAda46f3ff9
βœ…Brand decidedBedrockBedrock + Verdigris (Dieter, world/brand/colours-v2.html scheme 5; Monochrome was the first pick); tokens in world/brand/theme.md
βœ…Bedrock colour schemesSaulSaul, world/brand/bedrock-colours.html; ten schemes, all text pairs β‰₯ 4.5:1
βœ…Brand conceptsSaulSaul, world/brand/brand-options.html, eacb5df; David chose Bedrockeacb5df
βœ…GitHubfirst push by David, rest pushed by Bernie
βœ…Plan reviewdocs/05-plan-review.md committed 8a0ff7c8a0ff7c
Staticmade from

B-Brain is a fictional company; every organisation and person here is invented. Built by site/build_site.py from the site tree, data as of Fri 9 Oct 2026. Help & Support

Help & Support

Open as a page

Help & Support

B-Brain is one place to read everything the company knows about its customers: the CRM, calls, emails, support tickets, product usage, invoices, documents, news and HR. Every page is built from those systems and the data is current to Fri 9 Oct 2026.

How to use the site

How to ask

Press Ask Brain in the header. Type a question, or pick one of the examples.

The site itself does not call an AI model; answers in Claude come from the same figures you see here.

What the data covers

DataRecords
Organisations75
People at customers290
B-Brain staff40
Calls784
Email threads1,169
Support tickets449
Documents477
Deals117
Invoices101
Events49
News items56

Data as of Fri 9 Oct 2026. Text marked AI was written by the brain from the records listed in its made-from link; an AI output that cannot cite its evidence is refused and the previous text kept. Where two systems disagree (for example a contract and the CRM), the key facts show both values and mark the difference.

B-Brain is a fictional company: every organisation, person and figure here is invented for this demonstration.

Who to contact

Email support@b-brain.example or talk to your B-Brain account team. Tell us the page address and what looked wrong; a screenshot helps.

Ask Brain

Searching the index in this page. For an answer, use Ask Claude.

    Ask Claude copies your question and opens the B-Brain Claude Project, or paste it into Claude Desktop with the B-Brain tools connected. This page never sends your question to a model.