board-ingest: pull GitHub issues into board cards#50
Merged
Conversation
WHAT: Add a `board-ingest` step that lists open GitHub issues via `gh` and
upserts a board card per issue — the ingestion half of the retired
board-scan workflow (modulex already had the card storage).
Per repo (spec.repos or shared.github_repos):
gh issue list -R <repo> --state open --json number,title,url,labels --limit N
Each issue → store.card_add with a STABLE card_id `gh-<owner>-<repo>-<number>`
so re-runs upsert (idempotent), never duplicate:
- lane = highest priority label p0/p1/p2, else [board] default_lane (→ p2)
- summary = issue title
- status = "blocked" if a blocked label is present
- refs {issue: <url>}; source = "github", source_id = <url>
All-auth-failed soft-skips with the gh auth login hint (parity with
github-pr-scan); soft-skips without a store. `limit` param (default 100).
data_schema {repos:[{repo, state, ingested, card_ids}]}; golden pinned.
This step WRITES to the store mid-routine, like url-watch — so "good
morning" can refresh the board from GitHub before showing it.
Disclosure tier: step. Registered + documented + data-contract + golden.
FIXTURE-SYNC: the gh issue-list JSON shape is exercised by
tests/live_contract.rs::live_gh_pr_list_json_shape.
Fixes #49
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes the ingestion gap noted when retiring the
board-scanskill: modulex had card storage but nothing to populate the board from a tracker. Adds aboard-ingeststep that turns open GitHub issues into board cards.Per repo (
spec.reposorshared.github_repos):gh issue list -R <repo> --state open --json number,title,url,labels --limit <N>(viaExecGate), thenstore.card_addper issue with a stablecard_idgh-<owner>-<repo>-<number>so re-runs upsert, never duplicate:lane= highest priority labelp0/p1/p2, else[board] default_lane(→p2)summary= title;status=blockedif ablockedlabel is presentrefs {issue: <url>};source=github,source_id=<url>Soft-skips: no store; all-repos-auth-failed (with the
gh auth loginhint, parity withgithub-pr-scan).limitparam (default 100).data_schema{repos:[{repo, state, ingested, card_ids}]}— golden pinned.This step writes to the store mid-routine (like
url-watch), so a "good morning" routine can refresh the board from GitHub before rendering it (board-ingest→board).Disclosure tier: step.
Fixes #49
Test plan
just checkgreen (fmt + clippy -D warnings + all tests incl. golden + data-contract; EXIT=0).lane_for_picks_highest_priority_then_default,ingests_issues_as_cards_idempotently(p0/p1+blocked/default mapping, source fields, runs twice → still 3 cards),auth_failure_soft_skips,no_store_soft_skips.🤖 Generated with Claude Code