feat: establish standalone Argand Site Registry
This commit is contained in:
commit
2a0fe1714b
60 changed files with 10494 additions and 0 deletions
110
README.md
Normal file
110
README.md
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
# Argand Site Registry
|
||||
|
||||
Evidence-backed website identity and regional resolution, as a Rust library and CLI.
|
||||
|
||||
Look up an entity's names, aliases and websites; inspect each source assertion;
|
||||
resolve an explicitly reviewed primary or regional destination. Sources, conflicting
|
||||
claims, licenses and review history remain available for audit. Everything runs
|
||||
locally with SQLite. No search engine, hosted account or GPU is required.
|
||||
|
||||
`facebook → Facebook → facebook.com` is a name-to-entity-to-registrable-domain
|
||||
lookup. The retained real Wikidata Facebook record has `www.facebook.com` and
|
||||
`m.facebook.com` as distinct properties. Its Amazon record includes `amazon.com`,
|
||||
`amazon.co.uk` and `amazon.de` on the same entity. Similar hostname spelling never
|
||||
establishes common ownership. Imported links await review before `resolve` can
|
||||
return a destination; source confidence is not a malware-safety guarantee.
|
||||
|
||||
## Build and try it
|
||||
|
||||
Linux is the currently validated platform. Install Rust (tested with 1.98.1; the
|
||||
inherited minimum is 1.97), a C compiler, CMake, Perl and OpenSSH (`ssh-keygen`).
|
||||
Python 3.11+ is needed for release tooling and the Python example. SQLite is built
|
||||
with the binary. From the root of this source checkout or extracted release:
|
||||
|
||||
```bash
|
||||
cargo fetch --locked
|
||||
cargo build --release --locked --offline -p argand-site-registry
|
||||
./target/release/argand-site-registry --help
|
||||
```
|
||||
|
||||
If your Cargo configuration sets a different target directory, set
|
||||
`CARGO_TARGET_DIR="$PWD/target"` before these commands. To install the CLI:
|
||||
|
||||
```bash
|
||||
cargo install --path crates/argand-site-registry --locked --offline
|
||||
argand-site-registry --help
|
||||
```
|
||||
|
||||
Run the native all-source example in a **new directory outside the checkout**:
|
||||
|
||||
```bash
|
||||
ARGAND_REGISTRY_E2E_OUTPUT=/tmp/site-registry-example \
|
||||
cargo test -p argand-site-registry --test cli --locked --offline -- --nocapture
|
||||
```
|
||||
|
||||
It imports synthetic Wikidata, Majestic, CrUX, Curlie and PSL fixtures, checks
|
||||
idempotency, joins explicitly reviewed identities, approves a destination, signs
|
||||
and activates it, revokes it, and rejects rollback past that revocation. Fixture
|
||||
signing keys and approvals are disposable test material. All production inputs
|
||||
belong in a configurable data/cache directory outside the source checkout.
|
||||
|
||||
Follow the [operator guide](crates/argand-site-registry/README.md) for actual
|
||||
downloads, imports, regional reviews, signed datasets and weekly candidate updates.
|
||||
CrUX acquisition requires explicit credentials and a billing cap. No source
|
||||
downloads or scheduled jobs run during installation or tests.
|
||||
|
||||
## Use it in another project
|
||||
|
||||
The [Rust example](crates/argand-site-registry/examples/lookup.rs) opens a generation
|
||||
once with an externally trusted receipt hash and returns the full lookup envelope.
|
||||
The [Python example](examples/lookup.py) calls the same native CLI; it does not
|
||||
implement a second resolver. Both preserve attribution and fact provenance.
|
||||
|
||||
```bash
|
||||
cargo run --locked --offline -p argand-site-registry --example lookup -- \
|
||||
--generation /data/registry/generation --pin "$REGISTRY_TRUSTED_PIN" --query facebook
|
||||
|
||||
python3 examples/lookup.py --binary ./target/release/argand-site-registry \
|
||||
--generation /data/registry/generation --pin "$REGISTRY_TRUSTED_PIN" --query facebook
|
||||
```
|
||||
|
||||
Obtain the pin from a trusted publisher channel or verify the release signature
|
||||
against an independently configured key. Reading a hash from the same untrusted
|
||||
download does not authenticate it. Never turn `lookup.candidates[0]` into an
|
||||
automatic destination: use the native `resolve` result and your application's
|
||||
own admission policy. A null destination is a meaningful abstention.
|
||||
|
||||
The [consumer contract](docs/CONSUMERS.md) covers Rust dependencies, CLI JSON,
|
||||
SQLite/JSONL distribution, compatibility and Argand's eventual upstream cutover.
|
||||
|
||||
## Sources and trust
|
||||
|
||||
Wikidata (CC0), Majestic Million (CC BY 3.0), CrUX (CC BY 4.0), Curlie (CC BY 3.0)
|
||||
and the Public Suffix List (MPL 2.0) remain logically separate. Read the exact
|
||||
[source licenses and attribution rules](LICENSE_SOURCES.md) before redistribution.
|
||||
Curlie attribution applies to names and categories as well as descriptions.
|
||||
|
||||
The [trust policy](docs/TRUST.md) explains enforced checks, publisher responsibilities,
|
||||
evidence standards, expiry and revocation. [CONTRIBUTING.md](CONTRIBUTING.md),
|
||||
[GOVERNANCE.md](GOVERNANCE.md) and [SECURITY.md](SECURITY.md) cover contributions,
|
||||
decisions, disputes and incidents. Pull requests cannot directly approve destinations.
|
||||
|
||||
## Development and releases
|
||||
|
||||
```bash
|
||||
cargo fetch --locked
|
||||
bash scripts/check.sh
|
||||
```
|
||||
|
||||
The check runs formatting, all-target compilation, strict Clippy, Rust tests and
|
||||
documentation, Python release tests, and native Rust/Python consumer parity.
|
||||
[RELEASING.md](docs/RELEASING.md) covers deterministic source archives, signature
|
||||
verification and rebuilding outside the checkout. The Forgejo workflow requires
|
||||
a dedicated isolated runner; it has no signing or dataset-promotion authority.
|
||||
|
||||
The code remains **AGPL-3.0-or-later**; the complete license is in [LICENSE](LICENSE).
|
||||
Original attribution is retained. [UPSTREAM.json](UPSTREAM.json) records the signed
|
||||
Argand extraction revision and original file hashes. This initial independent
|
||||
package preserves the existing registry runtime and schema. Hosted publication,
|
||||
runner provisioning and changing Argand's dependency require separate completion;
|
||||
the initial extraction does not itself establish any of those states.
|
||||
Loading…
Add table
Add a link
Reference in a new issue