Commit graph

4 commits

Author SHA1 Message Date
3910c5f59e ci: add Forgejo CI workflow (mirror text-extract)
Some checks failed
CI / Linux x86_64 (Forgejo) (push) Failing after 2s
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>
2026-06-18 12:13:11 +02:00
1f4152b189 fix(clippy): bring source under -D warnings ahead of CI
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>
2026-06-18 12:13:11 +02:00
001cae00f1 chore(release): finalize v0.1.0 — LICENSE, NOTICE, WASM artefact
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>
2026-06-18 11:38:40 +02:00
43acf4ac1a feat: initial graph-shapley-attribution v0.1.0 (graph.shapley_attribution@0.1.0)
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>
2026-06-18 11:25:26 +02:00