The Forgejo instance the modules and the chain-module-sdk dep
live on is reachable at git.flemming.ai (api/v1/version returns
SERVING); git.flemming.ws is a legacy host that no longer
resolves at the API level. Cargo.toml's git dep already uses
.ai — the CI workflow's checkout URL and the SDK insteadOf
rewrite now match, so cargo's git fetch can authenticate via
${{ secrets.MODULE_SDK_PAT }} the same way it was always meant
to. No behaviour change to the module code.
Signed-off-by: flemming-it <sf@flemming.it>
The six gates the rest of chain-modules already runs against:
fmt-check, clippy with -D warnings, host build, host test,
release wasm32-wasip2 build, plus the manual external-URL
checkout and chain-module-sdk insteadOf URL rewrite (via
secrets.MODULE_SDK_PAT) so cargo can reach the org-private SDK
git dep through Forgejo's REQUIRE_SIGNIN_VIEW.
Same template as text-extract's .forgejo/workflows/ci.yml; the
only swap is the module-name string in the checkout step.
Signed-off-by: flemming-it <sf@flemming.it>
Prep for the Forgejo CI gate. Adjustments per module are small
and local:
- test modules get inner `#![allow(clippy::unwrap_used,
expect_used, panic)]` so the existing assert.expect()
test idiom keeps working without rewriting every fixture
- the dead_code field that downstream consumers may still
want serialised gets an explicit #[allow(dead_code)]
- manual char/range comparisons fold to the idiomatic forms
(`['…']`, `(2..=5).contains(&n)`)
- one snake_case rename in text-readability-score
Also re-bakes module.wasm so the committed artefact matches
the post-fmt source byte-for-byte.
No behaviour change, no test change. cargo fmt --all -- --check
and cargo clippy --all-targets -- -D warnings now both pass.
Signed-off-by: flemming-it <sf@flemming.it>
Adds the three release-prep artefacts so the repo is ready for
the chain store: Apache-2.0 LICENSE (boilerplate), NOTICE with
per-module copyright + third-party + methodological lineage
attribution, and the compiled wasm32-wasip2 release bundle
(module.wasm) that the Hub will install verbatim once published.
Cargo.lock is now also tracked so reproducible builds line up
with the WASM hash that ships.
Signed-off-by: flemming-it <sf@flemming.it>
Shapley-style attribution on a weighted norm/citation graph.
Splits a target node's "blame" or "credit" among its ancestors —
useful for transposes-chains where a duty's load must split
between EU origin + national implementation + delegated VO.
v0.1.0 ships a path-count proportional fallback:
share(ancestor) = paths(ancestor → target)
/ sum(paths(any ancestor → target))
That matches the true Shapley value exactly when the coalition
value is "did this ancestor reach the target?", which is the
common case for citation chains. The honest Shapley implementation
(Shubik-Owen recursion over the 2^n coalition lattice) lands in
0.2, bounded to graphs with ≤32 ancestor nodes.
Reuse-lens: Shapley attribution on weighted graphs is broadly
useful — causal inference, feature attribution, supply-chain
analysis.
Pure in-WASM, zero filesystem, zero network.
Reserved for next versions:
- 0.2: honest Shapley on ≤32-node neighbourhoods
- 0.3: weighted edges (today's fallback treats all edges
uniformly; weights matter once concretizes vs
transposes carry different costs)
Signed-off-by: flemming-it <sf@flemming.it>