feat: tldr-style page contribution, publish & sync pipeline#1
Merged
Conversation
build_layered_index_with_overlay now folds the on-disk upstream tree at $XDG_DATA_HOME/loran/pages/ (written by `loran update`) over the bundled core, by name, beneath the distro/user overlays. Previously the read verbs only consulted the compiled-in bundled pages plus overlays, so a freshly downloaded catalog was extracted but never surfaced — the update→read loop was open. Tests: a download-only tool now resolves via `loran show`, and the full precedence chain (bundled < downloaded upstream < user overlay) is locked. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: UnbreakableMJ <Mohamed.Hammad@SpacecraftSoftware.org>
Client side of the tldr-pages-style contribution + sync pipeline: - Opt-in auto-update: read verbs refresh a stale upstream catalog before building the index (off by default). Configured via ~/.config/loran/config.toml [update] auto_update / auto_update_interval, with LORAN_AUTO_UPDATE / _INTERVAL env overrides. Best-effort and non-fatal — a failed refresh falls back to the cached/bundled catalog. - New global --offline (and LORAN_OFFLINE) suppresses network access. - New loran-core::config_home() (XDG_CONFIG_HOME-aware on every platform). - loran validate <ROOT> validates an arbitrary tree upstream-strict — the CI gate for a pages repo; exits 2 on a non-directory path. - Repoint the publisher endpoint to the loran-pages GitHub Releases (releases/latest/download/...); PUBLISHER_PUBLIC_KEY left as a marked launch TODO. Reuses the existing FetchClient / update_pages / SourceMetaStore / verify_any machinery; no new async, no new runtime network on the default path. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: UnbreakableMJ <Mohamed.Hammad@SpacecraftSoftware.org>
Add OPERATIONS.md §2 "Producing & publishing the pages tarball" — the loran-pages build-pages.sh / publish.yml flow, signing-key location, the release cadence, and a first-launch checklist (generate the real keypair, bake PUBLISHER_PUBLIC_KEY, cut a coordinated Loran release). Renumber the rotation sections to §3-§7 and update cross-references. Resolves the gap where the runbook covered key rotation but not the day-to-day build/sign/publish that feeds `loran update`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: UnbreakableMJ <Mohamed.Hammad@SpacecraftSoftware.org>
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.
Adds the producer + contribution + sync half of the Loran catalog pipeline (the part PRD NG-09 deferred), and closes a latent gap where
loran updatedownloaded pages nothing ever read. Companion content repo: Spacecraft-Software/loran-pages (private, scaffolded separately).What's here (3 commits)
fix(index)—build_layered_index_with_overlaynow folds the on-disk upstream tree$XDG_DATA_HOME/loran/pages/(written byloran update) over the bundled core, beneath distro/user overlays. Before this the downloaded catalog was extracted but never surfaced — the update→read loop was open.feat(cli)— opt-in catalog auto-update (off by default;~/.config/loran/config.toml [update]+LORAN_AUTO_UPDATE/_INTERVAL), best-effort & non-fatal; new global--offline(+LORAN_OFFLINE); newloran-core::config_home();loran validate <ROOT>(upstream-strict CI gate for a pages repo); publisher endpoint repointed to theloran-pagesGitHub Releases.PUBLISHER_PUBLIC_KEYleft as a marked launch TODO.docs(ops)—OPERATIONS.md §2documents the producer/publish flow + a first-launch checklist; rotation sections renumbered §3–§7.Reuses the existing
FetchClient/update_pages/SourceMetaStore/verify_anymachinery. No new async, no surprise network on the default path.Verification
cargo fmt --check,cargo clippy --workspace --all-targets -D warnings,cargo test --workspace,cargo xtask check-spdx(100 files).show.rs);validate <ROOT>cases (validate.rs); auto-update non-fatal/offline/default-off (autoupdate.rs).build-pages.sh→ deterministicpages.tar.gz→ extract into a temp XDG home →loran show/listread it.Launch dependencies (not in this PR)
PUBLISHER_PUBLIC_KEY, addMINISIGN_SECRET_KEY/MINISIGN_PASSWORDto theloran-pagesrepo (OPERATIONS.md §2.4).loran-pagesCI (cargo install loran→loran validate <ROOT>) go green.🤖 Generated with Claude Code