Skip to content

docs: ticket sweep handoff — state, findings, remaining work - #44

Merged
JMAN730 merged 4 commits into
mainfrom
JMAN730/ticket-sweep-handoff
Jul 29, 2026
Merged

docs: ticket sweep handoff — state, findings, remaining work#44
JMAN730 merged 4 commits into
mainfrom
JMAN730/ticket-sweep-handoff

Conversation

@JMAN730

@JMAN730 JMAN730 commented Jul 29, 2026

Copy link
Copy Markdown
Owner

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)

  • Live credential leak on mainOpenAIProvider.kt:65 interpolates the raw 401 body (which echoes the key's first 8 + last 4 chars) into an IOException, which reaches logcat, task_history, the Logs screen, a persisted chat message, and then off-device via AgentLoop.kt:413 feeding the last 10 messages into the next request.
  • Cross-vendor exfiltrationCustomOpenAIProvider.isAvailable() returns true unconditionally while defaulting to api.openai.com/v1, so an unconfigured provider sends prompts, notification bodies, and screenshots to OpenAI with an empty bearer.
  • Merge-order constraint — PR feat: on-device crash log, plus CI to run the tests #36 should not merge ahead of the redaction work; its Share button dumps Throwable.message verbatim.

Also corrected

Map #25 asserted that executeWithFallback ships the cross-provider fallback. It has zero call sites and has never run — the live path is getActiveProvider. Map body fixed.

Open question

#34 is titled "post upstream", but AGENTS.md forbids writing to yashab-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.

JMAN730 and others added 2 commits July 28, 2026 23:56
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>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread docs/agents/issue-tracker.md Outdated
Comment thread docs/agents/ticket-sweep-handoff.md Outdated
Comment thread docs/agents/ticket-sweep-handoff.md Outdated
Comment thread docs/agents/issue-tracker.md
Comment thread docs/agents/ticket-sweep-handoff.md Outdated
@greptile-apps

greptile-apps Bot commented Jul 29, 2026

Copy link
Copy Markdown

Confidence Score: 4/5

Safe 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

Important Files Changed

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]
Loading

Reviews (3): Last reviewed commit: "docs: reconcile the map-edit rule betwee..." | Re-trigger Greptile

@JMAN730

JMAN730 commented Jul 29, 2026

Copy link
Copy Markdown
Owner Author

@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.
@JMAN730

JMAN730 commented Jul 29, 2026

Copy link
Copy Markdown
Owner Author

Review addressed in c74ed34. Three of the four findings were valid and are fixed; one is not correct and the doc is unchanged there.

Fixed

Not fixed — the finding is incorrect

Non-standard GitHub REST endpoint for blocked_by (greptile, P1). The endpoint exists and works on this repo. Run against the live API:

$ gh api repos/JMAN730/opendroid/issues/34/dependencies/blocked_by
[{"url":"https://api.github.com/repos/JMAN730/opendroid/issues/29", ...

It returns #29, the blocker recorded on #34 — a 200 with the dependency, not a 404. dependencies/blocked_by is GitHub's REST surface for issue dependencies and is distinct from sub_issues, which represents parent/child rather than blocking. The two are used for different edges and the doc already describes both separately. Left as written.

Comment thread docs/agents/ticket-sweep-handoff.md Outdated
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.
@JMAN730

JMAN730 commented Jul 29, 2026

Copy link
Copy Markdown
Owner Author

Second round addressed in 54ddb43.

Resolve step in issue-tracker.md contradicts step 4 here (greptile, P1) — valid, and the "who does it centrally" gap was real. Both files now say the same thing: during a sweep the ticket agent leaves its context pointer as a comment on the ticket it just closed, and the driving session appends to the map after each batch. Added as an explicit step 5 naming the owner and the trigger, with a cross-reference from issue-tracker.md's Resolve step, and a note that deferring all map edits to the end of the sweep is the exact failure this handoff exists to recover from.

Resolved the three remaining threads: the two codex ones are fixed in c74ed34, and the blocked_by endpoint one is answered above with a live API response showing a 200 rather than the predicted 404. Checks are green.

@JMAN730
JMAN730 merged commit 47ff5b1 into main Jul 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant