Files
standards/INBOX.md
T

9.3 KiB

Inbox — cross-project capture buffer

Raw, untriaged ideas and bugs for any repo, captured from anywhere so they stop scattering into phone notes. /capture appends here; /triage, run inside a project, drains that project's items into its AGENTS.md (## Current state) or ROADMAP.md. This buffer is upstream of every repo's ROADMAP — nothing here is owned or scheduled until triaged.

Line format — one item per line:

- [ ] (project) [type][Pn] note — optional context, YYYY-MM-DD
  • project — the target repo's folder name (e.g. relay), or standards for this repo, or ? if unsure. For an idea that would be a brand-new repo (no folder exists yet), use new — or new:working-name if you have a name in mind.
  • typebug | feature | idea | skill | agent | project | chore (project = a potential new repo; handled by the new-repo bootstrap, not /triage).
  • Pn — priority P0 (drop-everything) … P3 (someday). Default P2 if unspecified.
  • [ ] unchecked = untriaged; /triage removes items once they're routed.

Example:

- [ ] (relay) [bug][P1] health-check probes the wrong port after the bind refactor — found while testing, 2026-06-14

Items

  • (standards) [feature][P2] API automation for Gitea in /new-project — automate the currently-manual Gitea create/publish gate via the Gitea API, 2026-06-14
  • (new:embedded-links-reader) [project][P2] Embedded-links reader & summarizer — give the app an article/blog URL; it scrapes the links the author embedded (the ones you don't want to visit in the moment), reads them, and summarizes them, 2026-06-14
  • (new:portfolio-scraper) [project][P2] Portfolio-company scraper — tracks portfolio companies for podcasts, social tweets, founder appearances, news, etc. and delivers a digest via email or another interface, 2026-06-14
  • (recap-relay) [chore][P3] AGENTS.md endpoint list mis-describes POST /relay/analyze as "{ transcript, … } → topic sections JSON". The actual route (server/routes/analyze.js) takes a free-form { prompt: string } and returns the standard envelope { result: { text } }; "topic sections JSON" is only what the recap-app caller asks for in its prompt. Fix the request-shape wording to { prompt } — surfaced resolving Recaps' Daily Digest synthesis contract (Q4), 2026-06-15
  • (ten31-signal-engine) [chore][P2] Run full-eval on the signal engine folder — the full evaluation suite (evaluator, security-auditor, exerciser, doc-auditor, spec-checker), 2026-06-16
  • (standards) [idea][P2] run janitor agent on all projects — via matrix, 2026-06-16
  • (recap) [idea][P2] add gemini 3.5 to model selection, need to have research agent check which models are available (stable versions) and the correct model name — via matrix, 2026-06-16
  • (recap-relay) [idea][P2] add gemini 3.5 to model selection, need to have research agent check which models are available (stable versions) and the correct model name — via matrix, 2026-06-16
  • (new:personal-website) [project][P2] Develop personal website — host on Start9 Pages, served on clearnet via StartTunnel; build HTML site, use Claude Design for styling, gather design inspiration — 2026-06-16
  • (standards) [agent][P3] Operator-onboarding agent — sibling to onboarding-tester for the operator journey (stand up + run keysat from docs alone: sideload/registry install on StartOS, configure, issue first license), vs. the developer SDK-integration journey onboarding-tester already covers. Needs its own clean room (a clean StartOS service-install, not a generic VPS, since the s9pk can't run on a vanilla Linux box), 2026-06-16- [ ] (ten31-database) [idea][P2] backup history in settings tab should be minimized and expandable with a chevron. default to minimized and shown at the bottom since it is rarely viewed — via matrix, 2026-06-18
  • (ten31-database) [idea][P2] screen refresh should preserve viewing the same tab you were already on, rather than default back to the top tab — via matrix, 2026-06-18
  • (spark-control) [idea][P2] we should redesign the software logo/icon (used for startos service).. it doesn't really relate to anything, though the color scheme seems to match — via matrix, 2026-06-18
  • (spark-control) [feature][P2] Add a dashboard card for the ten31 CRM / intake bot (Update/Restart/Stop/Logs tile like matrix-bridge) — confirm whether already done; see ten31-database docs/handoffs/add-intake-bot-to-spark-control.md, 2026-06-18
  • (proof-of-work) [feature][P2] brainstorm better tracking of cardio logging and cardio program planning (in-week variety and long term programs) — via matrix, 2026-06-19
  • (matrix-bridge) [bug][P2] what are the open brackets when you log an inbox item through matrix, eg “📥 captured → - [ ] (proof-of-work) [feature][P2] brainstorm better tracking of cardio logging and cardio program planning (in-week variety and long term programs) — via matrix, 2026-06-19” — via matrix, 2026-06-19
  • (recap-relay) [bug][P1] Analyze-phase hang permanently jams the single in-memory hardware FIFO slot → ALL YouTube processing (manual + background subscriptions) blocks; caused a multi-hour (possibly ~week) operator-box outage. ROOT CAUSE (confirmed via operator dashboard + relay logs — job 9514ee26, video mxg6OsCl7Oc: download 14s ok → transcribe 200s ok → "starting analyze" then silent ~700min, status UNKNOWN): analyzeText's ai.models.generateContent (server/backends/gemini.js:587 analyze; :281 transcribe) passes NO AbortSignal, and the client-wide httpOptions.timeout (900_000ms, gemini.js:216) doesn't fire on a half-open/stalled connection so the await never settles; chunked-analyze retry (server/chunked-analyze.js:642) is bounded and only catches rejections (a hang never throws); the worker releases the hardware slot only in its finally (server/routes/summarize-url.js:1105), which a never-completing try never reaches; server/hardware-queue.js acquireHardwareSlot (:51-98) is a single in-memory FIFO with NO acquire-timeout / dead-holder detection and jobs.js has no stuck-"running" watchdog, so later jobs wait forever ("queued at position N"). FIX (2 parts + a unit test; recap-relay is its own repo — own version bump + make install, never deploy to registry): (1) PROXIMATE — thread AbortSignal.timeout(...) into the Gemini analyze + transcribe generateContent calls so a stall REJECTS → retry/fallback + worker finally run → job fails cleanly instead of zombie-ing (verify @google/genai per-request abort param, config.abortSignal vs signal, against installed SDK); (2) SYSTEMIC — add a dead-holder watchdog (worker- or slot-level) that force-releases the slot + marks the job failed past a hard ceiling so no future hang can permanently jam the FIFO SPOF. IMMEDIATE UNBLOCK (operational, not the fix): restart recap-relay (job map + slot are in-memory) — recurs until fixed. SECONDARY: occasional "[chunked-analyze] invalid JSON in window response — retrying" self-recovers (look only if frequent); and the full week-long subscription silence exceeds this one ~12h job — check https://recaps.cc/api/sub-check-log whether earlier jobs hung identically or the background sub-check entitlement gate (recap server/index.js:1400, Keysat-license-gated, may skip silently post-core-decoupling) is the cause — diagnosed from dashboard + logs, not yet fixed, 2026-06-20
  • (recap) [bug][P2] Verify whether cloud background subscription processing is silently skipped post-core-decoupling: _checkSubscriptionsInner returns early ("Skipped: subscriptions require a Pro license") unless licenseMW.LIC.entitlements.has("subscriptions") (server/index.js:1400), but cloud paid status moved to users.tier (relay-owned), NOT a per-user Keysat license — so the owner/operator scope may lack that entitlement and the daily background sub-check could skip silently while manual processing still works. UNCONFIRMED lead surfaced while diagnosing the 2026-06-20 relay analyze-hang outage (separate issue; see the recap-relay inbox item). Check via https://recaps.cc/api/sub-check-log (signed in) — 2026-06-20
  • (ten31-database) [idea][P2] the emails auto captured in the database matching investors should be strictly only if the investor email is in the to: or from: fields. for example, if someone in our team receives an email from one of our investors, that gets tagged for logging. then, if someone on our team responds (investor name in the to: field), that also gets tagged. however, if someone on our team was cc'd in that email to the investor, there should not be a new entry for someone on our team having received an email if it was being copied on a response to our investor. right now, it seems like if the investor email matches anywhere and it hits one of our team member's inboxes on the receiving end (incl. cc), it gets tagged as a received note from the investor. that's a tidying up change we need to do — via matrix, 2026-06-20
  • (ten31-database) [idea][P2] add camera icon in top bar next to pencil icon for logging communication. camera icon is for capturing business cards, runs the exact same flow as the matrix intake bot, sends the image to our local LLM model via spark control endpoint, then responds with suggested new investor addition, but waits for approval or edits or rejections just like matrix flow — via matrix, 2026-06-20