provides.capability _ -> - so it passes `chain validate` and the hub
store name-match. No behaviour change (capability validation is lint-only;
the WASM is unchanged).
Signed-off-by: flemming-it <sf@flemming.it>
JSON inputs arriving via google.protobuf.Struct (the gRPC submit
path, HubClient.submit jsonInputs) are always floating-point, so a
u64 population field rejected `180000.0` with an INVALID_ARGUMENT.
Make population f64 — a count is exact in f64 up to 2^53, the SKM
product is f64 anyway, and Display still renders whole numbers
without a decimal. Unblocks live skm scoring from the Recl∆Im app.
Signed-off-by: flemming-it <sf@flemming.it>
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>
Standardkostenmodell (Methode des Nationalen Normenkontrollrats):
eur_per_year = P × F × T × h
P population (Fallzahl)
F frequency per year (Frequenz)
T tariff in €/h (Tarif)
h time per case in hours (Zeitaufwand)
Each item preserves the formula string so an auditor can
reconstruct the calculation from the Hub audit log without
re-running the module.
Per-duty tier flags propagate via the Regel-der-niedrigsten-Stufe
(Studie §6.7): the aggregate tier_lowest is the worst tier among
the duties, so any T4 (qualitative signal) ingredient drags the
whole report down to T4. That is intentional — it prevents
methodologically weak inputs from masquerading as confidence.
Reuse-lens: SKM is EU- and OECD-anerkannt. The Niederländer (ATR),
UK (Regulatory Policy Committee) and EU REFIT all use this
methodology. This module is meaningful far beyond lawheatmap.
Pure in-WASM, zero filesystem, zero network.
Reserved for next versions:
- 0.2: confidence intervals (P/F/T/h Streuung → output band)
- 0.3: industry-tariff lookup (DESTATIS Bruttoverdienst-Reihen)
Signed-off-by: flemming-it <sf@flemming.it>