Skip to content

feat(onboard): detect GitHub Issues as the tracker (#59, part C) - #125

Merged
mmaclay merged 4 commits into
mainfrom
feat/59-github-issues-onboard
Nov 7, 2026
Merged

mmaclay merged 4 commits into
mainfrom
feat/59-github-issues-onboard

Conversation

@mmaclay

@mmaclay mmaclay commented Nov 7, 2026

Copy link
Copy Markdown
Member

This is the last part of #59. Parts A (#113, #115), B (#116) and D (#124) have merged.

Closes #59

What it does

onboard now recognises a repository whose tickets are GitHub issues. It lists the repository's issues and maps the labels to the workflow roles. Each recommendation carries the evidence for it: label counts, the references in pull request bodies, and the branch convention. The result is an issue_tracker: block with kind: github.

  • Where the issues live. By default the issues are taken to be this repository's. Onboard proposes another repository only in one case: this repository lists no issues, or has issues turned off, and at least two references name that same other repository. The references it reads are the forms in docs/contracts.md, "The record", including the issue URL.
  • Label checks. Onboard names any open issue that carries two of the labels it recommends mapping, because work refuses such an issue.
  • Mixed evidence. When the repository shows both Jira and GitHub Issues, onboard asks which tracker holds the tickets before asking anything about the workflow. If the chosen tracker's statuses or labels could not be read, it skips the workflow question.
  • Survey. The survey gains an issue key row covering issue-<n>, GH-<n> and <n>-words branch names and #<n> subjects. A number in a branch name now also ends at _, matching where.sh.

Also in this PR

The sandbox's reset() now restores origin/* from the local bare remote and deletes local branches other than the pinned branch and main, along with their config. Without this, the onboard setups broke PROJ-42-csv-loader for the other packs. A test covers a pin on a branch other than main.

Review

Three adversarial rounds, and every finding is applied, with one exception: a schema check of project.yaml through profile.py, which would need new machinery. After main (#123, #124) was merged in, bash tests/checks.sh --all passed all 12 steps, including the Python 3.9 run. When resolving the merge, ROADMAP's #59 row became a deferred row covering what is left: Projects fields, estimates and sub-issues.

Origin: #59
Sandbox: Haiku.

  • Before review: tracker-gh-onboard 10/10 on the branch and 0/10 on the current plugin; tracker-gh-onboard-mixed 10/10 and 0/10.
  • After the review fixes: tracker-gh-onboard 5/5. tracker-gh-onboard-mixed 5/5 once the check was loosened. One run asked "Which tracker holds the project's tickets" as a heading with no ?, and the old pattern missed it. With the new pattern all 10 baseline runs still fail.
  • trigger-pr-create ran on PROJ-42-csv-loader after the onboard pair, which confirms the reset fix.

Canary: none

🤖 Generated with Claude Code

mmaclay and others added 4 commits November 6, 2026 22:49
… the repository uses

The survey gains an issue key row: the GitHub issue keys in branch names
(issue-<n>, GH-<n>, <n>-words) and subjects (#<n>, GH-<n>), with the date
guard kept, and the ticket pattern they imply as where.sh reads a GitHub
tracker's branch. GH-<n> no longer names a Jira project.

onboard's step 2 reads the repository's issues and merged pull requests
when the history names no Jira project, proposes GitHub Issues, and asks
which tracker holds the tickets when the history names a Jira project
and GitHub holds issues too. Step 4 maps only the labels the issues carry
to the roles, leaves a role with no fitting label to the issue's state,
and proposes a ticket pattern only where the branches need one, asking
where they are mixed; project.yaml is written as issue_tracker:, never
jira:, with no location for the repository's own issues.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…es-onboard

The pack's scenarios keep #116's filing scenarios and add the onboard ones;
its test takes #116's WORK and DRAFT sets with ONBOARD beside them and the
stub's get_label beside onboard's two searches. The ROADMAP's #59 row
counts filing and onboard as landed, leaving the audit sweeps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Another repository is proposed as the issues' location only when this
one lists none and two references name it; references include the issue
URL form; labels to map are checked against open issues carrying two;
the workflow gate applies to the tracker chosen in the mixed case. The
sandbox reset restores origin's branches from the bare remote and drops
branches a setup made, so the onboard setups no longer break other
packs. ISSUE_BRANCH ends a number at `_` too, as where.sh does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mmaclay
mmaclay marked this pull request as ready for review November 7, 2026 18:02
@mmaclay
mmaclay merged commit 661131c into main Nov 7, 2026
1 check passed
@mmaclay
mmaclay deleted the feat/59-github-issues-onboard branch November 7, 2026 18:12
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.

Tracker role: GitHub Issues as a tracker adapter

1 participant