Skip to content

core: RobustStats — first Amara-graduation (10th-ferry median+MAD robustAggregate)#295

Merged
AceHack merged 1 commit intomainfrom
feat/robust-stats-median-mad-amara-graduation-1
Apr 24, 2026
Merged

core: RobustStats — first Amara-graduation (10th-ferry median+MAD robustAggregate)#295
AceHack merged 1 commit intomainfrom
feat/robust-stats-median-mad-amara-graduation-1

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 24, 2026

Summary

First Amara graduation — ships the robustAggregate snippet from Amara's 10th courier ferry (PR #294) as real F# code with tests, in direct response to Aaron's Otto-105 directive:

"are they just dead after you absorb them now waiting on governance forever, thats no good her contributions matter a lot too"

What lands

  • src/Core/RobustStats.fsmedian, mad, robustAggregate, and a degenerate-MAD floor constant
  • tests/Tests.FSharp/Algebra/RobustStats.Tests.fs — 13 tests, all passing
  • Fsproj entries for both

Provenance

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 count
  • Provenance + Claim<'T> record types
  • retraction-conservation property test
  • golden-hash replay test harness skeleton
  • cap-hit visibility audit across runtime callsites

Behavioural notes

  • Median — R-7 convention (arithmetic mean at even-length split)
  • MAD — raw definition; no 1.4826 Gaussian-consistency scale factor; callers can apply if they want stddev-equivalent units
  • robustAggregate — 3-sigma-equivalent filter using max(MAD, 1e-9) floor to prevent collapse on constant samples

Test plan

  • 13 tests pass: dotnet test --filter FullyQualifiedName~RobustStats → 13/13
  • dotnet build -c Release → 0 Warning(s), 0 Error(s)
  • Amara's verbatim snippet preserved in XML-doc for provenance
  • No public-API surface outside the RobustStats module (per Ilyana's public-surface conservatism)

🤖 Generated with Claude Code

…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>
Copilot AI review requested due to automatic review settings April 24, 2026 05:22
@AceHack AceHack enabled auto-merge (squash) April 24, 2026 05:23
@AceHack AceHack merged commit 0aeae0c into main Apr 24, 2026
13 checks passed
@AceHack AceHack deleted the feat/robust-stats-median-mad-amara-graduation-1 branch April 24, 2026 05:24
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread src/Core/RobustStats.fs
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)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Comment thread src/Core/RobustStats.fs
Comment on lines +101 to +102
let kept = arr |> Array.filter (fun x -> abs (x - m) <= threshold)
median kept
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.RobustStats with median, mad, robustAggregate, and MadFloor.
  • Adds an F# test suite covering median/MAD/robustAggregate behavior.
  • Registers the new source/test files in their respective .fsproj compile 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.

Comment thread src/Core/RobustStats.fs
Comment on lines +6 to +13
/// **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`).
///
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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>).

Copilot uses AI. Check for mistakes.
Comment thread src/Core/RobustStats.fs
Comment on lines +24 to +26
/// **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
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot generated this review using guidance from repository custom instructions.
Comment thread src/Core/RobustStats.fs
/// outliers pull the mean" — without claiming it resolves
/// independence-of-sources (that's `antiConsensusGate` territory,
/// a separate graduation).
[<AutoOpen>]
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.).

Suggested change
[<AutoOpen>]
[<RequireQualifiedAccess>]

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…— 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
… 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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants