Skip to content

Repository files navigation

HYC results → Sail Scoring

Howth Yacht Club club-racing reference data, a maintained capture of the club's published results site, and the as-published ingest pipeline that feeds that history into Sail Scoring — kept out of the app repo, where reference/data/ is for small illustrative fixtures.

It is the HYC counterpart of the sibling dbsc-archive and iodai-archive repos, and the first archive built natively on the as-published model (app ADR-010, docs/design/decisions/010-as-published-archives.md): the originally-published results are ingested and displayed faithfully — structured ranks plus verbatim display cells — never re-scored.

📋 CLARIFICATIONS.md — known coverage gaps and approximations between the archive and the original published record.

Why

The payoff is the cross-series identity and ranking work on the Sail Scoring horizon (docs/design/horizon.md in the app repo — the competitor-identity spine, the workspace season ladder, the per-competitor multi-year career-arc page). Those features only come alive with years of real history in one workspace, and HYC's multi-season club racing — Howth 17s, Puppeteers, Squibs, cruisers under HPH/IRC, dinghies — is exactly that fuel.

It also keeps a bulky scraped corpus (~70 MB of published HTML and PDFs) out of the app repo.

What's here

2026-club-racing/         HYC's 2026 spring/summer reference data (see its README)
halsail-2025/             Puppeteer pilot — HalSail-import CSVs + build guide
scripts/
  ftp-paths.ts            resolve the catalogue → JSON for the app's update-ftp-paths
  emit-as-published-config.ts  admin CSVs + capture → as-published.config.json
  admin/                  hyc.ie admin scrapers (the capture tooling, from reshyc)
sources/
  reshyc/                 the published results-site capture (see SOURCES.md)
    results.hyc.ie/reshyc/  the FTP-site backup, seasons 2011–2026
    admin/                  per-year (event, class) → page catalogues, with the
                            display names the club published under
    summaries/              yearly prize-winner summary PDFs, 1996–
Makefile                  the capture targets: backup / admin-backup / summaries-backup
as-published.config.json  generated ingest config (committed; input to the app's
                          archive-generate)
as-published-skips.json   series the archive-kit can't ingest yet, with reasons
.github/workflows/
  backup-ftp.yml          daily FTP-site capture → PR → auto-merge
  backup-admin.yml        daily admin-DB capture → PR → auto-merge
  backup-summaries.yml    on-demand summaries capture → PR → auto-merge
  as-published.yml        emit → generate → push to the hyc workspace (gated)

The capture automation moved here from markmc/reshyc (which pre-dates Sail Scoring); the origin repo retains the pre-2026 history.

The pipeline

  1. Capture — daily workflows mirror the FTP results site and the admin DB into sources/reshyc/ (verbatim, third-party, never edited).
  2. Emitpnpm emit-as-published joins the admin catalogues (display names) to the captured pages: one as-published series per (year, club/open, event), one fleet page per class at /p/hyc/{year}/{event}/{class}, with deterministic UUIDv5 series ids that can never re-mint. Coverage gaps are reported, never papered over.
  3. Ingest — CI checks out the app repo, runs pnpm archive-generate over the config (parsing the Sailwave HTML), and pushes the documents with pnpm cli as-published push … --workspace hyc, authenticated by a workspace- and capability-scoped archivist token. Ingest is idempotent — unchanged documents are no-ops by content hash. Not yet armed: the push step is skipped until SAILSCORING_ARCHIVIST_TOKEN is configured.

Currently: 371 series / 1,312 fleet pages / ~15,000 competitor rows across 2013–2025 emit and generate cleanly; see CLARIFICATIONS.md for what doesn't (and why).

Relationship to the app repo

This repo assumes the sibling app checkout exists at ../sailscoring. Two things deliberately stay in the app, next to the code they document:

  • the Sailwave importer behaviour reference (../sailscoring/docs/notes/sailwave/import-behaviour.md) — it documents shipped behaviour of lib/sailwave-import.ts;
  • the NHC1 reverse-engineering write-up (../sailscoring/docs/notes/sailwave/nhc1-reverse-engineering.md) — distilled docs; it points back at the .xls / .py sources here.

The as-published toolkit (parsers, generator, ingest client) lives in the app's lib/archive-kit/ and is driven from here via config; the generic FTP-path threading also lives in the app (../sailscoring/scripts/update-ftp-paths.ts), with scripts/ftp-paths.ts here as the HYC-specific caller.

Status

  • ✅ Reference data + reshyc capture vendored (this extraction, app issue #233).
  • ✅ Capture automation (FTP, admin DB, summaries) moved here from reshyc.
  • ✅ As-published config emission + clean archive-generate run over 2013–2025.
  • ⬜ Arm the ingest: provision the hyc workspace archivist token and CI secrets.
  • ⬜ Extend coverage: single-race pages (the skip-list); the ~1,170 captured pages the admin catalogue never linked (all of 2011–2014 plus later revision/overall pages), which need display names sourced some other way; the identity manifest; prize-winner (summaries/) data — mirror dbsc-archive's yearbook/.
  • ⬜ Thread the 2026 live-series FTP paths into the HYC workspace.

Licensing

Our own code and derived artifacts are MIT (LICENSE); normalised data we produce is CC0 (LICENSE-DATA). The verbatim captured pages and PDFs under sources/reshyc/ are third-party HYC output, kept for reproducibility and not relicensed.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages