Repository navigation
Share reproducible pack recipes through a GitHub registry - #171
Merged
Merged
Conversation
docpull index build turns locked project runs into SQLite FTS shards of page URLs, titles, and headings, with no page bodies, and records each shard's sha256 in manifest.json. docpull index pull downloads shards from an explicit HTTPS manifest URL through the DNS-pinned private-network guard, refuses redirects, enforces a total size limit, and installs only shards that match their sha256. docpull search --backend index and serve --compat --search-backend index search installed shards without sending the query anywhere. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docpull registry export writes a pack's public crawl sources, pinned page URLs, and per-page content hashes, never fetched content, and refuses sources that use auth. docpull add name@version downloads the recipe through the registry index with a sha256 check, adds and syncs the sources, and reports which pages still match. Registry recipes may only use https crawl sources, so a recipe cannot point add at local files or typed specs. docpull registry verify repeats the comparison later. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…into feat/pack-registry # Conflicts: # docs/CHANGELOG.md # docs/cli-recipes.md # docs/surface-contract.md # src/docpull/cli.py # src/docpull/surface.py
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.
This PR shares packs as recipes: pinned public sources plus the content hash of each page the publisher saw. A recipe never contains fetched content. Anyone can reproduce a recipe locally and see exactly which pages changed since it was published.
It stacks on #169 because it reuses
discovery_index._fetch_bytes. The base moves tomainwhen #169 merges.Commands
docpull registry export --name N --version V [--description D] [--out FILE]discovered_urls, and a{url: content_hash}map per source from the locked run. It prints the recipe's sha256.auth.docpull add name@version(orname@latest):index.jsonfrom the registry, then downloads the recipe and checks it against the sha256 in the index. Downloads reuse the HTTPS-only, DNS-pinned, no-redirect fetcher from Add an offline discovery index of downloadable search shards #169..docpull/registry/.Drift is reported but never fails the command.
docpull registry verify name@version [--json]repeats the comparison after a later sync, without fetching.Registry location: defaults to
https://raw.githubusercontent.com/raintree-technology/docpull-registry/main/. SetDOCPULL_REGISTRY_URLto use another registry.Security
auto,html,pdf,markdown,github,sitemap). A recipe therefore can't pointaddat local files (for example adatasetpath) or at typed specs.extra="forbid", and the servedname@versionmust match the request.addcalls behave as before. A test checks thatreact, an HTTPS URL,npm:react@18.3.1, andowner/repo@v1never reach the registry.Not included
registry listand search: add once there are more packs.Checks
tests/test_registry.py:latesthttp://sources rejectedaddsyncs and reports 1 match and 1 change for a changed pageregistry verify --jsonaddinputsbun run validate:fullpasses: 1,077 Python tests pass and 18 are skipped. Lint, mypy, the JS SDK, and the reproducible build also pass.🤖 Generated with Claude Code