Analyze
junco analyze points at a single existing issue — owned repo or not — and
investigates the codebase against it: root cause, file:line evidence, reproduction
steps, a suggested fix direction. Nothing posts; the result parks as a draft.
The flow
junco analyze acme/reef-api#52 junco analyze review analyze-acme-reef-api-52 junco analyze edit analyze-acme-reef-api-52 junco analyze post analyze-acme-reef-api-52
The command resolves the reference (a watched repo maps to its clone; an unwatched one is
auto-forked into a managed clone and watch-listed) and queues a machine-owned
ticket; the daemon investigates read-only, extracts the drafted
comment, sanitizes it, and parks it. Draft ids carry no timestamp
(analyze-<owner>-<repo>-<n>), so there is exactly one pending
draft per issue — re-analysis overwrites it, and re-queuing while the same issue's ticket still
waits in the inbox fails loud rather than clobbering. review previews exactly what
would post, footer included; edit opens the draft in $VISUAL/$EDITOR;
post is the confirm gate — the only outward
write in the whole flow (the ticket carries no github: provenance block, so
lifecycle labels and finalize comments never touch the issue). The disclosure footer is a flag
composed at post time, not text in the draft; --no-footer drops it.
Sanitization
The issue text is untrusted input, and the draft becomes a public comment under your account — so
it is sanitized before parking: HTML comments stripped (closing off marker spoofing, where a
hostile issue steers the agent into emitting a fake junco:finding-shaped marker that
could poison the assess dedup scan), control characters stripped, length capped at 60,000
characters. An edited draft is re-sanitized on save; a run producing no fenced draft, or an empty
one after sanitizing, finalizes to failed/ — nothing parks.
Etiquette
gh identity on someone else's thread — it is your voice. Read the draft before
posting, the same way a hand-written comment gets read before submitting: no promised timelines,
no unreviewed prose calling out someone's issue.
The human gate is the control; the default-on footer is the backstop, telling readers the comment
was agent-drafted and human-reviewed, not auto-posted. Offline, the post queues durably to the
outbox and drains on the next flush or bridge sweep; the draft
archives to posted/ either way, so one parked entry never posts twice.