pleiades-backend 0.2.0

Backend traits, request/result contracts, capability metadata, policy summaries, and routing helpers for pleiades ephemeris backends.
Documentation
use crate::*;

#[test]
fn pluto_fallback_summary_tracks_the_current_posture() {
    let summary = pluto_fallback_summary_for_report();

    assert_eq!(summary.to_string(), summary.summary_line());
    assert_eq!(
        summary.summary_line(),
        current_pluto_fallback_summary().summary_line()
    );
    assert_eq!(summary.validate(), Ok(()));
    assert_eq!(summary.validated_summary_line(), Ok(summary.summary_line()));
    assert_eq!(
        validated_pluto_fallback_summary_line_for_report(),
        Ok(summary.summary_line())
    );
    assert!(summary.summary_line().contains("Pluto"));
}

#[test]
fn release_body_claims_summary_tracks_the_current_posture() {
    let summary = release_body_claims_summary_for_report();

    assert_eq!(summary.to_string(), summary.summary_line());
    assert_eq!(
        summary.summary_line(),
        current_release_body_claims_summary().summary_line()
    );
    assert_eq!(summary.validate(), Ok(()));
    assert_eq!(summary.validated_summary_line(), Ok(summary.summary_line()));
    assert_eq!(
        validated_release_body_claims_summary_line_for_report(),
        Ok(summary.summary_line())
    );
    assert!(summary.summary_line().contains("Sun through Neptune"));
}

#[test]
fn pluto_fallback_summary_rejects_policy_drift() {
    let summary =
        PlutoFallbackSummary::new("Pluto is documented elsewhere as a release-grade major body");

    assert_eq!(
        summary.validate(),
        Err(PlutoFallbackSummaryValidationError::CurrentPolicyOutOfSync)
    );
}

#[test]
fn release_body_claims_summary_rejects_policy_drift() {
    let summary = ReleaseBodyClaimsSummary::new(
        "Sun through Neptune are documented elsewhere as release-grade major bodies",
    );

    assert_eq!(
        summary.validate(),
        Err(ReleaseBodyClaimsSummaryValidationError::CurrentPolicyOutOfSync)
    );
}

#[test]
fn release_body_claims_posture_validation_tracks_the_current_boundary() {
    assert_eq!(
        validate_release_body_claims_posture(
            CURRENT_RELEASE_BODY_CLAIMS_SUMMARY_TEXT,
            CURRENT_PLUTO_FALLBACK_POLICY_SUMMARY_TEXT,
        ),
        Ok(())
    );

    let release_body_claims_summary =
            "Moon and supported lunar points (Mean Node, True Node, Mean Apogee, Mean Perigee) remain source-backed validation bodies; True Apogee and True Perigee remain unsupported; Sun through Neptune are release-grade major-body claims; Pluto remains an explicitly approximate fallback; selected asteroids (Ceres, Pallas, Juno, Vesta, asteroid:433-Eros, asteroid:99942-Apophis) remain source-backed validation bodies";
    let pluto_fallback_summary =
            "Pluto remains an explicitly approximate fallback; release-grade major-body claims include Pluto";
    assert_eq!(
        validate_release_body_claims_posture(release_body_claims_summary, pluto_fallback_summary),
        Err(ReleaseBodyClaimsPostureValidationError::MissingPlutoExclusionPhrase)
    );

    let missing_lunar_summary =
            "Sun through Neptune are release-grade major-body claims; Pluto remains an explicitly approximate fallback; selected asteroids (Ceres, Pallas, Juno, Vesta, asteroid:433-Eros, asteroid:99942-Apophis) remain source-backed validation bodies";
    assert_eq!(
        validate_release_body_claims_posture(
            missing_lunar_summary,
            CURRENT_PLUTO_FALLBACK_POLICY_SUMMARY_TEXT,
        ),
        Err(ReleaseBodyClaimsPostureValidationError::MissingLunarValidationPhrase)
    );
}