docs: ticket sweep handoff — state, findings, remaining work - #44
Conversation
Add the per-repo configuration the engineering skills assume: - AGENTS.md with an `## Agent skills` block pointing at the three docs. Uses AGENTS.md rather than CLAUDE.md because .gitignore excludes the latter, which would have kept the config local to one clone. - docs/agents/issue-tracker.md - GitHub via `gh`, scoped to this fork (`origin`, JMAN730/opendroid); the upstream remote is off limits. External PRs are not a triage surface. Includes the wayfinding operations `/wayfinder` relies on. - docs/agents/triage-labels.md - the five canonical triage roles, each mapping to a label of the same name; all five now exist on the repo. - docs/agents/domain.md - single-context layout (CONTEXT.md + docs/adr/), noting that the existing docs/*.md are background, not the glossary. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Six design tickets closed (#22 #23 #30 #33 #39 #40), both wayfinder map bodies updated, and two open PRs advanced. Captures the remaining 13 open issues in dependency order plus the security findings that came out of the sweep, so the work can resume without re-deriving it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: df50aa0eb7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Confidence Score: 4/5Safe to merge once the #37 and #42 branching omission is addressed; all other docs are well-structured and internally consistent Tickets #37 and #42 are listed under 'Ready now, no blockers' but both require branching from PR #36's branch rather than main. Unlike #46, which explicitly tells the agent to choose between waiting for the related PR or branching from its branch, #37 and #42 give no such instruction. An agent using the frontier-query logic will claim either ticket and branch from main; the Room migration for #37 then runs against the wrong schema, and with .fallbackToDestructiveMigration() active, the user's database is silently dropped at the next app launch. Files Needing Attention: docs/agents/ticket-sweep-handoff.md — the #37 and #42 entries under 'Ready now, no blockers' need explicit branching instructions matching those already present for #46
|
| Filename | Overview |
|---|---|
| docs/agents/ticket-sweep-handoff.md | Core handoff document recording sweep state, open findings, and resume instructions; #37 and #42 listed as 'Ready now, no blockers' but carry an implicit branch dependency on PR #36 without the explicit guidance given to #46 |
| docs/agents/issue-tracker.md | Establishes gh CLI conventions and wayfinder operations; the blocked_by REST endpoint and Resolve/map-edit contradiction are flagged in prior threads |
| docs/agents/triage-labels.md | Maps canonical triage roles to tracker label strings; column header 'Label in mattpocock/skills' is a leftover template artifact |
| AGENTS.md | New top-level agent guidance file establishing fork as the only issue tracker and pointing to domain, issue-tracker, and triage-labels docs |
| docs/agents/domain.md | Documents single-context repo structure and instructs agents to read CONTEXT.md + ADRs before exploring; no issues found |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Driving session reads\nticket-sweep-handoff.md] --> B[Frontier query:\npick next unblocked ticket]
B --> C{Ticket stacks on\nan unmerged PR?}
C -->|#37 and #42 stacks on PR 36\nbut NO explicit instruction| D[Agent assumes main and branches from main]
C -->|#46 stacks on PR 38\nexplicit either/or given| E{PR #38 merged?}
C -->|#31 / #32 / #24\nno branch dep| F[Branch from main]
E -->|Yes| F
E -->|No| G[Branch from PR #38 branch]
D --> H[Room schema mismatch with fallbackToDestructiveMigration active causes user DB to be silently dropped]
F --> I[Spawn ticket agent max 2 at a time]
G --> I
I --> J[1. Read AGENTS.md and issue-tracker.md]
J --> K[2. Post findings comment and close ticket before polishing]
K --> L[3. Leave context pointer as comment on closed ticket]
L --> M[Driving session appends batch to map Decisions-so-far]
M --> N{More tickets?}
N -->|Yes| B
N -->|No| O[Close maps #25 and #18 when all children done]
Reviews (3): Last reviewed commit: "docs: reconcile the map-edit rule betwee..." | Re-trigger Greptile
|
@claude can you fix the greptile review |
- Put `--repo JMAN730/opendroid` on every `gh issue` and `gh pr` example. The examples omitted it while the handoff warns that `gh` defaults to the forbidden upstream remote, so an agent copying them verbatim could mutate tickets there. - Exempt `gh api` from that instruction. It has no `--repo` flag and exits with an unknown-flag error; the repository belongs in the endpoint path. - Stop calling PR #38 "landed". It has not merged. Say where its commits actually live and give both sequencing options. - File the credential-leak fix as #46 and reference it. The resume flow is ticket-driven, so an item with no ticket had nothing to claim, close, or record on the map.
|
Review addressed in Fixed
Not fixed — the finding is incorrect Non-standard GitHub REST endpoint for It returns #29, the blocker recorded on #34 — a 200 with the dependency, not a 404. |
issue-tracker.md's Resolve step told each wayfinder session to append a context pointer to the map body; the handoff's resume step told ticket agents not to touch map bodies at all. An agent reading both, as resume step 1 instructs, got contradictory orders, and "do those centrally" never said who did the central pass or when. Both files now agree: during a sweep the agent leaves its pointer as a comment on the ticket it closed, and the driving session appends to the map after each batch. Says explicitly that batching to the end of the sweep is the failure mode to avoid.
|
Second round addressed in Resolve step in Resolved the three remaining threads: the two codex ones are fixed in |
Records where the ticket sweep stopped so it can resume on another machine.
Closed this session
Six design tickets, each with full reasoning posted before closing: #22, #23, #30, #33, #39, #40. Both map bodies (#25, #18) updated with a decision entry per closed ticket.
Security findings (not yet fixed)
main—OpenAIProvider.kt:65interpolates the raw 401 body (which echoes the key's first 8 + last 4 chars) into anIOException, which reaches logcat,task_history, the Logs screen, a persisted chat message, and then off-device viaAgentLoop.kt:413feeding the last 10 messages into the next request.CustomOpenAIProvider.isAvailable()returnstrueunconditionally while defaulting toapi.openai.com/v1, so an unconfigured provider sends prompts, notification bodies, and screenshots to OpenAI with an empty bearer.Throwable.messageverbatim.Also corrected
Map #25 asserted that
executeWithFallbackships the cross-provider fallback. It has zero call sites and has never run — the live path isgetActiveProvider. Map body fixed.Open question
#34 is titled "post upstream", but
AGENTS.mdforbids writing toyashab-cyber/opendroid. Nothing has been posted upstream; needs a decision before #34 runs.Full detail, including the remaining 13 issues in dependency order, in the added file.