docs(adr-118): root README Documentation table BFLD row (337/337 GREEN)

Iter 51. PR-readiness pivot iter #2. Adds BFLD to the workspace-root
README.md Documentation table — closes pre-merge checklist item #3
(README.md update if scope changed). GitHub renders this; new
contributors / operators browsing ruvnet/RuView see the entry on
landing.

Added (in README.md, top-level Documentation table):
- New row right after the Home Assistant + Matter row, linking to
  v2/crates/wifi-densepose-bfld/README.md (iter-49 crate README).
- Summary covers:
    * 3 type-enforced structural invariants
      (raw BFI never exits / in-RAM-only embedding / cross-site
       cryptographically impossible)
    * Full operator surface (BfldPipeline, BfldPipelineHandle,
      SoulMatchOracle)
    * MQTT topic router + HA-DISCO + availability + LWT
    * 3 operator HA blueprints
    * Two runnable examples
    * eclipse-mosquitto:2 CI service container
    * 327+ tests
- Per-ADR links: 118 (umbrella), 119 (frame), 120 (privacy class),
  121 (risk scoring), 122 (HA/Matter), 123 (capture path)
- Research dossier pointer: docs/research/BFLD/ (11 files, 13,544 words)

Added (in v2/crates/wifi-densepose-bfld/tests/root_readme_link.rs):
- 5 named tests via include_str!:
    root_readme_links_to_bfld_crate_readme
    root_readme_mentions_bfld_acronym_and_full_name
    root_readme_cites_all_six_bfld_adrs (per-ADR substring check)
    root_readme_points_at_research_bundle
    root_readme_documents_three_structural_invariants_in_summary
      ("raw BFI never exits", "in-RAM-only", "cross-site" — three
       invariants surfaced in the short table summary)

ADR-124 status (iter step 0 sibling check):
- docs/adr/ADR-124-rvagent-mcp-ruvector-npm-integration.md unchanged
  at 431 lines. SENSE-BRIDGE scope remains orthogonal.

ACs progressed:
- Pre-merge checklist item #3 (CLAUDE.md) — root README updated to
  point at the new crate. Operator discovery path now reaches BFLD
  from the GitHub repo landing page in 1 click.
- ADR-118 §2.1 documentation surface — discovery path complete:
  GitHub README → crate README → operator examples → ADRs → research
  dossier. All hops covered by include_str + link tests.

Test config:
- cargo test --no-default-features → 101 passed (root_readme_link cfg-out)
- cargo test                       → 337 passed (332 + 5)

Out of scope (next iter target):
- Pre-merge checklist remaining: user-guide.md update (#6) if new CLI
  flags / setup steps, witness bundle regeneration (#8). External-
  resource-gated work (KIT BFId, Pi5/Nexmon) still skipped.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
ruv
2026-05-24 20:07:03 -04:00
parent cbb365729f
commit ef72c00a02
2 changed files with 66 additions and 0 deletions
@@ -0,0 +1,65 @@
//! Validate the workspace-root `README.md` Documentation table cites the
//! BFLD crate. crates.io won't show this, but new contributors browsing
//! `ruvnet/RuView` on GitHub will — the entry is the primary discovery
//! path for operators looking for "WiFi sensing privacy layer".
#![cfg(feature = "std")]
const ROOT_README: &str = include_str!("../../../../README.md");
#[test]
fn root_readme_links_to_bfld_crate_readme() {
assert!(
ROOT_README.contains("v2/crates/wifi-densepose-bfld/README.md"),
"root README must link to the BFLD crate README from the Documentation table",
);
}
#[test]
fn root_readme_mentions_bfld_acronym_and_full_name() {
assert!(
ROOT_README.contains("BFLD"),
"root README must mention the BFLD acronym",
);
assert!(
ROOT_README.contains("Beamforming Feedback Layer for Detection"),
"root README must expand the BFLD acronym at least once",
);
}
#[test]
fn root_readme_cites_all_six_bfld_adrs() {
for adr in ["ADR-118", "ADR-119", "ADR-120", "ADR-121", "ADR-122", "ADR-123"] {
assert!(
ROOT_README.contains(adr),
"root README must cite {adr} so the discovery path is intact",
);
}
}
#[test]
fn root_readme_points_at_research_bundle() {
assert!(
ROOT_README.contains("docs/research/BFLD/"),
"root README must point at the BFLD research dossier",
);
}
#[test]
fn root_readme_documents_three_structural_invariants_in_summary() {
// The doc-table summary is short, but it should still mention the
// three I1/I2/I3 invariants since they're the single most operator-
// visible property of BFLD.
assert!(
ROOT_README.contains("raw BFI never exits"),
"root README must mention invariant I1 in the BFLD summary",
);
assert!(
ROOT_README.contains("in-RAM-only") || ROOT_README.contains("in-RAM only"),
"root README must mention invariant I2 in the BFLD summary",
);
assert!(
ROOT_README.contains("cross-site"),
"root README must mention invariant I3 in the BFLD summary",
);
}