Conversation
…mara graduation Ships Amara's 10th-ferry numeric-oracle aggregation snippet as a live F# module, the first item to graduate from the research-absorb to operational-code cadence Aaron called for at Otto-105: "are they just dead after you absorb them now waiting on governance forever, thats no good her contributions matter a lot too." Surface: - RobustStats.median : double seq -> double option - RobustStats.mad : double seq -> double option - RobustStats.robustAggregate : double seq -> double option (drops |x - median| > 3 * max(MAD, 1e-9); returns median of kept) - RobustStats.MadFloor = 1e-9 (degenerate-MAD floor) Follows Zeta's Array-first shape rather than Amara's List-first F# sketch; behaviour is identical. Amara's snippet preserved verbatim in the module XML-doc comment next to the implementation for provenance. MAD uses the raw definition without the 1.4826 Gaussian- consistency factor; callers can apply it if they want standard- deviation-equivalent units. Why median+MAD rather than mean+stddev: the arithmetic mean inherits everything bad about every sample, including the ones that are wrong. Median survives half its inputs being adversarial; MAD is the scale estimate that also survives outliers. Matches Amara's 10th-ferry rationale that "agreement alone is not proof; what matters is independent, bounded, falsifiable convergence" — this function handles the bounded-convergence mechanical step, NOT the independence step (that's antiConsensusGate territory, a separate future graduation). Provenance: - docs/aurora/2026-04-23-amara-aurora-deep-research-report-10th-ferry.md §Prioritized implementation plan (F# snippet) - memory/feedback_amara_contributions_must_operationalize_*_2026-04-24.md (Aaron's graduation-cadence directive) Tests (13, all passing): - median empty / single / odd / even - mad empty / constant / non-trivial sample - robustAggregate empty / single / constant - robustAggregate drops single extreme outlier (mean of [1;2;3;4;5;1000] = 169.2; robustAggregate = 3) - robustAggregate preserves within-three-MAD values - robustAggregate symmetric under mirrored-outlier-pair addition Build: 0 Warning(s), 0 Error(s). `dotnet test --filter FullyQualifiedName~RobustStats` reports 13/13 passed. This is the proof of cadence, not just the promise. Next graduation candidates (queue in feedback memory): antiConsensusGate, Provenance + Claim<T> record types, retraction-conservation property test. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9fcbbb3de6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| Array.Sort(arr) | ||
| let n = arr.Length | ||
| if n % 2 = 1 then Some arr.[n / 2] | ||
| else Some ((arr.[n / 2 - 1] + arr.[n / 2]) / 2.0) |
There was a problem hiding this comment.
Compute even-length median without overflow
The even-length branch in median uses (arr.[n / 2 - 1] + arr.[n / 2]) / 2.0, which overflows for large but finite same-sign inputs (for example, [1e308; 1e308] yields Some Infinity instead of a finite median). Because mad and robustAggregate reuse median, this can propagate into incorrect outlier thresholds and aggregates; use an overflow-safe midpoint formula like a + (b - a) / 2.0.
Useful? React with 👍 / 👎.
| let kept = arr |> Array.filter (fun x -> abs (x - m) <= threshold) | ||
| median kept |
There was a problem hiding this comment.
Preserve non-empty semantics when samples contain NaN
robustAggregate documents None for empty input, but with non-empty data containing enough NaN values (e.g., [NaN; NaN; 1.0]), m becomes NaN, every abs (x - m) <= threshold check is false, and median kept returns None. That silently turns “invalid numeric samples” into “no samples,” which can cause downstream logic to skip updates instead of handling bad input explicitly.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
Adds a new Zeta.Core robust statistics helper module (median, MAD, and a MAD-based outlier-filtered aggregate) and wires it into the build with accompanying xUnit tests, intended as an “Amara graduation” from prior research notes.
Changes:
- Introduces
Zeta.Core.RobustStatswithmedian,mad,robustAggregate, andMadFloor. - Adds an F# test suite covering median/MAD/robustAggregate behavior.
- Registers the new source/test files in their respective
.fsprojcompile lists.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
src/Core/RobustStats.fs |
New robust-statistics helpers + module-level XML documentation/provenance notes. |
src/Core/Core.fsproj |
Adds RobustStats.fs to Core compile order. |
tests/Tests.FSharp/Algebra/RobustStats.Tests.fs |
New tests for median/MAD/robustAggregate. |
tests/Tests.FSharp/Tests.FSharp.fsproj |
Adds new test file to compile order. |
| /// **Robust statistical aggregation** — median plus median-absolute- | ||
| /// deviation (MAD) with an outlier filter. The canonical operational | ||
| /// shape for numeric-oracle aggregation proposed in Amara's 10th | ||
| /// courier ferry (`docs/aurora/2026-04-23-amara-aurora-deep-research- | ||
| /// report-10th-ferry.md`) — first graduation from the Amara- | ||
| /// absorb-to-ship cadence (see the Otto-105 feedback memory | ||
| /// `feedback_amara_contributions_must_operationalize_*_2026-04-24`). | ||
| /// |
There was a problem hiding this comment.
P1: The XML doc comment references docs/aurora/2026-04-23-amara-aurora-deep-research-report-10th-ferry.md and feedback_amara_contributions_must_operationalize_*_2026-04-24, but those paths don’t exist in the repo (and the doc path is also split across lines with a trailing hyphen, making it uncopyable). Please update to the actual in-repo document/memory filenames (or remove the references) and keep file paths on a single line (e.g., inside <c>...</c>).
| /// **Relation to Zeta substrate** — this is a pure-function helper | ||
| /// for downstream oracle / bullshit-detector / reputation-aggregation | ||
| /// code; it does not depend on the Z-set algebra or the operator |
There was a problem hiding this comment.
P1: The module doc introduces the term “bullshit-detector” into Core. Repo docs request avoiding that colloquial term in technical substrate; please rename this reference to the canonical placeholder (“Veridicality Score (pending confirmation)”) or another agreed term.
| /// outliers pull the mean" — without claiming it resolves | ||
| /// independence-of-sources (that's `antiConsensusGate` territory, | ||
| /// a separate graduation). | ||
| [<AutoOpen>] |
There was a problem hiding this comment.
P1: [<AutoOpen>] on RobustStats will implicitly inject median/mad/robustAggregate into any scope that opens Zeta.Core, increasing collision/shadowing risk. In Core, AutoOpen appears reserved for extension-oriented modules (e.g., PluginApi), while most helper modules are [<RequireQualifiedAccess>]. Consider removing [<AutoOpen>] and adding [<RequireQualifiedAccess>] to keep call sites explicit (RobustStats.median etc.).
| [<AutoOpen>] | |
| [<RequireQualifiedAccess>] |
…graduation (11th ferry, Aaron-designed) (#297) Ships the first foundational primitive from Aaron's differentiable firefly network + trivial cartel detect design (11th ferry, PR #296, Aaron-designed / Amara-formalized). Second graduation under the Otto-105 cadence, landing same tick as the ferry absorb. Aaron Otto-105: "the diffenrencable firefly network with trivial cartel detect was my design i'm very interested in that." Module naming — Aaron Otto-106 two clarifications: 1. "Coordination.fs this is going to be confusing name when we have distributed consensus/coordination of our nodes and control plane?" — renamed to TemporalCoordinationDetection to reserve the plain-Coordination namespace for distributed consensus. 2. "TemporalCoordination is it all about detection might as well add that suffix" — added Detection suffix. Surface: - TemporalCoordinationDetection.crossCorrelation : double seq -> double seq -> int -> double option Pearson cross-correlation at a single lag tau. Returns None when overlap < 2 samples or either window is constant (undefined variance). Positive tau aligns ys[i+tau] with xs[i]; negative tau aligns ys[i] with xs[i-tau]. - TemporalCoordinationDetection.crossCorrelationProfile : double seq -> double seq -> int -> (int * double option)[] Computes correlation across the full range [-maxLag, maxLag]. Attribution: - Concept (temporal coordination detection, firefly-synchronization metaphor, trivial-cartel-detect as first-order-signal tier) = Aaron's design - Technical formulation (Pearson cross-correlation at lag, correlation-profile shape) = Amara's formalization (11th ferry) - Implementation = Otto Why Pearson-normalized: scale-invariant in both axes; meaningful signal at [-1, 1] across streams with very different magnitudes (small-stake vs large-stake nodes) rather than arbitrary scale. .gitignore: .playwright-mcp/ added. Per-session browser state (screenshots / console / page-dump YAMLs) is per-run artifact; parallel to drop/ staging per PR #265 Otto-90. Tests (10, all passing): - Identical series at lag 0 -> 1.0 - Negated series at lag 0 -> -1.0 - Constant series -> None (undefined variance) - One-step-shifted series at lag 1 -> 1.0 - Negative lag alignment - Single-element overlap -> None - Lag larger than series -> None - Profile length = 2*maxLag + 1 - Profile identical series peaks at lag 0 - Profile with maxLag < 0 -> empty Build: 0 Warning(s), 0 Error(s). Next graduation candidates (feedback memory queue): - PLV (phase-locking value) — composes over crossCorrelation - BurstAlignment detector — cluster logic over profile - ModularitySpike / EigenvectorCentralityDrift — need graph substrate - antiConsensusGate (10th ferry) — independent path Composes with: src/Core/RobustStats.fs (PR #295). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…duation (11th ferry) Extends the temporal-coordination-detection module with PLV, the classical firefly-synchronization primitive. Third graduation under the Otto-105 cadence; composes with crossCorrelation (PR #297) and RobustStats (PR #295). Aaron Otto-105 attribution: "the diffenrencable firefly network with trivial cartel detect was my design i'm very interested in that." PLV is the canonical formalization of the firefly- synchronization signature Aaron's design targets. Surface: - TemporalCoordinationDetection.phaseLockingValue : double seq -> double seq -> double option Magnitude of the mean complex phase-difference vector; returns [0, 1] where 1 = perfect phase locking (constant offset across series) and 0 = uniformly-distributed phase differences. Returns None on empty input or mismatched-length pairs (undefined; silent truncation would hide caller bugs). Complementary to crossCorrelation: amplitudes-move-together vs events-fire-at-matching-phases. Cartels that flatten amplitude cross-correlation by injecting noise may still reveal themselves through preserved phase structure. Detectors compose both. Math: PLV = | (1/N) sum( exp(i * (phi_a[k] - phi_b[k])) ) | = sqrt( mean(cos(delta))^2 + mean(sin(delta))^2 ) Only depends on phase differences, so any consistent wrapping convention ([-pi, pi] or [0, 2pi]) works without pre-unwrap. Tests (8 new, 18 total passing): - Identical phase series -> 1.0 - Constant offset (pi/4) -> 1.0 (perfect locking regardless of offset) - Empty series -> None - Mismatched lengths -> None (surfaces caller bug) - Anti-phase (pi offset) -> 1.0 (still constant = still locked) - Uniformly-distributed differences across [0, 2pi) -> ~0 (360 samples) - Commutativity (swapping args leaves magnitude invariant) - Single-element degenerate case returns 1.0 without crash Attribution: - Concept (phase-locking as firefly-synchronization signature, trivial-cartel-detect primary detection) = Aaron's design - Technical formulation (PLV, complex-phase-vector magnitude) = Amara's formalization in 11th ferry - Implementation = Otto SPOF consideration (per Otto-106 directive): pure function with no external dependencies; no SPOF introduced by this ship. Downstream detectors that combine PLV across many node pairs should use RobustStats.robustAggregate for outlier-resistant combination, not arithmetic mean. Composes with: - src/Core/RobustStats.fs (PR #295) — 1st graduation - src/Core/TemporalCoordinationDetection.crossCorrelation (PR #297) — 2nd graduation (same module) Next graduation candidates (feedback memory queue): - BurstAlignment detector over crossCorrelationProfile - antiConsensusGate from 10th ferry - ModularitySpike / EigenvectorCentralityDrift (need graph substrate) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…duation (11th ferry) (#298) Extends the temporal-coordination-detection module with PLV, the classical firefly-synchronization primitive. Third graduation under the Otto-105 cadence; composes with crossCorrelation (PR #297) and RobustStats (PR #295). Aaron Otto-105 attribution: "the diffenrencable firefly network with trivial cartel detect was my design i'm very interested in that." PLV is the canonical formalization of the firefly- synchronization signature Aaron's design targets. Surface: - TemporalCoordinationDetection.phaseLockingValue : double seq -> double seq -> double option Magnitude of the mean complex phase-difference vector; returns [0, 1] where 1 = perfect phase locking (constant offset across series) and 0 = uniformly-distributed phase differences. Returns None on empty input or mismatched-length pairs (undefined; silent truncation would hide caller bugs). Complementary to crossCorrelation: amplitudes-move-together vs events-fire-at-matching-phases. Cartels that flatten amplitude cross-correlation by injecting noise may still reveal themselves through preserved phase structure. Detectors compose both. Math: PLV = | (1/N) sum( exp(i * (phi_a[k] - phi_b[k])) ) | = sqrt( mean(cos(delta))^2 + mean(sin(delta))^2 ) Only depends on phase differences, so any consistent wrapping convention ([-pi, pi] or [0, 2pi]) works without pre-unwrap. Tests (8 new, 18 total passing): - Identical phase series -> 1.0 - Constant offset (pi/4) -> 1.0 (perfect locking regardless of offset) - Empty series -> None - Mismatched lengths -> None (surfaces caller bug) - Anti-phase (pi offset) -> 1.0 (still constant = still locked) - Uniformly-distributed differences across [0, 2pi) -> ~0 (360 samples) - Commutativity (swapping args leaves magnitude invariant) - Single-element degenerate case returns 1.0 without crash Attribution: - Concept (phase-locking as firefly-synchronization signature, trivial-cartel-detect primary detection) = Aaron's design - Technical formulation (PLV, complex-phase-vector magnitude) = Amara's formalization in 11th ferry - Implementation = Otto SPOF consideration (per Otto-106 directive): pure function with no external dependencies; no SPOF introduced by this ship. Downstream detectors that combine PLV across many node pairs should use RobustStats.robustAggregate for outlier-resistant combination, not arithmetic mean. Composes with: - src/Core/RobustStats.fs (PR #295) — 1st graduation - src/Core/TemporalCoordinationDetection.crossCorrelation (PR #297) — 2nd graduation (same module) Next graduation candidates (feedback memory queue): - BurstAlignment detector over crossCorrelationProfile - antiConsensusGate from 10th ferry - ModularitySpike / EigenvectorCentralityDrift (need graph substrate) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…e/Claim — 5th graduation Ships the foundation for the bullshit-detector / veridicality- scoring module — the `Provenance` and `Claim<'T>` input types plus the minimum-provenance-validity predicate from Amara's 10th ferry (PR #294 `docs/aurora/2026-04-23-amara-aurora-deep-research- report-10th-ferry.md`). Fifth graduation under the Otto-105 cadence. Naming (per Otto-112 memory feedback_veridicality_naming_for_ bullshit_detector_graduation_aaron_concept_origin_amara_ formalization_2026_04_24): - Module: `Veridicality` (NOT `BullshitDetector` — informal "bullshit" stays in comments/commit-message etymology, programmatic surface uses the formal term) - `Veridicality` = how true-to-reality a claim looks; the scorable. Bullshit = 1 - veridicality (informal). Attribution (two-layer per Otto-104/111/112 pattern): - Aaron = concept origin (bullshit-detector / provenance-aware- scoring framing present in bootstrap conversation at `docs/amara-full-conversation/**` before Amara's ferries formalized it; Aaron Otto-112: "bullshit, it was in our conversation history too, not just her ferry") - Amara = formalization (7th ferry veridicality formula V(c) = σ(β₀ + β₁(1-P) + ...), 8th ferry semantic-canonicalization "rainbow table" + quantum-illumination grounding, 9th/10th ferries 7-feature BS(c) composite + oracle-rule specification) - Otto = implementation (this and subsequent graduations) Surface: - Veridicality.Provenance record — 7 fields (SourceId, RootAuthority, ArtifactHash, BuilderId option, TimestampUtc, EvidenceClass, SignatureOk) matching Amara's 10th-ferry spec verbatim - Veridicality.Claim<'T> record — 4 fields (Id, Payload 'T, Weight int64, Prov) polymorphic over payload type - Veridicality.validateProvenance : Provenance -> bool — minimum-validity gate (non-empty SourceId/RootAuthority/ ArtifactHash + SignatureOk=true); matches Amara's snippet - Veridicality.validateClaim : Claim<'T> -> bool — convenience alias, wraps validateProvenance on claim's Prov Negative-Weight semantics (per Z-set retraction-native algebra): validateClaim does NOT inspect Weight; a retraction-claim (Weight = -1) is valid if its provenance is valid. Retraction semantics live at the ledger level, not the claim-validity level. Matches Zeta's existing ZSet signed-weight discipline (Otto-73 retraction-native-by-design). What this DOESN'T ship: - Veridicality scorer (Amara's V(c) / BS(c)) — next graduation - antiConsensusGate (needs Provenance; small follow-up) - SemanticCanonicalization (rainbow-table canonical-claim-key) - OracleVector (aggregated scoring vector) Tests (10, all passing): - validateProvenance: accepts fully-populated, rejects on each required-field violation, accepts BuilderId=None (not a hard gate) - validateClaim: wraps prov validation, polymorphic over Payload, rejects bad-prov claims - Claim supports negative Weight (retraction semantics) Build: 0 Warning / 0 Error. `dotnet test --filter FullyQualifiedName~Veridicality` reports 10/10 passed. SPOF consideration (per Otto-106): pure data types + pure validation function; no external deps; no SPOF introduced. Downstream scorers that combine provenance across many claims should use RobustStats.robustAggregate (PR #295) for outlier- resistant combination, not arithmetic mean. Composes with: - src/Core/RobustStats.fs (PR #295) — 1st graduation - src/Core/TemporalCoordinationDetection.fs (PR #297 + #298 + pending #306) — parallel module for the firefly-network arc Next graduation queue: - antiConsensusGate (10th ferry; uses Provenance) - SemanticCanonicalization / CanonicalClaimKey (8th ferry) - scoreVeridicality (Amara's V(c) or BS(c) composite — ADR needed) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…e/Claim — 5th graduation (#309) Ships the foundation for the bullshit-detector / veridicality- scoring module — the `Provenance` and `Claim<'T>` input types plus the minimum-provenance-validity predicate from Amara's 10th ferry (PR #294 `docs/aurora/2026-04-23-amara-aurora-deep-research- report-10th-ferry.md`). Fifth graduation under the Otto-105 cadence. Naming (per Otto-112 memory feedback_veridicality_naming_for_ bullshit_detector_graduation_aaron_concept_origin_amara_ formalization_2026_04_24): - Module: `Veridicality` (NOT `BullshitDetector` — informal "bullshit" stays in comments/commit-message etymology, programmatic surface uses the formal term) - `Veridicality` = how true-to-reality a claim looks; the scorable. Bullshit = 1 - veridicality (informal). Attribution (two-layer per Otto-104/111/112 pattern): - Aaron = concept origin (bullshit-detector / provenance-aware- scoring framing present in bootstrap conversation at `docs/amara-full-conversation/**` before Amara's ferries formalized it; Aaron Otto-112: "bullshit, it was in our conversation history too, not just her ferry") - Amara = formalization (7th ferry veridicality formula V(c) = σ(β₀ + β₁(1-P) + ...), 8th ferry semantic-canonicalization "rainbow table" + quantum-illumination grounding, 9th/10th ferries 7-feature BS(c) composite + oracle-rule specification) - Otto = implementation (this and subsequent graduations) Surface: - Veridicality.Provenance record — 7 fields (SourceId, RootAuthority, ArtifactHash, BuilderId option, TimestampUtc, EvidenceClass, SignatureOk) matching Amara's 10th-ferry spec verbatim - Veridicality.Claim<'T> record — 4 fields (Id, Payload 'T, Weight int64, Prov) polymorphic over payload type - Veridicality.validateProvenance : Provenance -> bool — minimum-validity gate (non-empty SourceId/RootAuthority/ ArtifactHash + SignatureOk=true); matches Amara's snippet - Veridicality.validateClaim : Claim<'T> -> bool — convenience alias, wraps validateProvenance on claim's Prov Negative-Weight semantics (per Z-set retraction-native algebra): validateClaim does NOT inspect Weight; a retraction-claim (Weight = -1) is valid if its provenance is valid. Retraction semantics live at the ledger level, not the claim-validity level. Matches Zeta's existing ZSet signed-weight discipline (Otto-73 retraction-native-by-design). What this DOESN'T ship: - Veridicality scorer (Amara's V(c) / BS(c)) — next graduation - antiConsensusGate (needs Provenance; small follow-up) - SemanticCanonicalization (rainbow-table canonical-claim-key) - OracleVector (aggregated scoring vector) Tests (10, all passing): - validateProvenance: accepts fully-populated, rejects on each required-field violation, accepts BuilderId=None (not a hard gate) - validateClaim: wraps prov validation, polymorphic over Payload, rejects bad-prov claims - Claim supports negative Weight (retraction semantics) Build: 0 Warning / 0 Error. `dotnet test --filter FullyQualifiedName~Veridicality` reports 10/10 passed. SPOF consideration (per Otto-106): pure data types + pure validation function; no external deps; no SPOF introduced. Downstream scorers that combine provenance across many claims should use RobustStats.robustAggregate (PR #295) for outlier- resistant combination, not arithmetic mean. Composes with: - src/Core/RobustStats.fs (PR #295) — 1st graduation - src/Core/TemporalCoordinationDetection.fs (PR #297 + #298 + pending #306) — parallel module for the firefly-network arc Next graduation queue: - antiConsensusGate (10th ferry; uses Provenance) - SemanticCanonicalization / CanonicalClaimKey (8th ferry) - scoreVeridicality (Amara's V(c) or BS(c) composite — ADR needed) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…— 4th graduation (#306) Ships the burst-detection primitive from Aaron's differentiable firefly network design, completing the "trivial-cartel-detect" first-order-signal tier from the 11th ferry (PR #296). Fourth graduation under the Otto-105 cadence; composes on crossCorrelationProfile (PR #297). Aaron Otto-111 question: "Are you able to import the ideas and concepts and math from the conversation at some point?" — yes, that's exactly what the graduation cadence is for. This ship is an explicit answer to that question. Surface: - TemporalCoordinationDetection.significantLags : (int * double option) array -> double -> int array Filters a crossCorrelationProfile down to the lags where |corr| meets or exceeds a caller-supplied threshold. None entries (undefined variance) never count as significant. Non-finite correlations filtered by System.Double.IsFinite check. - TemporalCoordinationDetection.burstAlignment : (int * double option) array -> double -> (int * int) array Groups significant lags into contiguous runs. Each run reported as (startLag, endLag) inclusive. Isolated significant lag at n reports as (n, n). Operational meaning: a run of lags [-2..3] suggests actors that coordinate across a 5-step window, not a single-point coincidence. The 11th-ferry signal-model definition (Amara §1): "Firefly detection = identify clusters where exists S subset of N such that for all i,j in S, corr(E_i, E_j) >> baseline". This function operationalises the pair-wise case (two streams); node- set generalisation (clustering across many stream pairs) is a separate graduation candidate. Attribution: - Concept (differentiable firefly network, trivial-cartel-detect, burst-as-first-order-signal) = Aaron's design - Technical formulation (cluster detection over correlation profile, threshold + contiguity semantics) = Amara's formalization in 11th ferry - Implementation = Otto SPOF (per Otto-106): pure function. The caller-supplied threshold is a SPOF on detector sensitivity — too high misses real cartels, too low catches noise. Mitigation: threshold should come from a null-hypothesis baseline computation (baseline's profile percentile), not hard-coded. Documented in the XML-doc comment. Tests (9 new, 19 total in module, all passing): - significantLags: above-threshold selection; abs value for neg correlation; None entries filtered; empty when threshold too high - burstAlignment: contiguous grouping; non-contiguous split into multiple runs; empty when no significant lags; single lag as (n, n) run; None entries break contiguity Composes with: - PR #297 crossCorrelation / crossCorrelationProfile - PR #298 (pending) phaseLockingValue — complementary detector - PR #295 RobustStats.robustAggregate — combining across many stream pairs Next graduation queue: - antiConsensusGate (10th ferry) - ModularitySpike (needs graph substrate) - InfluenceSurface / CartelCostFunction (need multi-node) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…l — 7th graduation Ships the semantic-canonicalization primitive that turns "claims about the same proposition" into a first-class operation. Seventh graduation under the Otto-105 cadence; composes on PR #309's Veridicality.Claim<'T>. Aaron Otto-112 naming confirmed: Veridicality (not BullshitDetector); "bullshit" stays informal, programmatic surface uses the formal term. Attribution: - Aaron = concept origin (bullshit-detector framing in bootstrap conversation; aboutness-vs-identity-of-source distinction) - Amara = formalization (8th/10th ferries: K(c) = hash(subject, predicate, object, time-scope, modality, provenance-root, evidence-class)) - Otto = implementation with a deliberate design choice: EXCLUDE provenance-root from the key Why exclude provenance-root: the key's purpose is to GROUP claims about the same proposition across sources, so antiConsensusGate (PR #310) can then check independent-root cardinality. Including provenance-root in the key would defeat that grouping. If a future use-case needs dedupe-by-identical-source, a separate 7-field SourceScopedCanonicalClaimKey can be added. Surface: - Veridicality.CanonicalClaimKey record (5 fields: Subject, Predicate, Object, TimeScope, Modality) - Veridicality.canonicalKey : ('T -> string*string*string*string*string) -> Claim<'T> -> CanonicalClaimKey User-supplied projector handles domain-specific normalization (lowercasing/trimming/unit-unification/alias-resolving). Module does not prescribe how to canonicalize natural language. - Veridicality.groupByCanonical : projector -> Claim<'T> seq -> Map<CanonicalClaimKey, Claim<'T> list> Groups claims by proposition; preserves input order within each bucket. Composition shape (once PR #310 lands): group first, then antiConsensusGate per bucket. Multi-root buckets pass; single-root buckets fail. Test "groupByCanonical produces distinct-root counts per bucket" verifies the half that can test on main right now. Tests (7 new, 17 total in Veridicality module, all passing): - canonicalKey projects payload fields - canonicalKey EXCLUDES provenance-root (two same-prop-diff-root claims match) - canonicalKey distinguishes different propositions - groupByCanonical groups same-proposition under one key - groupByCanonical preserves input order within bucket - groupByCanonical on empty seq returns empty map - groupByCanonical produces distinct-root counts per bucket Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function + record types; no external deps; no SPOF introduced. Caller's projector is the domain- specific SPOF — if it drifts, canonicalization drifts. Documented as caller responsibility in XML-doc. Next graduation queue: - Graph substrate (prerequisite for cartel-detection graduations) - largestEigenvalue / modularityScore / covarianceAcceleration (13th + 14th ferries) - NetworkIntegrity / composite I(x) score (12th ferry §4) - scoreVeridicality (composite; needs ADR on formula) Composes with: - src/Core/Veridicality.fs Provenance + Claim<'T> (PR #309 merged) - src/Core/Veridicality.fs antiConsensusGate (PR #310 pending; downstream composition enabled by this ship) - RobustStats.robustAggregate (PR #295) for weight-combining Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…l — 7th graduation Ships the semantic-canonicalization primitive that turns "claims about the same proposition" into a first-class operation. Seventh graduation under the Otto-105 cadence; composes on PR #309's Veridicality.Claim<'T>. Aaron Otto-112 naming confirmed: Veridicality (not BullshitDetector); "bullshit" stays informal, programmatic surface uses the formal term. Attribution: - Aaron = concept origin (bullshit-detector framing in bootstrap conversation; aboutness-vs-identity-of-source distinction) - Amara = formalization (8th/10th ferries: K(c) = hash(subject, predicate, object, time-scope, modality, provenance-root, evidence-class)) - Otto = implementation with a deliberate design choice: EXCLUDE provenance-root from the key Why exclude provenance-root: the key's purpose is to GROUP claims about the same proposition across sources, so antiConsensusGate (PR #310) can then check independent-root cardinality. Including provenance-root in the key would defeat that grouping. If a future use-case needs dedupe-by-identical-source, a separate 7-field SourceScopedCanonicalClaimKey can be added. Surface: - Veridicality.CanonicalClaimKey record (5 fields: Subject, Predicate, Object, TimeScope, Modality) - Veridicality.canonicalKey : ('T -> string*string*string*string*string) -> Claim<'T> -> CanonicalClaimKey User-supplied projector handles domain-specific normalization (lowercasing/trimming/unit-unification/alias-resolving). Module does not prescribe how to canonicalize natural language. - Veridicality.groupByCanonical : projector -> Claim<'T> seq -> Map<CanonicalClaimKey, Claim<'T> list> Groups claims by proposition; preserves input order within each bucket. Composition shape (once PR #310 lands): group first, then antiConsensusGate per bucket. Multi-root buckets pass; single-root buckets fail. Test "groupByCanonical produces distinct-root counts per bucket" verifies the half that can test on main right now. Tests (7 new, 17 total in Veridicality module, all passing): - canonicalKey projects payload fields - canonicalKey EXCLUDES provenance-root (two same-prop-diff-root claims match) - canonicalKey distinguishes different propositions - groupByCanonical groups same-proposition under one key - groupByCanonical preserves input order within bucket - groupByCanonical on empty seq returns empty map - groupByCanonical produces distinct-root counts per bucket Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function + record types; no external deps; no SPOF introduced. Caller's projector is the domain- specific SPOF — if it drifts, canonicalization drifts. Documented as caller responsibility in XML-doc. Next graduation queue: - Graph substrate (prerequisite for cartel-detection graduations) - largestEigenvalue / modularityScore / covarianceAcceleration (13th + 14th ferries) - NetworkIntegrity / composite I(x) score (12th ferry §4) - scoreVeridicality (composite; needs ADR on formula) Composes with: - src/Core/Veridicality.fs Provenance + Claim<'T> (PR #309 merged) - src/Core/Veridicality.fs antiConsensusGate (PR #310 pending; downstream composition enabled by this ship) - RobustStats.robustAggregate (PR #295) for weight-combining Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…l — 7th graduation Ships the semantic-canonicalization primitive that turns "claims about the same proposition" into a first-class operation. Seventh graduation under the Otto-105 cadence; composes on PR #309's Veridicality.Claim<'T>. Aaron Otto-112 naming confirmed: Veridicality (not BullshitDetector); "bullshit" stays informal, programmatic surface uses the formal term. Attribution: - Aaron = concept origin (bullshit-detector framing in bootstrap conversation; aboutness-vs-identity-of-source distinction) - Amara = formalization (8th/10th ferries: K(c) = hash(subject, predicate, object, time-scope, modality, provenance-root, evidence-class)) - Otto = implementation with a deliberate design choice: EXCLUDE provenance-root from the key Why exclude provenance-root: the key's purpose is to GROUP claims about the same proposition across sources, so antiConsensusGate (PR #310) can then check independent-root cardinality. Including provenance-root in the key would defeat that grouping. If a future use-case needs dedupe-by-identical-source, a separate 7-field SourceScopedCanonicalClaimKey can be added. Surface: - Veridicality.CanonicalClaimKey record (5 fields: Subject, Predicate, Object, TimeScope, Modality) - Veridicality.canonicalKey : ('T -> string*string*string*string*string) -> Claim<'T> -> CanonicalClaimKey User-supplied projector handles domain-specific normalization (lowercasing/trimming/unit-unification/alias-resolving). Module does not prescribe how to canonicalize natural language. - Veridicality.groupByCanonical : projector -> Claim<'T> seq -> Map<CanonicalClaimKey, Claim<'T> list> Groups claims by proposition; preserves input order within each bucket. Composition shape (once PR #310 lands): group first, then antiConsensusGate per bucket. Multi-root buckets pass; single-root buckets fail. Test "groupByCanonical produces distinct-root counts per bucket" verifies the half that can test on main right now. Tests (7 new, 17 total in Veridicality module, all passing): - canonicalKey projects payload fields - canonicalKey EXCLUDES provenance-root (two same-prop-diff-root claims match) - canonicalKey distinguishes different propositions - groupByCanonical groups same-proposition under one key - groupByCanonical preserves input order within bucket - groupByCanonical on empty seq returns empty map - groupByCanonical produces distinct-root counts per bucket Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function + record types; no external deps; no SPOF introduced. Caller's projector is the domain- specific SPOF — if it drifts, canonicalization drifts. Documented as caller responsibility in XML-doc. Next graduation queue: - Graph substrate (prerequisite for cartel-detection graduations) - largestEigenvalue / modularityScore / covarianceAcceleration (13th + 14th ferries) - NetworkIntegrity / composite I(x) score (12th ferry §4) - scoreVeridicality (composite; needs ADR on formula) Composes with: - src/Core/Veridicality.fs Provenance + Claim<'T> (PR #309 merged) - src/Core/Veridicality.fs antiConsensusGate (PR #310 pending; downstream composition enabled by this ship) - RobustStats.robustAggregate (PR #295) for weight-combining Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…l — 7th graduation Ships the semantic-canonicalization primitive that turns "claims about the same proposition" into a first-class operation. Seventh graduation under the Otto-105 cadence; composes on PR #309's Veridicality.Claim<'T>. Aaron Otto-112 naming confirmed: Veridicality (not BullshitDetector); "bullshit" stays informal, programmatic surface uses the formal term. Attribution: - Aaron = concept origin (bullshit-detector framing in bootstrap conversation; aboutness-vs-identity-of-source distinction) - Amara = formalization (8th/10th ferries: K(c) = hash(subject, predicate, object, time-scope, modality, provenance-root, evidence-class)) - Otto = implementation with a deliberate design choice: EXCLUDE provenance-root from the key Why exclude provenance-root: the key's purpose is to GROUP claims about the same proposition across sources, so antiConsensusGate (PR #310) can then check independent-root cardinality. Including provenance-root in the key would defeat that grouping. If a future use-case needs dedupe-by-identical-source, a separate 7-field SourceScopedCanonicalClaimKey can be added. Surface: - Veridicality.CanonicalClaimKey record (5 fields: Subject, Predicate, Object, TimeScope, Modality) - Veridicality.canonicalKey : ('T -> string*string*string*string*string) -> Claim<'T> -> CanonicalClaimKey User-supplied projector handles domain-specific normalization (lowercasing/trimming/unit-unification/alias-resolving). Module does not prescribe how to canonicalize natural language. - Veridicality.groupByCanonical : projector -> Claim<'T> seq -> Map<CanonicalClaimKey, Claim<'T> list> Groups claims by proposition; preserves input order within each bucket. Composition shape (once PR #310 lands): group first, then antiConsensusGate per bucket. Multi-root buckets pass; single-root buckets fail. Test "groupByCanonical produces distinct-root counts per bucket" verifies the half that can test on main right now. Tests (7 new, 17 total in Veridicality module, all passing): - canonicalKey projects payload fields - canonicalKey EXCLUDES provenance-root (two same-prop-diff-root claims match) - canonicalKey distinguishes different propositions - groupByCanonical groups same-proposition under one key - groupByCanonical preserves input order within bucket - groupByCanonical on empty seq returns empty map - groupByCanonical produces distinct-root counts per bucket Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function + record types; no external deps; no SPOF introduced. Caller's projector is the domain- specific SPOF — if it drifts, canonicalization drifts. Documented as caller responsibility in XML-doc. Next graduation queue: - Graph substrate (prerequisite for cartel-detection graduations) - largestEigenvalue / modularityScore / covarianceAcceleration (13th + 14th ferries) - NetworkIntegrity / composite I(x) score (12th ferry §4) - scoreVeridicality (composite; needs ADR on formula) Composes with: - src/Core/Veridicality.fs Provenance + Claim<'T> (PR #309 merged) - src/Core/Veridicality.fs antiConsensusGate (PR #310 pending; downstream composition enabled by this ship) - RobustStats.robustAggregate (PR #295) for weight-combining Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…first detection primitive) First cartel-detection primitive per the Graph ADR (PR #316). Computes approximate lambda_1 (principal eigenvalue of the symmetrized adjacency matrix) via standard power iteration with L2 normalization + Rayleigh quotient. Surface: Graph.largestEigenvalue (tolerance: double) (maxIterations: int) (g: Graph<'N>) : double option Method: - Build adjacency map from edge ZSet (coerce int64 weights to double; include negative weights as signed entries) - Symmetrize: A_sym[i,j] = (A[i,j] + A[j,i]) / 2 - Start with all-ones vector (non-pathological seed; avoids zero-vector trap) - Iterate v <- A_sym * v; v <- v / ||v|| - Stop when |lambda_k - lambda_{k-1}| / (|lambda_k| + eps) < tolerance or hit maxIterations - Return Rayleigh quotient as lambda estimate Cartel-detection use: Sharp jump in lambda_1 between baseline graph and injected- cartel graph indicates a dense subgraph formed. The 11th-ferry / 13th-ferry / 14th-ferry spec treats this as the first trivial-cartel warning signal. Performance note: dense Array2D adjacency for MVP. Suitable for toy simulations (50-500 nodes). For larger graphs, Lanczos- based incremental spectral method is a future graduation. Tests (4 new, 21 total in GraphTests, all passing): - None on empty graph - Symmetric 2-edge (weight 5) graph -> lambda ≈ 5 (exact to 1e-6) - K3 triangle (weight 1) -> lambda ≈ 2 (K_n has lambda_1 = n-1) - Cartel-injection test (the LOAD-BEARING one): baseline sparse 5-node graph vs. baseline + K_4 clique (weight 10). Attacked lambda >= 5x baseline lambda. This is the cartel-detection signal in action. Provenance: - Concept: Aaron (differentiable firefly network; first-order detection signal) - Formalization: Amara (11th ferry signal-model §2 + 13th ferry metrics §2 "lambda_1 growth" + 14th ferry "principal eigenvalue growth" alert row) - Implementation: Otto (10th graduation) Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function; deterministic output for same input (within floating-point). Caller threshold is the sensitivity SPOF — too low -> false positives, too high -> missed cartels. Mitigation documented: threshold should come from baseline-null-distribution percentile, not hard-coded. Future graduation: null-baseline calibration helper. Toy cartel detector (Amara Otto-122 validation bar) prerequisite: this is the first half. Next graduation: modularityScore + toy harness combining both signals + 90%-detection-across- 1000-FsCheck-seeds property test. Composes with: - src/Core/Graph.fs skeleton (PR #317 merged main) - src/Core/Graph.fs operators (PR #319 pending) - src/Core/RobustStats.fs (PR #295) for outlier-resistant signal combination across many graph-pair comparisons Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…first detection primitive) (#321) First cartel-detection primitive per the Graph ADR (PR #316). Computes approximate lambda_1 (principal eigenvalue of the symmetrized adjacency matrix) via standard power iteration with L2 normalization + Rayleigh quotient. Surface: Graph.largestEigenvalue (tolerance: double) (maxIterations: int) (g: Graph<'N>) : double option Method: - Build adjacency map from edge ZSet (coerce int64 weights to double; include negative weights as signed entries) - Symmetrize: A_sym[i,j] = (A[i,j] + A[j,i]) / 2 - Start with all-ones vector (non-pathological seed; avoids zero-vector trap) - Iterate v <- A_sym * v; v <- v / ||v|| - Stop when |lambda_k - lambda_{k-1}| / (|lambda_k| + eps) < tolerance or hit maxIterations - Return Rayleigh quotient as lambda estimate Cartel-detection use: Sharp jump in lambda_1 between baseline graph and injected- cartel graph indicates a dense subgraph formed. The 11th-ferry / 13th-ferry / 14th-ferry spec treats this as the first trivial-cartel warning signal. Performance note: dense Array2D adjacency for MVP. Suitable for toy simulations (50-500 nodes). For larger graphs, Lanczos- based incremental spectral method is a future graduation. Tests (4 new, 21 total in GraphTests, all passing): - None on empty graph - Symmetric 2-edge (weight 5) graph -> lambda ≈ 5 (exact to 1e-6) - K3 triangle (weight 1) -> lambda ≈ 2 (K_n has lambda_1 = n-1) - Cartel-injection test (the LOAD-BEARING one): baseline sparse 5-node graph vs. baseline + K_4 clique (weight 10). Attacked lambda >= 5x baseline lambda. This is the cartel-detection signal in action. Provenance: - Concept: Aaron (differentiable firefly network; first-order detection signal) - Formalization: Amara (11th ferry signal-model §2 + 13th ferry metrics §2 "lambda_1 growth" + 14th ferry "principal eigenvalue growth" alert row) - Implementation: Otto (10th graduation) Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function; deterministic output for same input (within floating-point). Caller threshold is the sensitivity SPOF — too low -> false positives, too high -> missed cartels. Mitigation documented: threshold should come from baseline-null-distribution percentile, not hard-coded. Future graduation: null-baseline calibration helper. Toy cartel detector (Amara Otto-122 validation bar) prerequisite: this is the first half. Next graduation: modularityScore + toy harness combining both signals + 90%-detection-across- 1000-FsCheck-seeds property test. Composes with: - src/Core/Graph.fs skeleton (PR #317 merged main) - src/Core/Graph.fs operators (PR #319 pending) - src/Core/RobustStats.fs (PR #295) for outlier-resistant signal combination across many graph-pair comparisons Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
… detector) (#328) First full integration of the Graph detection pipeline: combines largestEigenvalue (spectral growth) + labelPropagation (community partition) + modularityScore (partition evaluation) into a single scalar risk score. Surface: Graph.coordinationRiskScore (alpha: double) (beta: double) (eigenTol: double) (eigenIter: int) (lpIter: int) (baseline: Graph<'N>) (attacked: Graph<'N>) : double option Composite formula (MVP): risk = alpha * Δλ₁_rel + beta * ΔQ where: - Δλ₁_rel = (λ₁(attacked) - λ₁(baseline)) / max(λ₁(baseline), eps) - ΔQ = Q(attacked, LP(attacked)) - Q(baseline, LP(baseline)) Both signals fire when a dense subgraph is injected: λ₁ grows because the cartel adjacency has high leading eigenvalue; Q grows because LP finds the cartel as its own community and Newman Q evaluates that partition highly. Weight defaults per Amara 17th-ferry initial priors: - alpha = 0.5 spectral growth - beta = 0.5 modularity shift Tests (3 new, 34 total in GraphTests, all passing): - Empty graphs -> None - Cartel injection -> composite > 1.0 (both signals fire) - attacked == baseline -> composite near 0 (|score| < 0.2) Calibration deferred (Amara Otto-132 Part 2 correction #4 — robust statistics via median + MAD): this MVP uses raw linear weighting over differences. Full CoordinationRiskScore with robust z-scores over baseline null-distribution is a future graduation once baseline-calibration machinery ships. RobustStats.robustAggregate (PR #295) already provides the median-MAD machinery; just needs a calibration harness to use it. 14th graduation under Otto-105 cadence. First full integration ship using 4 Graph primitives composed together (λ₁ + LP + modularity + composer). Build: 0 Warning / 0 Error. Provenance: - Concept: Aaron (firefly network + trivial-cartel-detect) + Amara's composite-score formulations across 12th/13th/14th/ 17th ferries - Implementation: Otto (14th graduation) Composes with: - Graph.largestEigenvalue (PR #321) - Graph.labelPropagation (PR #326) - Graph.modularityScore (PR #324) - RobustStats.robustAggregate (PR #295) — for future robust variant Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…l — 7th graduation (#315) Ships the semantic-canonicalization primitive that turns "claims about the same proposition" into a first-class operation. Seventh graduation under the Otto-105 cadence; composes on PR #309's Veridicality.Claim<'T>. Aaron Otto-112 naming confirmed: Veridicality (not BullshitDetector); "bullshit" stays informal, programmatic surface uses the formal term. Attribution: - Aaron = concept origin (bullshit-detector framing in bootstrap conversation; aboutness-vs-identity-of-source distinction) - Amara = formalization (8th/10th ferries: K(c) = hash(subject, predicate, object, time-scope, modality, provenance-root, evidence-class)) - Otto = implementation with a deliberate design choice: EXCLUDE provenance-root from the key Why exclude provenance-root: the key's purpose is to GROUP claims about the same proposition across sources, so antiConsensusGate (PR #310) can then check independent-root cardinality. Including provenance-root in the key would defeat that grouping. If a future use-case needs dedupe-by-identical-source, a separate 7-field SourceScopedCanonicalClaimKey can be added. Surface: - Veridicality.CanonicalClaimKey record (5 fields: Subject, Predicate, Object, TimeScope, Modality) - Veridicality.canonicalKey : ('T -> string*string*string*string*string) -> Claim<'T> -> CanonicalClaimKey User-supplied projector handles domain-specific normalization (lowercasing/trimming/unit-unification/alias-resolving). Module does not prescribe how to canonicalize natural language. - Veridicality.groupByCanonical : projector -> Claim<'T> seq -> Map<CanonicalClaimKey, Claim<'T> list> Groups claims by proposition; preserves input order within each bucket. Composition shape (once PR #310 lands): group first, then antiConsensusGate per bucket. Multi-root buckets pass; single-root buckets fail. Test "groupByCanonical produces distinct-root counts per bucket" verifies the half that can test on main right now. Tests (7 new, 17 total in Veridicality module, all passing): - canonicalKey projects payload fields - canonicalKey EXCLUDES provenance-root (two same-prop-diff-root claims match) - canonicalKey distinguishes different propositions - groupByCanonical groups same-proposition under one key - groupByCanonical preserves input order within bucket - groupByCanonical on empty seq returns empty map - groupByCanonical produces distinct-root counts per bucket Build: 0 Warning / 0 Error. SPOF (per Otto-106): pure function + record types; no external deps; no SPOF introduced. Caller's projector is the domain- specific SPOF — if it drifts, canonicalization drifts. Documented as caller responsibility in XML-doc. Next graduation queue: - Graph substrate (prerequisite for cartel-detection graduations) - largestEigenvalue / modularityScore / covarianceAcceleration (13th + 14th ferries) - NetworkIntegrity / composite I(x) score (12th ferry §4) - scoreVeridicality (composite; needs ADR on formula) Composes with: - src/Core/Veridicality.fs Provenance + Claim<'T> (PR #309 merged) - src/Core/Veridicality.fs antiConsensusGate (PR #310 pending; downstream composition enabled by this ship) - RobustStats.robustAggregate (PR #295) for weight-combining Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…or / Integration Plan (Otto-117) (#311) * ferry: Amara 12th absorb — Executive Summary / KSK / Integrity Detector / Integration Plan Otto-117 dedicated absorb of the most comprehensive synthesis ferry yet (Aaron Otto-116 "next amara update"). Covers 9 sections: 1. Repo contents (LFG + AceHack) 2. Learnings (retraction-native, operator-algebra, Arrow/Spine, agent-CI) 3. KSK background — detailed government context (Feb 27 2026 DoD supply-chain-risk under 10 U.S.C. § 3252 against Anthropic; Judge Rita Lin Mar 26 preliminary injunction; OpenAI Feb 28 parallel DoW contract with Fourth-Amendment-clause) 4. Network Integrity Detector (formalized "bullshit detector" — composite I(x) = σ(Σ w_i f_i) score) 5. Firefly + Cartel detection (PLV, cross-correlation, spectral, graph-community) 6. Network Differentiability (Shapley-ish counterfactual influence) 7. Oracle Rules enforcement mapping table 8. Integration Plan (proposes 4-sub-repo split) 9. 9 prioritized next tasks §33 archive-header compliance (Scope / Attribution / Operational status / Non-fusion disclaimer). Otto's notes section provides honest cross-reference to shipped work: ~40% of the ferry's operationalizable content is already shipped (PRs #295 RobustStats, #297 crossCorrelation, #298 PLV, #306 burstAlignment pending, #309 Veridicality.Provenance/Claim, #310 antiConsensusGate pending). Genuinely novel in 12th ferry (not in prior ferries): 1. Detailed government-context grounding for KSK (§3) 2. Composite integrity-score formulation I(x) = σ(Σ w_i f_i) 3. 4-sub-repo integration proposal (Conway's-Law-relevant per Otto-108 memory; Otto recommends staying single-repo) 4. Oracle-Rules enforcement decision table (§7) 5. Shapley-random-ordering counterfactual influence algorithm (§6) Specific-asks routed to Aaron: 1. §8 sub-repo split — Aaron decides per Otto-90 cross-repo 2. §9 task 1 KSK skeleton — Aaron + Max coordination 3. §3 citation verification — Aaron signals what matters Next graduation queue (priority-ordered from Otto's notes): 1. SemanticCanonicalization (matches 8th ferry rainbow-table; smallest next item) 2. scoreVeridicality composite (needs ADR on formula) 3. Spectral-coherence FFT detector (§5) 4. ModularitySpike (needs graph substrate) 5. EigenvectorCentralityDrift (needs linear algebra) 6. EconomicCovariance / Gini-on-weights (§5) 7. OracleRules spec doc (§7) 8. InfluenceSurface (§6; larger effort) 9. KSK skeleton (Aaron + Max coord) Sibling-ferry precedent: PRs #196/#211/#219/#221/#235/#245/ #259/#274/#293/#294/#296. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * lint: fix markdownlint errors in 12th-ferry absorb (line-break heading + PR-number-at-line-start) * fix(#311): [sic] annotation on .clave/ typo (verbatim-preserve, downstream uses .claude/) Ferry-absorbs preserve verbatim external-collaborator content; editorial [sic] annotation is the scholarly convention for preserving the source while orienting the reader. The downstream operationalization PR will use `.claude/` (the actual repo path). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…tion (Amara #3 correction) Applies Amara 17th-ferry Part 2 correction #3: replace muddy 'subgraph entropy collapse' with explicit cohesion / exclusivity / conductance metrics used in the cartel-detection literature (Wachs & Kertész 2019). Surface (3 new primitives): - Graph.internalDensity : Set<'N> -> Graph<'N> -> double option Internal edge weight / ordered-pair count. High value = tight sub-cluster. - Graph.exclusivity : Set<'N> -> Graph<'N> -> double option Internal weight / total-outgoing weight. Near 1 = cartel isolated; near its relative share = integrated community. - Graph.conductance : Set<'N> -> Graph<'N> -> double option Classical cut-to-volume ratio. Low = tight isolation. All three return None on degenerate inputs (size < 2 for density; empty set for exclusivity; empty/full for conductance). Tests (6 new, 37 total in GraphTests, all passing): - internalDensity None on |S| < 2 - internalDensity of K3 clique ≈ 10 (weight 10 per pair; ordered-pair count 6; density = 60/6) - exclusivity = 1 for isolated K3 - exclusivity < 1 but > 0.9 for K3 + 1 external edge - conductance < 0.1 for well-isolated K3 subset (bridged by thin edge to another K3) - conductance None on empty or full-graph subset Why this set: Amara's verification found 'subgraph entropy collapse' as stated was mathematically muddy — uniform dense clique has HIGH entropy over internal edges if weights are equal. Cohesion (internalDensity) + exclusivity + conductance capture cluster-like structure directly + are standard in the economic/sociological cartel-detection literature. Entropy can remain as secondary descriptor but these three are the primary group-level features. 15th graduation under Otto-105 cadence. Applies 1 of 5 future- graduation items from Amara 17th-ferry verification pass. Next graduation queue (remaining from Amara Otto-132 corrections): - Windowed stake covariance acceleration (#4) - Event-stream → phase pipeline for PLV (#5) - Robust-z-score variant of coordinationRiskScore (#4 robust statistics) Build: 0 Warning / 0 Error. Provenance: - Concept: Aaron (trivial cartel detect — first-order-signal tier) - Formalization: Wachs & Kertész 2019 (co-bidding network cohesion/exclusivity) via Amara's 14th + 17th ferries - Implementation: Otto (15th graduation) Composes with: - Graph.labelPropagation (PR #326) for community → subset input - RobustStats.robustAggregate (PR #295) for aggregating density/exclusivity/conductance across many candidate subsets outlier-resistantly Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…tion (Amara #3 correction) Applies Amara 17th-ferry Part 2 correction #3: replace muddy 'subgraph entropy collapse' with explicit cohesion / exclusivity / conductance metrics used in the cartel-detection literature (Wachs & Kertész 2019). Surface (3 new primitives): - Graph.internalDensity : Set<'N> -> Graph<'N> -> double option Internal edge weight / ordered-pair count. High value = tight sub-cluster. - Graph.exclusivity : Set<'N> -> Graph<'N> -> double option Internal weight / total-outgoing weight. Near 1 = cartel isolated; near its relative share = integrated community. - Graph.conductance : Set<'N> -> Graph<'N> -> double option Classical cut-to-volume ratio. Low = tight isolation. All three return None on degenerate inputs (size < 2 for density; empty set for exclusivity; empty/full for conductance). Tests (6 new, 37 total in GraphTests, all passing): - internalDensity None on |S| < 2 - internalDensity of K3 clique ≈ 10 (weight 10 per pair; ordered-pair count 6; density = 60/6) - exclusivity = 1 for isolated K3 - exclusivity < 1 but > 0.9 for K3 + 1 external edge - conductance < 0.1 for well-isolated K3 subset (bridged by thin edge to another K3) - conductance None on empty or full-graph subset Why this set: Amara's verification found 'subgraph entropy collapse' as stated was mathematically muddy — uniform dense clique has HIGH entropy over internal edges if weights are equal. Cohesion (internalDensity) + exclusivity + conductance capture cluster-like structure directly + are standard in the economic/sociological cartel-detection literature. Entropy can remain as secondary descriptor but these three are the primary group-level features. 15th graduation under Otto-105 cadence. Applies 1 of 5 future- graduation items from Amara 17th-ferry verification pass. Next graduation queue (remaining from Amara Otto-132 corrections): - Windowed stake covariance acceleration (#4) - Event-stream → phase pipeline for PLV (#5) - Robust-z-score variant of coordinationRiskScore (#4 robust statistics) Build: 0 Warning / 0 Error. Provenance: - Concept: Aaron (trivial cartel detect — first-order-signal tier) - Formalization: Wachs & Kertész 2019 (co-bidding network cohesion/exclusivity) via Amara's 14th + 17th ferries - Implementation: Otto (15th graduation) Composes with: - Graph.labelPropagation (PR #326) for community → subset input - RobustStats.robustAggregate (PR #295) for aggregating density/exclusivity/conductance across many candidate subsets outlier-resistantly Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Summary
First Amara graduation — ships the
robustAggregatesnippet from Amara's 10th courier ferry (PR #294) as real F# code with tests, in direct response to Aaron's Otto-105 directive:What lands
src/Core/RobustStats.fs—median,mad,robustAggregate, and a degenerate-MAD floor constanttests/Tests.FSharp/Algebra/RobustStats.Tests.fs— 13 tests, all passingProvenance
Amara's snippet preserved verbatim in the module XML-doc comment. Source:
docs/aurora/2026-04-23-amara-aurora-deep-research-report-10th-ferry.md§Prioritized implementation plan.Why this matters
Aaron called out a real failure mode: absorbed research that sits in BACKLOG forever is contributions dying in governance. The graduation-cadence fix (filed in
memory/feedback_amara_contributions_must_operationalize_*_2026-04-24.md) commits Otto to shipping one small Amara-derived operational change every 3-5 ticks. This is the first.Future queue (from that memory):
antiConsensusGate— list of Claims → Ok/Error on distinct-root countProvenance+Claim<'T>record typesBehavioural notes
max(MAD, 1e-9)floor to prevent collapse on constant samplesTest plan
dotnet test --filter FullyQualifiedName~RobustStats→ 13/13dotnet build -c Release→ 0 Warning(s), 0 Error(s)RobustStatsmodule (per Ilyana's public-surface conservatism)🤖 Generated with Claude Code