You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jul 20, 2026. It is now read-only.
Title: Proposal: numerai-crypto-signals as Knitweb's first real consumer (pulse fabric + gither + coverage oracle + vbank)
Proposal: adopt the Knitweb stack in numerai-crypto-signals, and make pulse a better host for consumers like it
Hi pulse maintainers — this is a concrete adoption proposal, not a wishlist. The Numerai Signals + Crypto project now has three working integrations against the Knitweb repos, two of them with real Python import edges (pulse) and one as a CLI/metadata mirror (gither), all with verified P2P round-trips. I'd like to (a) formalize numerai as Knitweb's first production consumer and (b) propose a small set of pulse-side improvements that would unblock the next step for any consumer with the same shape.
I've been careful below to separate what was actually engaged/verified today from what is documented but not yet wired in.
Metadata layer complete + tested; object replication NOT built
All three are CPU-only, integer-canonical, no synthetic data, and leave the GitHub remote untouched.
Why this matters to pulse (the consumer's perspective)
pulse's signed-feed + canonical-CBOR primitives held up against a real, messy dataset. A 70,885-row coverage map (epoch-days / counts / staleness / severity, all integers) round-tripped through core.canonical.encode and fabric.feed byte-identically, with a working secp256k1 head sig and pls1… address. The integer-only constraint was the right call — it forced clean encoding (scale t-stats → centi-t, IC → bps) and there were zero float-rejection surprises once we scaled at the boundary.
The gateway weave is genuinely usable as a verifiable sibling to gitnexus/LightRAG.App.attest → link → anchor gave deterministic CIDs + an external UAL in ~15 lines of glue. That's a real upgrade over our flat-file proof stores for tamper-evidence and provenance (subject to the dev-notary caveat in ask SDK facade — Wallet + end-to-end synaptic demo #4 below).
numerai is a high-signal first consumer. It exercises the feed path, the gateway/weave path, AND (via gither) the identity/refs path — so it surfaces integration friction across most of the stack at once.
Repo-by-repo: use-case → benefit → adoption step
pulse — data-coverage feed (PROVEN)
Use-case: broadcast/receive verifiable "what data exists where, up to the null frontier" without a central server.
Benefit: peers can prioritize gap-filling (the feed already carries a vbank poll collect-priority ranking stalest-active targets, e.g. crypto CREAM at 727d stale); bounded gossip (manifest + 5 gaps + top-256 targets + live-dataset coverage; the full 70,885-ticker map stays in parquet).
Adoption step (already taken): scripts/p2p_data_coverage_oracle.py runs under cron (p2p_coverage_tick.sh, every :05/:25/:45); emits reports/p2p_data_coverage_oracle_latest.json + signed feed.
Honest freshness caveat: per-ticker OHLCV coverage is derived from reports/ticker_data_ranges_latest.csv (last regenerated ~Jun 11), so the most recently built OHLCV stores are not yet reflected in the per-ticker frontier. The 4 auxiliary live datasets (funding/OI, article-assets, earnings, ownership) are freshly scanned each run. Making the per-ticker OHLCV frontier current requires regenerating that CSV from the price store first (a separate heavier job, intentionally out of scope of the per-tick run).
pulse — proof publishing (VERIFIED)
Use-case: research proofs (feature RMSE uplift, shuffled-control results) as content-addressed knowledge nodes.
Benefit: immutable CID per proof (any edit changes the CID), signed authorship, OriginTrail UAL, typed weighted edges — the run used relations proves / supports / passed / applies-to — so a Lens can rank by evidence weight.
Adoption step (already taken): scripts/publish_proof_to_fabric.py (App.attest/link/anchor path — deliberately NOT the local-only page publish CLI).
Use-case: location-free, tamper-evident identity for a private competition repo (mitigates single-host lockout).
Benefit: one content-addressed RID across mirrors; per-peer namespaced signed refs; threshold-delegate identity so no single peer can rewrite control or forge/rollback branches.
Adoption step (already taken): .gither/identity/{node.key,rad.json,sigrefs.json} minted (RID rad:zABt864…, 1-of-1 delegate threshold); .gither/ gitignored so the private key can't be committed.
Honest gap: gither moves signed JSON metadata only — no daemon, no discovery, no git object replication (a grep of the P2P source finds no pack-objects/upload-pack). Fetching objects still needs git/Radicle. So this is verifiable provenance today, not a content-replicating mirror.
Use-case: one-peer-one-vote ranking of which data gap to collect next; future sybil-resistant feedback/staking-signal layer.
Benefit: the oracle already emits a vBank poll structure; vbank.tally() counts integer ballots, personhood gates each vote on a revocable zero-PII ticket.
Honest status: the poll is defined and emitted, not yet tallied across real peers. Personhood is phase-1 trusted-RP (RP sees an ephemeral holder secret at admission); trustless uniqueness is the gated ZK phase-2. State this honestly — don't over-claim sybil resistance yet.
Documented-only (not wired into numerai):lens (cited/abstaining query over the pit — promising, not yet imported), monitor (feed/peer observability), knit publish/inbound gates + KG viz (safe two-way sharing). Worth doing, but no import edge exists today.
Asks of pulse, to better serve consumers like numerai
These are the concrete friction points the integration hit. In rough priority:
A productized fabric transport / discovery story. Today the real weave (App.attest/weave) only reaches statically-configured listen=/peers=. The transport primitive exists but there's no discovery/DHT and no long-running listener. A pulse node serve (even loopback-first, then bootstrap-seed list) would turn "internal/federated graph" into actual federation. This is the single biggest unblocker.
Clarify page publish vs. the gateway path in docs. The CLI page publish is local-only (writes ~/.pulse/pages, no peer propagation). It's easy to assume it federates. A doc note + a --fabric flag that routes through App.attest would prevent every new consumer re-discovering this.
Ship a Numerai-style consumer example.examples/ is mvp/pouw/synaptic/vbank/crowdfunding only. A ~20-line "publish a proof: KnowledgeItem + AttentionRecord + anchor" example (I can contribute the glue from publish_proof_to_fabric.py) would document the integer-scaling-at-the-boundary pattern that tripped us up first.
Verify the OriginTrail anchor backend before external reliance.anchor() currently uses a fixed dev notary key (_NOTARY_PRIV) + OriginTrailAnchorBackend. Consumers need a clear statement of whether the UAL hits a real DKG endpoint or is dev-only, so we don't externally cite a dev UAL. (The UAL above was produced with the dev notary, so we treat it as internal-only for now.)
Cross-repo: align gither's object-replication roadmap with the fabric. Once gither has object replication (or a documented Radicle rad-remote path), a private numerai repo could have public provenance + restricted object sync — a clean reference pattern for any private-data consumer.
Suggested next concrete step
Open a tracking issue "numerai-crypto-signals: first production consumer of Knitweb" linking: the cron'd coverage oracle, the proof-publish script, and the gither mirror — then take asks #1 and #2 as the first two pulse PRs. I'm happy to contribute the consumer example (#3) and the integer-boundary doc.
Title: Proposal: numerai-crypto-signals as Knitweb's first real consumer (pulse fabric + gither + coverage oracle + vbank)
Proposal: adopt the Knitweb stack in
numerai-crypto-signals, and makepulsea better host for consumers like itHi pulse maintainers — this is a concrete adoption proposal, not a wishlist. The Numerai Signals + Crypto project now has three working integrations against the Knitweb repos, two of them with real Python import edges (pulse) and one as a CLI/metadata mirror (gither), all with verified P2P round-trips. I'd like to (a) formalize numerai as Knitweb's first production consumer and (b) propose a small set of pulse-side improvements that would unblock the next step for any consumer with the same shape.
I've been careful below to separate what was actually engaged/verified today from what is documented but not yet wired in.
What's already working (engaged + verified today)
knitweb.fabric.feed,knitweb.p2p,core.crypto,core.canonical)(date,ticker)OHLCV we hold vs. don't, up to the null frontierp2p_data_coverage_oracle.py --p2p-proof→ feed root987dd860…, 267 entries, 70,885 tickers (equity 34,756 / crypto 2,147 / other 33,982); 2nd loopback peer synced all 267 entries,root_match=Trueknitweb.gateway.App+fabric.items)publish_proof_to_fabric.pywove 2 microstructure proofs (equity NW-t 6.88, crypto NW-t 9.65) → CIDsbafyreibadz…/bafyrealyj…, 20 nodes / 8 typed edges, OriginTrail UALdid:dkg:knitweb/bafyreigef6…(verified=true, dev notary key)peer/rad-id/sigrefs/announce→ RIDrad:zABt864…, DIDdid:key:z6MkiFGG…, 2 refs signed+verified, loopback peer re-verified, 1-byte tamper rejectedAll three are CPU-only, integer-canonical, no synthetic data, and leave the GitHub remote untouched.
Why this matters to pulse (the consumer's perspective)
core.canonical.encodeandfabric.feedbyte-identically, with a working secp256k1 head sig andpls1…address. The integer-only constraint was the right call — it forced clean encoding (scale t-stats → centi-t, IC → bps) and there were zero float-rejection surprises once we scaled at the boundary.App.attest→link→anchorgave deterministic CIDs + an external UAL in ~15 lines of glue. That's a real upgrade over our flat-file proof stores for tamper-evidence and provenance (subject to the dev-notary caveat in ask SDK facade — Wallet + end-to-end synaptic demo #4 below).Repo-by-repo: use-case → benefit → adoption step
pulse— data-coverage feed (PROVEN)vbankpollcollect-priorityranking stalest-active targets, e.g. cryptoCREAMat 727d stale); bounded gossip (manifest + 5 gaps + top-256 targets + live-dataset coverage; the full 70,885-ticker map stays in parquet).scripts/p2p_data_coverage_oracle.pyruns under cron (p2p_coverage_tick.sh, every :05/:25/:45); emitsreports/p2p_data_coverage_oracle_latest.json+ signed feed.reports/ticker_data_ranges_latest.csv(last regenerated ~Jun 11), so the most recently built OHLCV stores are not yet reflected in the per-ticker frontier. The 4 auxiliary live datasets (funding/OI, article-assets, earnings, ownership) are freshly scanned each run. Making the per-ticker OHLCV frontier current requires regenerating that CSV from the price store first (a separate heavier job, intentionally out of scope of the per-tick run).pulse— proof publishing (VERIFIED)proves/supports/passed/applies-to— so a Lens can rank by evidence weight.scripts/publish_proof_to_fabric.py(App.attest/link/anchor path — deliberately NOT the local-onlypage publishCLI).gither— P2P-git provenance mirror (METADATA LAYER VERIFIED).gither/identity/{node.key,rad.json,sigrefs.json}minted (RIDrad:zABt864…, 1-of-1 delegate threshold);.gither/gitignored so the private key can't be committed.vbank(+ personhood) — sybil-resistant prioritization (DOCUMENTED, partially wired)vbank.tally()counts integer ballots, personhood gates each vote on a revocable zero-PII ticket.Documented-only (not wired into numerai):
lens(cited/abstaining query over the pit — promising, not yet imported),monitor(feed/peer observability), knit publish/inbound gates + KG viz (safe two-way sharing). Worth doing, but no import edge exists today.Asks of pulse, to better serve consumers like numerai
These are the concrete friction points the integration hit. In rough priority:
App.attest/weave) only reaches statically-configuredlisten=/peers=. The transport primitive exists but there's no discovery/DHT and no long-running listener. Apulse node serve(even loopback-first, then bootstrap-seed list) would turn "internal/federated graph" into actual federation. This is the single biggest unblocker.page publishvs. the gateway path in docs. The CLIpage publishis local-only (writes~/.pulse/pages, no peer propagation). It's easy to assume it federates. A doc note + a--fabricflag that routes throughApp.attestwould prevent every new consumer re-discovering this.examples/is mvp/pouw/synaptic/vbank/crowdfunding only. A ~20-line "publish a proof: KnowledgeItem + AttentionRecord + anchor" example (I can contribute the glue frompublish_proof_to_fabric.py) would document the integer-scaling-at-the-boundary pattern that tripped us up first.anchor()currently uses a fixed dev notary key (_NOTARY_PRIV) +OriginTrailAnchorBackend. Consumers need a clear statement of whether the UAL hits a real DKG endpoint or is dev-only, so we don't externally cite a dev UAL. (The UAL above was produced with the dev notary, so we treat it as internal-only for now.)rad-remote path), a private numerai repo could have public provenance + restricted object sync — a clean reference pattern for any private-data consumer.Suggested next concrete step
Open a tracking issue "numerai-crypto-signals: first production consumer of Knitweb" linking: the cron'd coverage oracle, the proof-publish script, and the gither mirror — then take asks #1 and #2 as the first two pulse PRs. I'm happy to contribute the consumer example (#3) and the integer-boundary doc.
🤖 Generated with Claude Code