junco
contents

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

warn — on a repo you don't own, the comment posts under your own 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.