The shape

The backlog splits cleanly into four shapes: a handful of genuinely-ready agent work, a cluster of Bradley-only decisions, a long tail of correctly-parked dormant/watch items, and several phantom-open tickets whose fixes already shipped. The single biggest hygiene win is correcting status on the four already-done tickets (86baf9mqr migration merged, 86baekpq4/86baebq6r milestones shipped+archived, 86b9qg5zj musk-audit pruned) — these are open only because clickup-close-on-merge wasn't wired when they landed, which is exactly what the live 86bagf0zr rollout fixes. The real bottlenecks are a small set of decisions only Bradley can make: the agent-task-store call (86baebt5b — recommend confirm ClickUp), the 4 learning-system prune (86bafkkfc), the consulting-proposal evidence block (86badej9n), the OneDrive MS-account auth (86b9q0rd0, one 5-min step unblocks fully-built code), and the Caitlin onboarding interview which gates the employee-bootup doc (86bab6vfn). Two eval tickets (86bafwtvp, 86bafa8mw) are ready to close as no-adoption. Net: ~5 status corrections clear the phantom-open noise, two real sequencing constraints (PR6 after social-recon; bootup after Caitlin) hold, and the remaining friction is a short list of taste/business calls plus one auth step — almost no blocked agent work.

How to use this: read the recommendations, then in chat tell me which you're taking (e.g. "close batch + take the recs on the four confirm-and-close decisions; I'll handle OneDrive auth tonight"). I apply the ClickUp writes and dispatch the agent PRs only on your go. PRs still wait for your merge.

✅ Executed (you approved everything)

