You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(papercuts): a local feedback loop from one-tap report to verified fix #22
One tap (or none) to a report that carries everything an agent needs, then triage, a fix, a deploy, and a measured close, all on my machines. Reporting costs nothing, and the loop reaches "validated" without me being the test runner. Design page: docs/fork/papercuts.md. Capture (stages 1 and 2) is built; this tracks everything after it.
Decision, 2026-10-05
"i want a personal feedback loop that enforces privacy and security by keeping everything local to me and my environments implemented first. no need for different parts inside my loop to preserve privacy from other parts--that's just theater. only when we are thinking about possibly upstreaming the feature we can worry about privacy and security."
Consequences:
Agents in the loop (triage, fixer, reviewer) read the whole record: screenshot, message text, note, full failure causes, trace slice. Capture gets richer, not more careful.
One cheap habit survives: the loop never takes instructions from GitHub text written by others.
Shape
report (tap, shake, palette, or the stall watchdog)
-> record + trace slice on the receiving server (immutable) #26 #27 #28
-> overlay: status history, signature, issue link (append-only) #24 #29
-> triage job (hourly, silent when idle) -> issue (public-safe) #30
-> I dispatch /defect-session papercuts #32 #31
-> fix on fix/* -> gate -> fork-deploy (existing)
-> overlay: fixed in <fork version>; soak; recur or close #33
Waves
Wave 0 (now): decision record in docs/fork/papercuts.md; #23 egress.
Wave 1 (parallel): #24 overlay and CLI, #25 identity and retry, #26 server snapshot. #27 client capture follows #25 because both edit PapercutReporter.tsx; contract edits to papercut.ts are additive but will touch the same file, so merge in order.
Wave 2: #28 watchdog reports (after #26), #29 signature (after #24, and after about 10 real records from #26 and #27), #31 repro kit.
Wave 3: #30 triage job (after #24 and #29). Milestone: a stalled thread becomes a triaged issue with no tap and no message from me.
Wave 4: #32 dispatch mode, #33 recurrence, soak, close, and metrics.
Triage state is overlay files plus a CLI, not an RPC or a database, because the live server owns the records and one user needs nothing larger.
Signature is computed at triage and stored in the overlay, not at ingest, so the recipe can change without touching server code.
Soak is 7 days after deploy; closing is reversible.
Triage runs hourly and is silent on an empty list; dispatch stays mine (posture).
Build identity is the fork version.
Not now (each needs an exhibit first)
A list view on web, desktop, and mobile (the CLI and the issues are the view; build it once they prove insufficient, and it must show status and undo on every surface). Android hang records (ApplicationExitInfo). A persistent outbox for web and desktop beyond retry in memory. An MCP toolkit for reports. Embeddings or LLM duplicate search over free text. Session replay. A priority model. Auto-dispatch of fixes. A sink layer.
Open question for later
Whether to auto-dispatch fixes for a class of cluster with a good track record. Decide with the numbers from #33, not before.
What success looks like
Median report to triaged issue under an hour, none of it hand-reconstructed. A failing test for most bounded clusters. Recurrence per build visible in one command. I touch the loop twice: the tap, and the dispatch.
Goal
One tap (or none) to a report that carries everything an agent needs, then triage, a fix, a deploy, and a measured close, all on my machines. Reporting costs nothing, and the loop reaches "validated" without me being the test runner. Design page:
docs/fork/papercuts.md. Capture (stages 1 and 2) is built; this tracks everything after it.Decision, 2026-10-05
Consequences:
toPublicEvidenceallowlist, a quarantine of free text from the fixer, and the sink layer. They are in question(papercuts): what must be true before offering this upstream or to other forks #34 for later.Shape
Waves
Wave 0 (now): decision record in
docs/fork/papercuts.md; #23 egress.Wave 1 (parallel): #24 overlay and CLI, #25 identity and retry, #26 server snapshot. #27 client capture follows #25 because both edit
PapercutReporter.tsx; contract edits topapercut.tsare additive but will touch the same file, so merge in order.Wave 2: #28 watchdog reports (after #26), #29 signature (after #24, and after about 10 real records from #26 and #27), #31 repro kit.
Wave 3: #30 triage job (after #24 and #29). Milestone: a stalled thread becomes a triaged issue with no tap and no message from me.
Wave 4: #32 dispatch mode, #33 recurrence, soak, close, and metrics.
Checklist
/defect-session papercutsAssumptions recorded (change by comment)
Not now (each needs an exhibit first)
A list view on web, desktop, and mobile (the CLI and the issues are the view; build it once they prove insufficient, and it must show status and undo on every surface). Android hang records (
ApplicationExitInfo). A persistent outbox for web and desktop beyond retry in memory. An MCP toolkit for reports. Embeddings or LLM duplicate search over free text. Session replay. A priority model. Auto-dispatch of fixes. A sink layer.Open question for later
Whether to auto-dispatch fixes for a class of cluster with a good track record. Decide with the numbers from #33, not before.
What success looks like
Median report to triaged issue under an hour, none of it hand-reconstructed. A failing test for most bounded clusters. Recurrence per build visible in one command. I touch the loop twice: the tap, and the dispatch.