Implements part of the wayfinder ticket surface. Read first: the spec — the resolution comment on #112 — and CONTEXT.md's ### Wayfinder tickets section (on main, merged via PR #113), plus AGENTS.md. Use the spec's vocabulary exactly.
Spec §4; full API evidence on local branch research/github-subissues-dependencies (docs/research/github-subissues-dependencies.md).
- Wire types (
Issue, IssueState, SubIssuesSummary, DependenciesSummary) in src/github/types.rs after IssueComment — permissive #[serde(default)] posture.
fetch_wayfinder_map in src/github/graphql.rs (query verbatim from spec §4.1; envelope must impl GraphQlErrors), modelled on fetch_review_status/fetch_review_threads.
get_issue + list_issues_with_label in src/github/rest.rs beside list_issue_comments; get_all accepts only per_page — generalize or pre-bake the query string.
- Blocked-ness inputs come from the
blockedBy list filtered on state == OPEN — never the eventually-consistent summary counter. Keep each node's repository.nameWithOwner (External Dependency detection).
- Never call
GET …/parent; treat every 404 as a genuine error (it is — including the missing-Issues-scope case).
- Fallback detection only (spec §4.4): a map with zero sub-issues but a task-list body, or
Part of #n/Blocked by: #n leading lines, yields a "degraded dialect" signal for the effort card — no body-line parsing into the model.
- Parsers as pure
parse_* functions with fixture tests in graphql/tests.rs / rest/tests.rs.
Implements part of the wayfinder ticket surface. Read first: the spec — the resolution comment on #112 — and CONTEXT.md's
### Wayfinder ticketssection (onmain, merged via PR #113), plus AGENTS.md. Use the spec's vocabulary exactly.Spec §4; full API evidence on local branch
research/github-subissues-dependencies(docs/research/github-subissues-dependencies.md).Issue,IssueState,SubIssuesSummary,DependenciesSummary) insrc/github/types.rsafterIssueComment— permissive#[serde(default)]posture.fetch_wayfinder_mapinsrc/github/graphql.rs(query verbatim from spec §4.1; envelope mustimpl GraphQlErrors), modelled onfetch_review_status/fetch_review_threads.get_issue+list_issues_with_labelinsrc/github/rest.rsbesidelist_issue_comments;get_allaccepts onlyper_page— generalize or pre-bake the query string.blockedBylist filtered onstate == OPEN— never the eventually-consistent summary counter. Keep each node'srepository.nameWithOwner(External Dependency detection).GET …/parent; treat every 404 as a genuine error (it is — including the missing-Issues-scope case).Part of #n/Blocked by: #nleading lines, yields a "degraded dialect" signal for the effort card — no body-line parsing into the model.parse_*functions with fixture tests ingraphql/tests.rs/rest/tests.rs.