chore(sync-about): count public indicator types, not module files (#70)

* chore(sync-about): count public indicator types, not module files

The sync-about workflow counted `mod xxx;` lines in
crates/wickra-core/src/indicators/mod.rs to derive the indicator count
that gets propagated to README, the GitHub About description, and the
wiki. That under-reported by one because `vwap.rs` exports two public
types — `Vwap` (cumulative) and `RollingVwap` (finite window) — from
the same module. The bindings reach both, so users see 214 indicators
even though there are only 213 source files.

Fix the count by parsing the canonical `pub use indicators::{ ... }`
block in lib.rs, dropping the `FAMILIES` constant and any `*Output`
companion structs, and counting the remaining public types. Pure-shell
implementation so the workflow doesn't grow a python dependency.

Sync README to the corrected count (213 -> 214) in the same commit so
the PR validates cleanly through the workflow's PR-flow.

* docs(bindings): sync per-binding READMEs and docs/ pointer to 214 / 16

The bindings/{node,python,wasm}/README.md files (which ship to
npm / PyPI / npm again) and docs/README.md (the pointer to the
wiki) all carried the stale '71 streaming-first indicators across
eight families' header from before the family expansion. Pull the
canonical 16-family table out of the main README into all three
binding READMEs and update docs/README.md to list every family by
name, so a user landing on PyPI / npm sees the current catalogue
shape.
This commit is contained in:
kingchenc
2026-05-30 00:40:13 +02:00
committed by GitHub
parent e85334a2e9
commit 0f2ff9c3c7
6 changed files with 77 additions and 35 deletions
+18 -2
View File
@@ -1,7 +1,9 @@
name: Sync indicator count
# Indicator count appears in four places that must stay in sync with
# the number of `mod xxx;` lines in crates/wickra-core/src/indicators/mod.rs:
# the number of public indicator types exported from
# crates/wickra-core/src/lib.rs (the `pub use indicators::{ ... }` block,
# minus the `FAMILIES` constant and any `*Output` companion structs):
#
# 1. README.md prose — synced on PR branches (this workflow)
# 2. GitHub repo "About" description — synced on push to main / v* tag
@@ -9,6 +11,11 @@ name: Sync indicator count
# — synced on push to main / v* tag
# 4. site/index.md (local-only marketing site, not synced from CI)
#
# We count public types (not `mod xxx;` lines) because some modules export
# more than one indicator — e.g. `vwap.rs` exposes both `Vwap` and
# `RollingVwap`, so the mod-count under-reports by one. lib.rs is the
# single source of truth for what the bindings reach.
#
# Design: keep README in sync *before* a PR is merged, by pushing a
# fix-up commit to the PR head branch. After squash-merge into main
# the bot commit is folded into the single signed merge commit, so
@@ -77,7 +84,16 @@ jobs:
- name: Count indicators
id: count
run: |
n=$(grep -c '^mod ' crates/wickra-core/src/indicators/mod.rs)
# Parse the `pub use indicators::{ ... }` block from lib.rs, strip
# the FAMILIES constant and any `*Output` companion structs, count
# the remaining identifiers. Pure-shell so the workflow doesn't
# require a python runtime.
n=$(sed -n '/^pub use indicators::{/,/^};/p' crates/wickra-core/src/lib.rs \
| tr ',{}' '\n' \
| sed 's/[[:space:]]//g' \
| grep -E '^[A-Z][A-Za-z0-9_]*$' \
| grep -vE '^FAMILIES$|Output$' \
| sort -u | wc -l)
echo "count=$n" >> "$GITHUB_OUTPUT"
echo "Indicator count: $n"