ClickUp cleared 30 → 22. 9 PRs opened; 2 docs PRs already auto-merged. All deletes reversible (SHAs on tickets).
closed ×8
4 phantom-open + 4 confirm-and-close decisions
Each with a decision/evidence comment. Plus 2 reclassified to parked, 1 dependency wired, 5 surfaced into your update-required inbox.
PR · open
clickup-close-on-merge rollout — biv-app#33, campaign-reports#7, proposals#5, systems#11, workspace#17
Verbatim CI workflow + per-repo CLICKUP_TOKEN secret set. CI-only, no deploy.
PR · open
biv-app PR6 — biv-app#34
Collectors centralized, dead routes 302-redirected, mcShell stripped. Awaits change-approval gate.
PR · open
Consulting credibility block — proposals#6
Parameterized {{CRED_*}} placeholders — you fill/approve the real proof copy at merge. Nothing fabricated ships.
PR · merged
Docs — workspace#16 (task-store role-split + v4.1 Phase-24) · workspace#18 (learning-systems docs)
Auto-merged via the workspace approval automation. homunculus was already disabled at config level — pure doc correction.
cleanup
Branch cleanup — 7 dead branches deleted
node24 was already merged (no PR needed). 3 of the 4 "consulting-copy" branches were already merged too. One genuine call left for you: biv-systems fix/cache-control-shared-assets (PR#10 was closed-not-merged; the _headers revalidate fix DID merge in proposals + campaign-reports, so biv-systems is the lone repo missing it — re-merge?).

Decisions — confirm & close

My recommendation is to close or confirm. A nod from you resolves each.
86bafwtvp planning

Evaluate claude.ai Project tool in Claude Code (v2.1.174+)

DecisionShould BiV adopt the claude.ai Project knowledge-container tool to replace or augment the current wiki + auto-memory + local RAG knowledge layer?
★ My recommendation
Option A — close as evaluated, no adoption. The current local-fs layer (git-tracked wiki + auto-memory + FTS5 RAG) dominates the cloud container on durability, versioning, deterministic query, and trust posture. The container's design (session-bound, untrusted-data treatment, knowledge-budget caps, cache-churn warnings, default claude/ namespace for *agent-written* scratch docs) reveals its actual intent: an ephemeral per-session scratchpad for agents, NOT a canonical knowledge SSoT. It overlaps zero with CLAUDE.md/wiki's role and would only introduce a parallel un-versioned copy. The tool isn't even active in Bradley's CLI today, so there is nothing to wire in.
What only you can weighOne fact only: the tool is session-bound to an attached claude.ai web Project and is not present in the local CLI workflow Bradley runs — so 'augment/replace' would mean deliberately attaching a cloud Project and re-syncing knowledge into it, which is pure added surface with no win over git+RAG. This is an architecture-fit call, not a feature-capability call.
UnblocksClears one of the cluster of 'evaluate new Claude Code platform feature' planning tasks; lets the knowledge-layer investment stay focused on the local wiki/RAG (and informs 86bafkkfc on the learning/audit systems).
3 options
A. Do nothing — close as evaluated, keep the local-fs knowledge layer
+ Zero work. The tool isn't even active in Bradley's CLI environment (it only appears when a claude.ai web Project is attached). The current layer is git-versioned, diffable, lint/verify/reconcile-automated, and queried deterministically via local FTS5 RAG — none of which a session-bound cloud container offers. Container docs are explicitly treated as UNTRUSTED data by the model, the opposite of how CLAUDE.md/wiki are trusted. Knowledge-budget + prompt-cache-churn warnings make it worse for a 188-page corpus.
Forgoes any future cross-surface (web/desktop/mobile claude.ai) knowledge sharing if Bradley ever wants to query BiV context from the claude.ai app rather than the CLI.
B. Augment — mirror a thin slice of BiV context into a claude.ai Project for mobile/web access
+ Lets Bradley pull lightweight BiV context (e.g. team roster, active deals) when using claude.ai on phone/web away from the terminal.
Creates a second, un-versioned, manually-synced copy of knowledge that already lives in git — exactly the parallel-doc / mirror anti-pattern Bradley has repeatedly flagged (no_parallel_docs_for_table_workflows, durability tiering). Drift is guaranteed. Knowledge-budget caps mean it can't hold the full corpus anyway.
C. Replace — migrate the knowledge layer into a claude.ai Project
+ Single hosted container; agent-written docs auto-land in a claude/ namespace.
Strictly worse on every axis that matters to BiV: loses git history/diffs, loses /rag:query FTS5 determinism, loses wiki:lint/verify/reconcile automation, subjects everything to knowledge-budget truncation and prompt-cache churn, and reclassifies trusted SSoT as untrusted data. Non-starter.
86bafa8mw planning

Evaluate Tool(param:value) permission syntax for workspace

DecisionDo we adopt Tool(param:value) permission rules in the workspace settings, and if so for what exactly?
★ My recommendation
Option A (adopt nothing / close as evaluated), optionally plus B's single fable ask-rule if Bradley wants a belt-and-suspenders gate for the one tier he flagged as dangerous. The ticket's premise — that param-targeting would harden Bash/deploy irreversibility and model-tier enforcement — does not survive contact with the actual semantics: Bash(command:...) is invalid by design, deploy is already hooked, and deny/ask on opus is counterproductive. The feature is real but its useful surface in THIS workspace is nearly empty. Don't manufacture rules to justify the ticket.
What only you can weighThree facts collapse this decision: (1) The syntax is deny/ask-ONLY — it cannot be used to AUTHORIZE anything, only to block or prompt. (2) The ticket's flagship example Bash(command:rm*) is invalid: Claude Code ignores command-param matching and warns at startup; Bash already matches args via Bash(rm *), and the destructive/deploy boundary is already hard-enforced by the block-redlines.sh PreToolUse hook + existing git-push deny rules. (3) For model-tier: a DENY on Agent(model:opus) is actively wrong (opus is the legitimate Heavy/Path-C tier), and an ASK on opus/sonnet would stall the unattended background loop on every Heavy dispatch — defeating the loop's purpose. The only target that matches Bradley's actual stated intent is the 'fable' tier, which loop.md L66/L89 already constrains to 'never the first attempt, only after a documented prior failure.' That intent is already enforced in prose by the reap-time promotion logic.
UnblocksNothing is blocked on this. Closing it removes a planning-queue item and records the verified finding (Bash(command:...) is a no-op, deny/ask-only, deploy belongs to the hook) so the same evaluation isn't re-run when the next changelog mentions permissions.
3 options
A. Adopt nothing — close as evaluated/no-op
+ Honest to the research: no high-value target exists that isn't already covered better. Avoids adding a counterproductive deny/ask that fights the loop. Zero risk, zero maintenance. The deploy/irreversibility boundary already lives in block-redlines.sh + git-push denies (the docs themselves recommend hooks over fragile arg-matching).
Leaves the fable tier with only prose enforcement (no hard gate). Closes a ticket Bradley may have hoped would harden something.
B. Add one ask-gate: Agent(model:fable)
+ Matches Bradley's only defensible intent — fable is reserved and should never fire unsupervised on a first attempt. A single line in deny/ask: 'Agent(model:fable)' as an ASK rule forces a confirmation before any fable executor. Cheap, reversible, doesn't touch the opus/sonnet/haiku path.
In a fully unattended background loop an ASK prompt has no one to answer it — it would hang the dispatch rather than gate it gracefully. Only useful when Bradley is at the terminal. The prose constraint (reap-time promotion, 'documented prior failure required') arguably already covers it. Marginal value.
C. Use it for non-command scalar params (Agent(isolation:*), Bash(run_in_background:true))
+ This is the ONE place the syntax does something genuinely new that hooks/Bash-arg-rules don't.
Bradley has no stated need to gate worktree isolation or background-bash. Speculative apparatus for a hypothetical failure mode — violates the 'no speculative planning apparatus' rule. Reject.
86baebt5b planning

Decide agent task-management system + consolidate GSD/ClickUp scatter

DecisionWhat is the canonical agent task store going forward — and how do GSD todos and ClickUp stop being two scattered surfaces? ClickUp costs money and gives Bradley zero direct benefit (he only reads the board), but it is now load-bearing agent infrastructure.
★ My recommendation
(a) Keep ClickUp, but reframe the decision: the WHY ('Bradley gets zero benefit, it costs money') was written when ClickUp looked like a personal board. The live system shows ClickUp is now the agent task domain's backbone — remediate-findings.js routes real agent work there, ops:work/ops:loop drain it, and it's the only durable home for the cross-project backlog. The cost (~$7-12/mo) buys the agent's task-execution loop, not Bradley's convenience. The GSD/ClickUp 'scatter' isn't scatter to consolidate — it's a clean role split worth WRITING DOWN: GSD .planning = active milestone engineering; ClickUp = durable agent backlog + task domain; OmniFocus = Bradley's own next-actions (CLAUDE.md already encodes the last two). Option (b) is what SPEC §8 specced and v4.2 consciously dropped as YAGNI — don't re-greenlight a from-scratch task-store rebuild on a freshly-stabilized lane without a concrete pain that ClickUp is actually causing. The one real residual pain (phantom-open agent-fix tickets) is already being fixed by 86bageqh4/86bagf0zr, separately.
What only you can weighTwo facts only Bradley can weigh: (1) Is ~$7-12/mo genuinely worth eliminating, given it now buys agent task-execution infra rather than his own convenience? (2) Does the unified-workspace vision (86bacn6eg) feel near-term enough to justify building (b) now, or does it stay a dormant product brief? Everything mechanical (close-on-merge, the GSD/ClickUp role-split doc) is agent-executable once he picks (a).
UnblocksPicking (a) lets this ticket close and converts the 'scatter consolidation' into one small agent-ready doc task (write the GSD/ClickUp/OmniFocus role-split into the ClickUp operating-model wiki page). Picking (b) would re-open SPEC §8 as a new milestone. Either way it unblocks the 86bacn6eg dormant brief from being implicitly blocked on 'where do agent tasks live.'
3 options
(a) Keep ClickUp as the canonical agent task store; formalize the GSD/ClickUp boundary
+ Zero migration risk on a system that is now load-bearing: remediate-findings.js 'ticket' lane writes to ClickUp list 901415845617, ops:work/ops:loop drain it, 10 generated filters + cup CLI + ClickUp (operating model) wiki page all live. The agent-fix phantom-open loop is already being closed by a separate in-flight effort (86bageqh4 / 86bagf0zr clickup-close-on-merge). GSD-vs-ClickUp scatter resolves by RULE not migration: GSD .planning todos = milestone-scoped engineering work-in-flight; ClickUp = the durable cross-project backlog + agent task domain (CLAUDE.md already says 'ClickUp is the agent's task domain; OmniFocus is Bradley's'). Cost is ~$7-12/mo for one seat.
Doesn't eliminate the spend Bradley flagged as unjustified. ClickUp remains a surface Bradley reads but doesn't act in (the JSON-back-at-agents problem from 86bacn6eg persists). Doesn't reduce the number of task surfaces (still GSD + ClickUp + OmniFocus).
(b) Migrate the agent task store into biv-app (a Supabase-backed work-queue + the existing /needs-attention + /system surfaces)
+ Single self-owned surface, no SaaS subscription, agent-native by design (the thing 86bacn6eg argues nobody has built). biv-app already has /needs-attention and /system shipped post-v4.2; SPEC §8 already designed the four-verb inbox (approve/edit/reject/respond) and a 7-state lifecycle for exactly this. Bradley owns the schema, so agents reason against a purpose-built model instead of ClickUp's bolted-on agent layer.
This is the work SPEC §8 specced and v4.2 DELIBERATELY dropped/superseded (needs_attention stayed 3-state; the parallel-worker rebuild was killed as YAGNI). Re-greenlighting it means rebuilding a task store from scratch + a migration of all open tickets + rewiring remediate-findings, cup-capture, ops:work, ops:loop, the 10 filters, and the audit/triage skills. High effort, real regression risk on a freshly-stabilized lane. Re-opens a decision Bradley's own SPEC closed as not-worth-it.
(c) Drop ClickUp; agent task store collapses into GSD .planning + needs_attention, no new build
+ Eliminates the spend immediately and reduces surfaces. Leans on systems that already exist (no biv-app build).
GSD .planning is milestone-scoped engineering planning, not a durable cross-project backlog — it has no home for the 30 standing backlog tickets (dormant ideas, business decisions, agent-ready chores). needs_attention is a findings table (open/resolved/suppressed), not a task store, and SPEC §8 explicitly kept it as findings. This would strand the backlog with no canonical home and break the remediate-findings 'ticket' lane that has no other destination. Reduction-beats-substitution fails here because there is no fit-for-purpose replacement.
86bafkkfc planning

Decide: prune or wire in the 4 never-run learning/audit systems

DecisionFor each of the 4 never-manually-invoked learning/audit systems, prune the documentation/expectation or invest in wiring it to fire — or accept the status quo where nice-wan's inline scans cover the same ground?
★ My recommendation
Option A. The reflexive-learning loop is solved by nice-wan's inline scans — that's a deliberate, documented design choice, not a gap. (1) homunculus-evolve: KILL — disable the everything-claude-code homunculus feature / remove the empty scaffold; it has zero footprint and zero output, pure dead weight. (2) learn-eval: KILL the expectation — it's a plugin command duplicating nice-wan's learn-eval scan; leave the plugin installed but stop treating non-use as a problem. (3) rag:capture: KEEP the skill (it's a legitimate explicit-capture affordance) but drop it from the 'reflexive loop that should fire' framing. (4) ops:audit: KEEP and CORRECT THE DOC — it's already wired (Phase 0h daily); the wiki should say the capability runs, only the manual wrapper is on-demand. Net: one small doc-fix PR to the nice-wan wiki page + optionally disabling the homunculus plugin feature. No new automation built.
What only you can weighThe real situation differs from the ticket's framing. (1) ops:audit is NOT dead — 8/9 of its checks run daily in morning-pipeline Phase 0h and feed the briefing; only the manual /ops:audit skill is uninvoked, which is fine (it's the on-demand surface of an already-recurring capability). (2) homunculus has no runtime footprint at all — no ~/.claude/homunculus/, no observations.jsonl; the 'MBs/day of telemetry' is stale, it captures nothing. (3) rag:capture and learn-eval exist as standalone surfaces but nice-wan's inline capture/learn-eval scans deliberately do the same work with Bradley's live signal — the wiki already says 'Don't delegate the scans to them.' The only thing Bradley must decide is taste: keep these as optional standalone surfaces, or formally retire them so they stop reading as 'capability left on the floor.' This is a low-stakes hygiene call, not a build decision.
UnblocksCloses a standing 'is this dead or should-fire?' ambiguity so future ops:audit / nice-wan-audit runs stop re-flagging these four. Keeps the system map honest (the canonical doc currently mis-states ops:audit as inert and homunculus as actively logging).
3 options
A — Kill the 3 truly-redundant, correct the docs (recommended)
+ Honest system map. nice-wan's inline scans are the working reflexive loop by design (manual trigger = signal session was substantive); rag:capture/learn-eval as standalone surfaces add nothing and homunculus is a dead plugin scaffold. Removing the expectation stops future audits re-flagging them. ops:audit reference gets corrected to reflect it's already live. ~30-min agent PR, no behavior change.
rag:capture is occasionally useful as an explicit one-off 'save this' surface outside a session close — fully retiring it loses that affordance (mitigate: keep the skill, just stop framing it as a should-fire learning loop).
B — Wire them in so they actually fire
+ Realizes 'unrealized capability.' Could auto-capture every substantive synthesis to RAG, auto-run learn-eval per session.
Directly contradicts the established nice-wan principle ('automate what needs no judgment, keep manual what's better with Bradley's signal'). Auto-capture without judgment = RAG noise. homunculus-evolve would need genuine new infra for speculative payoff. This is the speculative-planning-apparatus anti-pattern Bradley has rejected before.
C — Leave as-is, just close the ticket
+ Zero work; the wiki already documents them accurately as inert.
Leaves four 'should this fire?' surfaces that the next systemwide audit will re-surface; the ops:audit and homunculus claims in this very ticket are already factually drifted, proving the confusion cost is real if left unrecorded.
86badyg6j planning

daily-reporting-pipeline cloud decomposition — framing convo

DecisionShould the daily 3pm reporting pipeline be decomposed — splitting its pure-API inner steps (Songstats correlate/enrich, BEF write, dedupe backfills) into a cloud job while the three Mac-bound legs (BEF claude -p interpret, SubmitHub Playwright export, campaignreports deploy) stay local — or should the whole pipeline stay on the Mac until a sleep-miss actually bites?
★ My recommendation
Option A — leave it Mac-bound, and downgrade this ticket from an active decision to dormant/monitor. The decomposition (B) adds real split-brain coordination cost to a daily chain whose correctness depends on strict step ordering, while leaving two of the three hard anchors (claude -p BEF, the campaignreports deploy) on the Mac anyway — so it buys partial reliability at the price of a brittle cross-surface handoff. That trade isn't worth it preemptively. The cleaner reliability win, if and when a sleep-miss actually bites, is a watchdog that detects a missed 3pm run and pages/auto-reruns — not a surface split. Recommend: keep parked; revisit only if (a) a real sleep-miss costs a client a report, or (b) the campaignreports deploy leg gets a sanctioned cloud path via the governance initiative 86baebq6r, which would remove one of the three anchors and change the math.
What only you can weighThree of six steps are HARD Mac-bound, verified in code: (1) BEF Step 2 interprets via nested `claude -p` — judgment leg, Routine-eligible but not Actions-eligible per the mechanism rule the parent task established (Routines = reasoning runs, Actions = zero-judgment scripts); (2) SubmitHub Step 3 drives a logged-in Playwright browser with persisted .submithub-browser-state and a --login recovery path — no headless-cloud path unless SubmitHub auth can be carried as a storage-state secret, which is unproven and brittle; (3) Step 6 ships to campaignreports.braininavat.dance, a client-facing CF Pages surface that is a hard-stop deploy boundary. The pipeline's failure mode today is single-point: if the Mac sleeps at 3pm the whole chain misses. The parent migration already proved the cheap zero-judgment jobs (reconcile-payment-status) move to GH Actions cleanly; this one is the residual hard case. Order matters in the chain (Songstats first, BEF upgrades, SubmitHub dedupes against both), so any split must preserve sequencing across the Mac/cloud boundary — that's the split-brain risk Bradley flagged.
UnblocksResolving this closes the residual third of the parent cloud-migration effort (86badv7t3) — the other two jobs were already routed (reconcile-payment-status to GH Actions, late-payment-digest to 86badyg2g). A 'leave Mac-bound + add a missed-run watchdog' decision would let an agent build the watchdog as agent-ready follow-up work.
3 options
A. Leave whole pipeline Mac-bound (status quo, do nothing)
+ Zero engineering risk; sequencing stays in one process; no split-brain coordination; the chain already has per-step logging, auto-fix, and consolidated paging. Mac-sleep misses are recoverable (manual /reporting:chain re-run) and haven't been shown to actually cost a client a report.
Single-point-of-failure persists — a 3pm sleep silently skips the client-facing report refresh; this is the exact bus-factor risk the cloud memo flagged as highest-priority. No reliability gain.
B. Surgical split: cloud job for pure-API legs, Mac keeps browser+claude-p+deploy
+ Moves the deterministic data legs (Songstats correlate, enrichers, dedupe backfills) off the sleep-fragile Mac; those are the steps most likely to silently no-op. Aligns with the proven GH-Actions-for-zero-judgment pattern.
Introduces split-brain: the chain's ordering invariant (Songstats→BEF→SubmitHub dedupe) now spans two execution surfaces, requiring cross-surface sequencing/handoff that doesn't exist today. High build cost for a chain that must stay correct daily. BEF (claude -p) and SubmitHub (Playwright) and deploy all STILL need the Mac, so the Mac-sleep risk is only partially removed — you've added coordination complexity without eliminating the core dependency.
C. Headless-cloud the SubmitHub leg too (carry storage-state as a secret), then move most of the chain
+ If SubmitHub auth survives as a portable storage-state, the biggest Mac anchor disappears and the chain could run almost entirely cloud-side.
Unproven and fragile — SubmitHub session expiry already triggers a --login recovery path that needs an interactive/local browser; a cloud storage-state would silently rot and fail un-recoverably. The deploy leg is still a forbidden client-facing surface. Highest risk, speculative.

Decisions — needs your taste

Genuine judgment calls only you can make. Small.
86badej9n planning

Consulting proposal: define what BiV Systems proposals actually say, then build the template

DecisionIs there any open content/positioning decision left for the consulting PROPOSAL surface, or is this task satisfied by the existing _template-consulting/ + the same-day offer-shape research? If the only true gap is embedding credibility/evidence (the dogfood-proof play) into the proposal template, decide whether that's worth a small edit now or deferred until the public landing page exists.
★ My recommendation
Recommend B, scoped tightly. The template the title asks for already exists and is good; do not rebuild it. The single defensible remaining piece is a credibility/evidence section — which the offer-shape research flags as the #1 substitute for Bradley's missing case studies (dogfood proof: 'the system I built to run BiV solo IS the case study'). Decision Bradley owes (2 min): pick the proof artifacts for a proposal-embeddable block — (1) dogfood one-liner + 1-2 metrics (campaign throughput / hours saved), (2) the Algorhythms engagement as an anonymized 'systems discovery for a Miami label group' reference, (3) tech-stack credibility line (Airtable/n8n/Supabase/Claude). Once he picks, an agent adds a parameterized {{CREDIBILITY_*}} block to _template-consulting/ and opens a biv-proposals PR. If Bradley reads the existing template and is happy without an evidence block, then option A — just close it.
What only you can weighThe two things Bradley should glance at before deciding: (1) ~/code/biv-proposals/_template-consulting/README.md — confirms the template already encodes positioning, the four commitment shapes, pricing, and all the constraints he listed; (2) the 'modified Option B' synthesis in system-map/raw/2026-06-11-consulting-offer-shape-research.md — its dogfood-proof recommendation is the source for what evidence to embed. Key distinction he should hold: this task = the per-engagement PROPOSAL (proposals.braininavat.dance/<slug>/); the offer-shape research = the public OFFER/landing page (braininavat.systems). The proposal template is built; the public landing page is a separate, not-yet-built surface that isn't this ticket.
UnblocksA finished proposal template with an evidence block unblocks fast, consistent consulting proposals for the next inbound (e.g. the Akumandra/Caitlin integration proposal, 86baddvug) without bespoke rebuilds. Also lets the wiki Engagement-playbook 'No template proposal' known-failure-mode be closed.
3 options
A. Close this task — the build is done and the content is decided
+ Honest to live state: the forkable template exists and its README already encodes positioning, commitment shapes, pricing, and all constraints — it explicitly is NOT a fork of Ella. The reframe's 'content-first' questions are answered by the template README + the 2026-06-11 offer-shape research. Algorhythms (Chris Martinez) viewed the real proposal 2x; the shape is field-tested. No unblocked work waits on this.
The reframe wanted a working session with Bradley on 'said how / what evidence goes in.' Closing skips that. The proposal template does not yet embed a credibility/evidence block (the dogfood 'how I run a 6-figure agency solo' proof the research recommends) — if that's the gap Bradley cares about, closing buries it.
B. Narrow + retitle to the one real gap: 'Add a credibility/evidence block to the consulting proposal template' (agent-ready)
+ Separates the genuinely-unbuilt piece (evidence/proof section) from the already-built template. That piece is mechanical once Bradley picks the proof artifacts — an agent can add a parameterized {{CREDIBILITY_*}} section to _template-consulting/index.html + README and open a PR against biv-proposals. Low risk, internal surface (template, not a live client page).
Requires Bradley to first decide WHICH proof goes in (dogfood metrics? anonymized Algorhythms? testimonials he doesn't have yet). Per the research, no-case-study sellers lean on dogfood proof + recognized-category testimonials — but Bradley has to choose. So it's still a small decision before it's agent-ready.
C. Keep in planning for a content working session, but first read the existing template + research
+ Matches the reframe's stated NEXT ('content/structure working session'). Lets Bradley confirm the template's positioning reads right before any client sees it.
Risks re-litigating decisions already made on June 7/11. The session is only worth it if Bradley actually disagrees with the existing template's framing — otherwise it's a no-op that keeps a done task open.
86bagemge to do

Audit + clean accumulated local branches in the 3 report repos (biv-systems/proposals/campaign-reports)

DecisionFor the 5 branches with genuinely-unmerged work, which do you want PR'd-and-shipped vs deleted? (The 8 verified-dead branches just get deleted regardless.)
★ My recommendation
Option A. Delete the 8 verified-dead branches (3x money-path, 3x cache-control, biv-systems deploy-consulting-pass, campaign-reports deploy-spacing) local+remote, and have an agent open a single PR for biv-proposals ci/actions-node24 (mechanical Node-24 deprecation fix, CI-only). Then surface the 4 remaining biv-systems/proposals copy+spacing branches to you as a 4-line keep/drop list — they touch the client-facing consulting page (hard-stop surface) and are pure taste, so they need your call before either PR or delete.
What only you can weighThe 4 copy branches and what each changes: (1) consulting-case-studies-link — caps the 'CASE STUDIES HERE' link + stacked-prose spacing; (2) fix/case-study-remove-tilde — drops the tilde on '1.5 hrs/week'; (3) fix/consulting-approach-copy — biv-assets submodule bump (mobile subhead + footer) + Approach copy 'as the business evolves'; (4) biv-proposals deploy-spacing — section spacing 64->40px. All are stale vs main (behind 1-10 commits); if you still want them they should be rebased before PR. All deletes are reversible: the commit SHAs are in the ticket body and recoverable via reflog.
UnblocksReturns all three report-repo working copies to a clean main (they're currently parked on fix/cache-control-shared-assets), removing the risk of real work silently stranded on local-only branches and eliminating the branch-list confusion that fed this and the agent-fix-hygiene tickets (86bageqh4).
3 options
A. Delete-the-dead now + PR the one mechanical branch, hold the 4 copy branches for your review
+ Clears 8 stranded branches immediately (all reversible — SHAs recorded in ticket). ci/actions-node24 is a real Node-20-deprecation fix an agent can PR safely (CI-only, no client surface). Leaves only the genuine taste/client-surface calls for you.
You still owe ~4 yes/no calls on the consulting-page copy branches before the repos are fully clean.
B. Delete everything except a25e034-style merged work; discard all 5 unmerged branches too
+ Fastest path to clean main everywhere; if the consulting copy tweaks (caps CASE STUDIES link, drop tilde on '1.5 hrs/week', 'as the business evolves' Approach copy) are no longer wanted, they're just noise.
Discards real client-facing-page improvements unverified — violates 'nothing real discarded unverified.' The submodule bump in fix/consulting-approach-copy (mobile subhead + footer fixes) may be wanted. High regret risk.
C. PR all 5 surviving branches, let main/the PR gate decide
+ Nothing discarded; every change gets a review surface.
4 of them are tiny client-facing-copy commits that are stale relative to main (behind 1-10 commits) and may conflict or already be obsolete; opening 5 PRs for trivial copy tweaks is more noise than signal, and biv-systems is a hard-stop deploy surface so they can't auto-ship anyway.
86bag4k5z planning

Rethink Agent Inbox information architecture (mixed item types)

DecisionWhat is /agent-inbox FOR, and given that labeled sections already shipped, what (if anything) still needs to change in the IA — specifically: do FIXES belong in a judgment inbox, and should /needs-attention and /agent-inbox stay as two pages or merge?
★ My recommendation
Option C's core principle is the most aligned with the workspace's own human-gate philosophy (judgment is gated; mechanical work is not) and it directly fixes the stated complaint. But because the layout already shipped and the residual issue is narrow, the right NEXT step is not to build any of these blind: it's the 15-minute UI/design conversation the ticket already asks for, where Bradley looks at the LIVE /agent-inbox (now that it's sectioned) and decides between 'this is fine, ratify' (A) vs 'pull FIXES out into hygiene' (C). Frame that conversation as C-vs-A with the live page on screen, since B's full merge is the heaviest lift for the least-certain payoff.
What only you can weighThe key fact Bradley may not realize: the sectioned layout he was going to design is ALREADY in production (shipped in the calm-shell redesign #22/#27). So the conversation is no longer 'design the IA from scratch' — it's 'look at what shipped and decide if FIXES should move out of the judgment inbox, and whether the two page names need disambiguating.' This is a taste/workflow call only he can make (how he wants to triage), but it should be made against the live surface, not a sketch. Also: this IA blocks/shapes the v4.2 queue-worker epic (86baekpq4), which routes findings INTO this inbox — so settling it has leverage beyond cosmetics.
UnblocksAdds a concrete spec + acceptance criteria to this ticket so it can flip to agent-ready and be dispatched as a biv-app PR. Also unblocks the routing-target half of the v4.2 needs_attention queue-worker epic (86baekpq4).
3 options
A. Ratify current state — keep two pages, keep FIXES section in inbox; close this ticket as superseded by the redesign
+ Zero build. The sectioned inbox already exists and works. /agent-inbox = everything awaiting your call (incl. ready fixes); /needs-attention = raw finding hygiene. Honest reading of what shipped.
Doesn't resolve the felt 'FIXES feel misplaced next to judgment items' complaint that prompted the ticket. Two similarly-named pages remain a discoverability papercut.
B. Organize by ACTION-TYPE, not item-source — one inbox, three intent-bands: DECIDE (PR approvals + four-verb judgment), DO (one-tap fixes, local + dispatch), FOLLOW-UP (meeting threads). Fold /needs-attention raw-triage in as a collapsed 'all findings' drawer.
+ Names a clean organizing principle the user can reason about (what kind of action am I taking?). Collapses the two-page confusion into one surface with a clear hierarchy. Gives the v4.2 queue-worker an unambiguous routing target per band.
Real build (refactor bucketing + merge the two render functions + drawer UI). The DECIDE band mixes PR-shaped (GitHub link) and no-diff (in-app verbs) items, a sub-shape to handle. Needs a design pass before spec.
C. Split by surface PURPOSE — /agent-inbox becomes pure judgment (DECIDE + FOLLOW-UP only); move FIXES to /needs-attention or /system as 'ready actions'; rename pages so the distinction is obvious (e.g. 'Your calls' vs 'System findings').
+ Cleanest conceptual separation: inbox = things only Bradley can decide; findings page = mechanical/hygiene incl. ready fixes. Directly addresses the 'fixes feel misplaced' complaint. Aligns with the workspace's human-gate model (judgment vs mechanical).
Moves the one-tap fix away from where the finding's context lives, risking an extra hop. A rename touches muscle memory + any deep-links/launchd notifications pointing at these paths (grep needed). Still a build.

Blocked on a move only you can make

Not decisions — physical actions. Code/work is done or parked; these wait on you.
86b9q0rd0 to do

Add OneDrive support to asset processor (Microsoft Graph OAuth)

highest leverage
What it isAuthenticated Microsoft Graph download path so the asset processor can pull OneDrive-hosted cover art/assets (enterprise label clients Empire/Warner/Sony default to OneDrive); code is fully built and survives in git, blocked only on a one-time Bradley auth step with a OneDrive-provisioned Microsoft account.
→ Your move
Leave open and re-tag as a Bradley-decision blocker (remove any 'agent-ready' framing). Post a comment stating the true state: code is parked in git commit afab701 / branch feat/onedrive-graph-support (NOT on main, working tree was reverted), and the ONLY remaining work is Bradley's one-time auth choice. Surface the decision below to Bradley.
86baddvug update required

Caitlin onboarding: map Akumandra manual workflow + tool-access & integration proposal

What it isOnboard subcontractor Caitlin Bose into the BiV system for the Akumandra event-PR campaign she's running fully off-system: the agent's discovery/proposal work is done; what remains is a Bradley+Caitlin interview, getting her doc-share + placement list, and then logging her ~7 press hits — all gated on human input.
→ Your move
Leave as update-required (correctly parked). The agent portion is done; the three remaining items are all Bradley-side and not dispatchable now: (1) the live Bradley+Caitlin interview, (2) asking Caitlin to share docs to bradley@ and hand over her placement list, (3) logging the ~7 press hits via reporting:log-outcome against recEoIpMVOcGNgt53 — which only becomes agent-ready once the placement list exists. No ClickUp change needed; do NOT mark agent-ready (per the loop-scope comment, the next move is Bradley's). Optional: add an explicit blocked-by note that step 3 unblocks the moment the placement list arrives.
86baczw56 to do

O17: Airtable diet + agent hands (fields, views, bases, PAT)

What it isTrim the Airtable base (delete ~70 no-consumer fields + 51 dead CR views, archive stale base copies, scope a base-limited PAT). All agent-ownable PREP is already done; what remains is destructive Airtable-UI field/view deletion that is intentionally MANUAL (Bradley present), so the ticket is gated on a Bradley work-session, not on an agent.
→ Your move
Leave open as a Bradley-present supervised task; relabel so it reads as 'manual destructive UI work pending a Bradley work-session' rather than agent-ready. Concretely: edit the description's stale file path (~/Scripts/playwright-airtable/ -> ~/Scripts/airtable/), and add a comment noting that all three agent-ownable prep items are now DONE (field-audit.js repaired + both playwright gaps closed), so the only remaining work is Bradley's manual field/view deletion + stale-base archiving + base-scoped PAT. Do NOT trust the '~70 fields / 51 views' count — re-assemble the approval table fresh from a live cross-ref at deletion time (field-audit.js canary currently shows only 3 benign suspects).
86badjeeu update required

Verify pitch-list fetch-all fix on a live send

What it isA verification gate: confirm that the Pitch List fetch change (filterByFormula on a multipleLookupValues field -> fetch-all + client-side filter, in drafts-send-to-n8n.js) works on a real segment send — completes without hanging and recipient count matches — then delete the one-shot benchmark file.
→ Your move
Leave open, blocked on Bradley's scheduled live segment send (06-17/06-18). When that send fires, verify via n8n execution log (NOT script_events — the Drafts send script doesn't emit there): completed-without-hang + recipient count matches expected. The test-file deletion criterion is already satisfied (done in commit efb117b), so update the acceptance to reflect only the live-observation remains. Correct the ticket's verification method from script_events to n8n execution logs / Bradley ping.
86bab6vfn to do | tags: docs, dormant, onboarding

Employee bootup package: docs+access checklist for first BiV hire

What it isWrite one Google Doc on the BiV Shared Drive that onboards the first A&L Relations hire (Halston/Ben class): access list + capability map + sales dos/don'ts, readable in under 30 min.
→ Your move
Add an explicit blocked-by dependency on 86baddvug (formalizing the comment), keep status as-is, and leave a one-line note that the decision package is complete and the doc becomes a clean agent/Bradley write-task the moment Caitlin's onboarding interview + access execution lands. Do not dispatch now.

Cleanup batch — one "go" clears the noise

Verified against live ClickUp. All reversible.
close
86baf9mqr create-github-app-token@v3 migration
Shipped in biv-scripts PR #112 (merged 06-17); zero app-id refs on main, post-merge runs green. Phantom-open only.
close
86baekpq4 needs_attention queue-worker (v4.2 tracker)
This ticket IS the v4.2 milestone tracker — shipped, verified PASS, archived 06-16. Worker is live (remediate-findings.js + launchd). No child work remains.
close
86b9qg5zj Musk audit: month-end synthesis
Premise gone — .planning/musk-audit/ was git-rm'd 06-16, audit never ran, no inputs to synthesize. A future Musk audit is a fresh ticket.
close
86baebq6r Autonomous change governance
v4.1 outcomes all live + verified in prod. Only residue is one unchecked Phase-24 checkbox — bookkeeping, not build work. Flip checkbox in a tiny docs PR, then close.
→ on hold
86bae698u G3100 DNS-bypass watch
Trigger-armed watch, not active planning — zero network failures in 7,634 events. Reclassify as parked/dormant.
dep
86baget9q blocked-by 86bag9dnx
PR6 (retire mcShell + folded routes) and the Social Reconciliation CCC rework both edit biv-app lib/shell.js and lib/collectors.js. The social-recon-ccc-rework branch is in progress; PR6 must sequence after it merges to avoid touching the same files in two open branches. Real sequencing constraint flagged in both tasks' evidence.
dep
86bab6vfn blocked-by 86baddvug
Bradley's 2026-06-12 triage comment explicitly sequences the employee bootup package after Caitlin onboarding — she is the live test case (N=1 input). 86baddvug is still 'update required' (interview + access execution not done), so the bootup doc cannot be written until her onboarding lands. Tasks already mutually linked in ClickUp.
merge
Keep 86baebt5b, absorbed 86baebvjq
Bradley already merged 86baebvjq into 86baebt5b on 2026-06-15 as the canonical version (same SPEC-§8 dependency, same GSD/ClickUp-scatter scope); 86baebvjq is already status=complete. Recording the merge for the audit trail — no further action needed beyond confirming the duplicate stays closed.
noted
86bageqh4 auto-close-on-merge mechanism — already complete
Mechanism is built & live in biv-scripts. The remaining multi-repo rollout is the agent-ready ticket 86bagf0zr below.

Agent-ready — ready to dispatch on your go

Mechanical work → PRs that wait for your merge.
86bagf0zr to do

Roll out clickup-close-on-merge to biv-app + remaining agent-fix repos

low risk
PR wouldAdds one identical GH Action workflow (.github/workflows/clickup-close-on-merge.yml) to each repo that transitions a linked ClickUp ticket to complete (or update-required) when a PR whose body carries a 'ClickUp: <id>' trailer merges. No application/bundled code changes, no deploy, no client-facing surface touched.
Sequencing / notesNone for the mechanical part (file copy + secret set are fully autonomous, reversible). The ACCEPTANCE criterion ('verify one live ticketed-PR merge transitions its ticket per repo') cannot be force-verified at dispatch time — it falls out of normal subsequent agent-fix PR traffic, or the agent can run one disposable ticketed PR per repo to confirm. Setting the per-repo secret requires gh auth with secret-write scope (already present in Bradley's local gh).
86baget9q to do

biv-app PR6: retire old mcShell + folded routes

medium risk
PR wouldOpens a PR on biv-app main (change-approval gate) that removes the orphaned brutalist routes/scaffolding, centralizes the shared collectors, and 302-redirects the dead URLs to their new surfaces. Net: dead code removed, no dead imports, all 5 surfaces still 200.
Sequencing / notesTwo accuracy notes the agent must handle, not hard blockers: (1) collectCritOnly/collectPulse in lib/collectors.js still have many LIVE callers among KEPT routes (submithub-tracking, dp-pitch-log, manual-pitch-log, social-reconciliation, needs-attention, schedule-c) — so the task's 'remove collectCritOnly/collectPulse once no caller remains' step will mostly be a no-op; agent must grep callers before deleting, not delete blind. (2) Existing redirects use 301 but the task explicitly mandates 302 for these new orphans — agent should add the new ones as 302 and may want to flag the 301 inconsistency rather than silently match it. Sequence after the social-recon-ccc-rework branch merges to avoid shell.js/collectors.js conflicts.

In progress — keep going

86bag9dnx in progress

Rework Social Reconciliation tool onto the CCC table

StatusLeave open as in progress. The code rework is merged + auto-deployed; surface to Bradley that the remaining tail is: (1) live test write+revert against the deployed app (Bradley deploy is already done via merge, so this is just a validation pass), (2) re-add the /social-reconciliation quick-link to campaigns.js Tools panel + ship, (3) repoint the Social Stream Deck button to the app. The quick-link re-add is a mechanical agent-ready follow-up PR; the Stream Deck repoint is a local sd:modify config change; the live validation is the one Bradley-owned step. Do NOT close — the user-facing surfacing isn't done.

Correctly parked — no action (FYI)

Dormant ideas & trigger-armed watch items. Verified still-correctly-parked.
86baentvhEvaluate new Agent SDK credit pool impact on workspace billingon hold (dormant) — re-activate when Anthropic gives the advance-notice update.
86baehhcvMonitor: claude-review advisory check intermittently errors (tsconfig directory mismatch)on hold as a watch. No action — Bradley already made this call (his 2026-06-15 comment) an
86baed85uDecide durability home for calendar-recovery/ before any writer lands (BNDRY-05 follow-up)dormant/on-hold (correctly parked). The decision Bradley needed to make is already made an
86bae698uNetwork: G3100 intermittent degradation — decide on DNS bypass after more evidencedormant/parked, trigger-armed. Add the 'dormant' tag (currently only tagged 'reliability')
86baczw8bR24: Social-seeding reporting (roster from Airtable, deterministic scraper, one generator)dormant. Edit the description's 'ACCEPTANCE when woken' + 'FILES' lines to reflect current
86bacn6egIdea: Unified human+agent workspace (product brief)dormant. No action needed until the ~2026-09 scheduled re-look. Optionally set a reminder/
86b9m4u7nReorganize Supabase tables into logical schemas (deferred)dormant/on-hold. No action needed — the deferral decision is still correct and all four fi
86b9kygyxS4A data pipelinedormant — no change. Parking trigger has not fired and the prep notes already capture the
86b9kygykAutoresearch for Claude Code skillsdormant — no change. The wake condition (a second skill needing eval tooling) is the corre