fabro/test
Scott Werner 8dfda7ede0 Reduce duplication in GitHub repository reads
Share the twin's handler scaffolding, collapse the reader's parallel URL
and error machinery, and resolve branch-head credentials once per verify.

Twin GitHub server:
- Add handlers/support.rs holding the response envelope, installation-token
  authorization, Accept matching, and commit-SHA checks. The commits and
  contents handlers carried byte-identical copies of all six items, and
  pulls.rs had its own copy of the two response mappers.
- Add AppState::find_repository and repository_mut, replacing four
  open-coded repository lookups.
- Add head_refs and heads_selector so the heads/{branch} mapping is
  spelled once instead of in add_repository, the fixture conversion, and
  the branch handler.
- Key repository files by commit SHA then path rather than by a
  (String, String) tuple, which drops two allocations and two full-map
  scans per content request.

Repository reader:
- Use DisplaySafeUrl, which removes the file-scope disallowed_types
  suppression and the direct url dependency. The suppression covered the
  whole module and everything later added to it.
- Build {api_base}/repos/{owner}/{repo} once when the session opens, so
  the URL builders become infallible methods and three unreachable
  cannot-be-a-base error paths disappear.
- Collapse the per-operation NotFound and Unavailable variants into ones
  carrying the operation, derive its rendering with strum, and mark the
  error non_exhaustive.
- Return the status classification as one Err(match), size the body
  buffer from Content-Length, and lowercase the resolved SHA in place.

Pull request pipeline:
- Open one reader before the branch-head retry loop instead of once per
  attempt. With App credentials each attempt previously minted a fresh
  installation token, costing two extra round trips per retry. Only the
  ref lookup is retried now; credential failures surface immediately.

Tests keep their coverage: one helper opens readers across eight call
sites, and the repository file fixtures become a table.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 15:15:43 -04:00
..
analysis feat(test): add DuckDB diff query for bench-tests CSVs 2026-04-28 09:27:05 -07:00
attractor feat(workflow): infer command nodes from the script attribute 2026-07-27 14:59:31 -04:00
bin feat(release): support prerelease builds 2026-04-14 15:43:00 -04:00
docs Shared-checkout parallel execution (recovered from run 01KY7YH7RYCJ1BDVTTP96ZA4HV) 2026-07-24 06:19:11 -04:00
dot-compatibility fix(graph): support dotted Fabro graph attributes (#324) 2026-05-20 09:31:08 -04:00
offline-fallbacks feat: add model-keyed fallback policies 2026-07-30 12:02:41 -04:00
templated_inputs fix(validate): pick up sibling workflow.toml inputs for bare .fabro path (#242) 2026-05-12 12:05:21 -04:00
templated_unbound_imported fix(validate): treat undefined template vars in @file prompts as warnings (#290) 2026-05-16 17:31:22 -04:00
templated_unbound_partial feat(template): resolve template error locations (#333) 2026-05-20 20:15:04 -04:00
templates fix(workflow): allow workflow-root template partials (#322) 2026-05-20 09:22:28 -04:00
twin Reduce duplication in GitHub repository reads 2026-08-19 15:15:43 -04:00
branching.fabro refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
conditions.fabro refactor(types): remove stage status compatibility 2026-04-30 06:48:47 -04:00
edge_only_node.fabro Reject nodes referenced by an edge but never declared 2026-07-27 13:53:54 -04:00
inferred_command.fabro feat(workflow): infer command nodes from the script attribute 2026-07-27 14:59:31 -04:00
invalid.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
parallel.fabro Shared-checkout parallel execution (recovered from run 01KY7YH7RYCJ1BDVTTP96ZA4HV) 2026-07-24 06:19:11 -04:00
server-model.fabro refactor: collapse the split validation paths 2026-07-28 14:13:45 -04:00
simple.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
styled.fabro Rename .dot files to .fabro and update all references 2026-03-13 22:27:19 -04:00
templated_unbound.fabro fix(validate): pick up sibling workflow.toml inputs for bare .fabro path (#242) 2026-05-12 12:05:21 -04:00