cologne-pages-landing
Use this skill when the user asks to run the migrated source command cologne-pages-landing.
Command Template
/cologne-pages-landing <REPO|all>
Created: 06-07-2026 · Last updated: 05-09-2026
Default path (seconds — run this first)
python ~/Documents/GitHub/Uprava/tools/cologne_pages_landing.py --dry-run
LLM / judgment residue only after the script report exists (or the script exits non-zero with a real defect).
Give every Cologne dictionary repo a proper GitHub Pages front door: a single
self-contained index.html (SEO meta + Open Graph + JSON-LD Book schema +
styled hero/CTA layout) plus .nojekyll so Pages serves it statically.
Default path — run the script, don't hand-roll discovery again.
Uprava/tools/cologne_pages_landing.py
(H2790, Sonnet 5 — ZJ pages-landing deploy) is the mechanical port of Phases 0/3 below: it set-diffs local
sanskrit-lexicon/* clones for a missing SEO landing, applies the same
csl-*/tooling skip-rules, and — for any repo whose facts are already filled
into its DICT_FACTS table — opens the PR via the same chassis as
cologne_batch_deploy.py.
cd ~/Documents/GitHub/Uprava
python tools/cologne_pages_landing.py --dry-run # set-diff, read-only (default)
python tools/cologne_pages_landing.py --selftest # fixture + GRA/MD template round-trip
python tools/cologne_pages_landing.py --pr --repo <CODE> # open the PR (needs DICT_FACTS[<CODE>] filled first)
A repo the script reports NEEDS_FACTS has no index.html but no
DICT_FACTS entry yet — do Phase 2 below by hand (or LLM), add the entry to
DICT_FACTS in the script, then re-run --pr --repo <CODE>. A repo reported
NEEDS_REVIEW has a real non-SEO index.html — read it before touching
anything; the script never overwrites it.
Gold-standard reference implementations (structure only — do NOT redesign):
~/Documents/GitHub\GRA\index.html(German-title dict)~/Documents/GitHub\MD\index.html(English-title dict)
The phases below are the manual/fallback procedure the script encodes — read them to understand why the script does what it does, or when the script itself needs a fix, not as the everyday runbook.
Phase 0 — Target discovery (script does this — --dry-run)
Argument = one repo code (e.g. SKD) or all.
Exclusions (mirrored in the script's TOOLING_SKIP set + csl-* prefix rule):
- Skip tooling/infra repos (csl-pywork, csl-orig, csl-corrections, csl-apidev, csl-websanlexicon, cologne-data, csl-* generally) — this skill is for dictionary repos whose Pages site is a landing page, not an app.
- Skip repos with a non-SEO
index.htmlthat is a real app/site (check before overwriting — ifindex.htmlexists but has noog:site_name, READ it first; only replace trivial redirect/placeholder pages, never a functioning site). - csl-orig is never touched (org rule).
Phase 1 — Publish-safety gate (cheap form)
These repos are already public and the landing page contains only
already-public bibliographic facts, so the full /publish-safety-check is
normally not needed. Run it ONLY if the target repo is private or the page
would surface anything beyond title/author/year/description/scan-link.
Phase 2 — Gather per-dictionary facts
For each target, collect (from the repo README, prefaces/, and
CDSL):
| Fact | Example (GRA) |
|---|---|
| Full title | Wörterbuch zum Rig-Veda |
| Code badge | GRA |
| Author + place, year | Hermann Grassmann · Leipzig, 1873 |
| One-sentence description | "…complete concordance-dictionary of the Ṛgvedic vocabulary…" |
| Canonical URL | https://sanskrit-lexicon.github.io/GRA/ |
| Browse URL | https://www.sanskrit-lexicon.uni-koeln.de/scans/GRAScan/2020/web/webtc/indexcaller.php |
| License | CC-BY-SA-4.0 (per RH1 policy; check the repo's actual LICENSE) |
Verify the Browse URL actually resolves (HTTP 200) before baking it in — the
<CODE>Scan/2020/web/webtc/indexcaller.php pattern holds for most but not all
dictionaries. If Cologne is unreachable, check
Uprava/SERVER_OUTAGES.md
before concluding the URL is wrong.
Phase 3 — Deploy (script does this — --pr)
Per target repo:
- Write
index.htmlfrom the gold-standard template with the facts substituted (title/desc in<title>,meta description, OG, Twitter, JSON-LD, hero). Keepog:image=https://sanskrit-lexicon.github.io/cdsl-card.png. The script'sTEMPLATE/build_landing_html()does this fromDICT_FACTS. - Write empty
.nojekyllat root (this was a follow-up fix commit in every first-wave repo — bake it in from the start). - Opens a PR on branch
cologne-pages-landing/<CODE>via thecologne_batch_deploy.open_file_prchassis (GitHub-API writes, not a local commit+push — see that module's docstring for why). - Check Pages is enabled:
gh api repos/sanskrit-lexicon/<REPO>/pages. If 404, enable from the default branch root:gh api repos/sanskrit-lexicon/<REPO>/pages -X POST \ -f "source[branch]=<default>" -f "source[path]=/" - After Pages builds, verify the live URL returns the new page (poll a couple of minutes max; if the build lags, log it and move on).
Cap parallelism at 4. Continue past per-repo errors; log DONE/ERROR per repo.
Phase 4 — Roll-up + hygiene
- Emit a table:
| Repo | Result | Live URL | Commit |. - Append to each touched repo's
.ai_state.md## ✅ Completed:- DD-MM-YYYY: /cologne-pages-landing — SEO landing + .nojekyll live. - If this was an
allrun, note remaining skips (real-app index.html repos, unreachable scan URLs) so the next run knows they were deliberate.
Notes for future maintenance
- The page is one self-contained file: inline CSS, no JS, no external assets except the shared OG card image. Keep it that way.
- If the shared design changes, update GRA/MD first (they are the reference), then re-run this skill in explicit-replace mode (a human decides when).
/cologne-onboard-reposhould include this skill for any newly adopted dictionary repo.
Dr. Mārcis Gasūns