From 9380ef82a5ed6334ba034abdb2671f2bba159dc8 Mon Sep 17 00:00:00 2001 From: axiomlogicnexus Date: Wed, 10 Jun 2026 01:41:21 +0000 Subject: [PATCH] Phase J-HM: Prokeimenon state ledgers and Alleluia ongoing-state boundary - Add FHyperTwistTrainingValidationProkeimenonStateLedgerContract struct - Add FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary struct - Populate bundle with J-HM validation entries - Implement TryGetById lookup functions - Add runtime library wrappers - Add focused automation tests - Canon sync: ROADMAP.md, KICKOFF.md --- .../HyperTwistTrainingRuntimeLibrary.cpp | 24 ++++ ...wistTrainingValidationBenchmarkLibrary.cpp | 104 ++++++++++++++++++ .../HyperTwistTrainingRuntimeLibrary.h | 12 ++ ...rTwistTrainingValidationBenchmarkLibrary.h | 102 +++++++++++++++++ ...haseJHMProkeimenonAlleluiaContractTest.cpp | 91 +++++++++++++++ ...PERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md | 5 + .../HyperTwist/ROADMAP.md | 4 +- 7 files changed, 340 insertions(+), 2 deletions(-) create mode 100644 UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistValidationPhaseJHMProkeimenonAlleluiaContractTest.cpp diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp index 629ae56..d39ca87 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.cpp @@ -6507,6 +6507,30 @@ bool UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateSynap ); } +bool UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationProkeimenonStateLedgerContract( + const FString& ContractId, + FHyperTwistTrainingValidationProkeimenonStateLedgerContract& OutContract +) +{ + return UHyperTwistTrainingValidationBenchmarkLibrary::TryGetValidationProkeimenonStateLedgerContractById( + GetBundledValidationBenchmarkReferenceBundle(), + ContractId, + OutContract + ); +} + +bool UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateAlleluiaBoundary( + const FString& BoundaryId, + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary& OutBoundary +) +{ + return UHyperTwistTrainingValidationBenchmarkLibrary::TryGetValidationOngoingStateAlleluiaBoundaryById( + GetBundledValidationBenchmarkReferenceBundle(), + BoundaryId, + OutBoundary + ); +} + FString UHyperTwistTrainingRuntimeLibrary::BuildBundledValidationBenchmarkPackageChecklistTsv() { return UHyperTwistTrainingValidationBenchmarkLibrary::BuildPackageChecklistTsv( diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.cpp index da9e800..0371a9e 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.cpp +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Private/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.cpp @@ -22543,6 +22543,72 @@ UHyperTwistTrainingValidationBenchmarkLibrary::BuildBundledValidationBenchmarkRe ); Bundle.ValidationOngoingStateSynapteBoundaries = {OngoingStateSynapteBoundary}; + FHyperTwistTrainingValidationProkeimenonStateLedgerContract ProkeimenonStateLedgerContract; + ProkeimenonStateLedgerContract.ContractId = TEXT("validation-prokeimenon-state-ledger-contract"); + ProkeimenonStateLedgerContract.Title = TEXT("Prokeimenon State Ledger Contract"); + ProkeimenonStateLedgerContract.Summary = TEXT("Bounded first-party validation prokeimenon-state ledger contract for HyperTwist training."); + ProkeimenonStateLedgerContract.RequiredPackageIds = + { + TEXT("UnrealHyperTwist") + }; + ProkeimenonStateLedgerContract.LedgerIds = + { + TEXT("validation-prokeimenon-state-ledger-contract") + }; + ProkeimenonStateLedgerContract.LedgerSurfaceTags = + { + TEXT("bounded prokeimenon-state ledger"), + TEXT("runtime evidence prokeimenon-state ledger") + }; + ProkeimenonStateLedgerContract.ProkeimenonGuardTags = + { + TEXT("no-generic-prokeimenon-platform guard"), + TEXT("bounded same-lane prokeimenon guard") + }; + ProkeimenonStateLedgerContract.ExplicitExclusions = + { + TEXT("generic prokeimenon platform ownership"), + TEXT("cross-product prokeimenon ownership") + }; + ProkeimenonStateLedgerContract.SourceAttribution = MakeFirstPartyAttribution( + TEXT("first-party/validation-prokeimenon-state-ledger-contract"), + TEXT("Owns bounded HyperTwist validation prokeimenon-state ledger posture without widening into prokeimenon-state platforms, prokeimenon-state systems, or release authority.") + ); + Bundle.ValidationProkeimenonStateLedgerContracts = {ProkeimenonStateLedgerContract}; + + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary OngoingStateAlleluiaBoundary; + OngoingStateAlleluiaBoundary.BoundaryId = TEXT("validation-ongoing-state-alleluia-boundary"); + OngoingStateAlleluiaBoundary.Title = TEXT("Ongoing State Alleluia Boundary"); + OngoingStateAlleluiaBoundary.Summary = TEXT("Bounded first-party validation ongoing-state alleluia boundary for HyperTwist training."); + OngoingStateAlleluiaBoundary.RequiredPackageIds = + { + TEXT("UnrealHyperTwist") + }; + OngoingStateAlleluiaBoundary.AlleluiaIds = + { + TEXT("validation-ongoing-state-alleluia-boundary") + }; + OngoingStateAlleluiaBoundary.AlleluiaSurfaceTags = + { + TEXT("bounded ongoing-state alleluia"), + TEXT("runtime evidence ongoing-state alleluia") + }; + OngoingStateAlleluiaBoundary.AlleluiaGuardTags = + { + TEXT("no-generic-ongoing-alleluia-platform guard"), + TEXT("bounded same-lane ongoing-alleluia guard") + }; + OngoingStateAlleluiaBoundary.ExplicitExclusions = + { + TEXT("generic ongoing alleluia platform ownership"), + TEXT("cross-product ongoing alleluia ownership") + }; + OngoingStateAlleluiaBoundary.SourceAttribution = MakeFirstPartyAttribution( + TEXT("first-party/validation-ongoing-state-alleluia-boundary"), + TEXT("Owns bounded HyperTwist validation ongoing-state alleluia posture without widening into ongoing-alleluia platforms, ongoing-alleluia systems, or release authority.") + ); + Bundle.ValidationOngoingStateAlleluiaBoundaries = {OngoingStateAlleluiaBoundary}; + return Bundle; } UE_ENABLE_OPTIMIZATION @@ -30945,6 +31011,44 @@ bool UHyperTwistTrainingValidationBenchmarkLibrary::TryGetValidationOngoingState return false; } +bool UHyperTwistTrainingValidationBenchmarkLibrary::TryGetValidationProkeimenonStateLedgerContractById( + const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle, + const FString& ContractId, + FHyperTwistTrainingValidationProkeimenonStateLedgerContract& OutContract +) +{ + for (const FHyperTwistTrainingValidationProkeimenonStateLedgerContract& Contract : Bundle.ValidationProkeimenonStateLedgerContracts) + { + if (Contract.ContractId == ContractId) + { + OutContract = Contract; + return true; + } + } + + OutContract = FHyperTwistTrainingValidationProkeimenonStateLedgerContract(); + return false; +} + +bool UHyperTwistTrainingValidationBenchmarkLibrary::TryGetValidationOngoingStateAlleluiaBoundaryById( + const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle, + const FString& BoundaryId, + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary& OutBoundary +) +{ + for (const FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary& Boundary : Bundle.ValidationOngoingStateAlleluiaBoundaries) + { + if (Boundary.BoundaryId == BoundaryId) + { + OutBoundary = Boundary; + return true; + } + } + + OutBoundary = FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary(); + return false; +} + FString UHyperTwistTrainingValidationBenchmarkLibrary::BuildPackageChecklistTsv( const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle ) diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h index 059ea24..e710cd6 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h @@ -3134,6 +3134,18 @@ public: FHyperTwistTrainingValidationOngoingStateSynapteBoundary& OutBoundary ); + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Validation") + static bool TryGetBundledValidationProkeimenonStateLedgerContract( + const FString& ContractId, + FHyperTwistTrainingValidationProkeimenonStateLedgerContract& OutContract + ); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Validation") + static bool TryGetBundledValidationOngoingStateAlleluiaBoundary( + const FString& BoundaryId, + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary& OutBoundary + ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Validation") static FString BuildBundledValidationBenchmarkPackageChecklistTsv(); diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.h b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.h index 27eec98..7719e0b 100644 --- a/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.h +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Public/HyperTwistTraining/HyperTwistTrainingValidationBenchmarkLibrary.h @@ -16834,6 +16834,82 @@ struct FHyperTwistTrainingValidationOngoingStateSynapteBoundary } }; +USTRUCT(BlueprintType) +struct FHyperTwistTrainingValidationProkeimenonStateLedgerContract +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString ContractId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString Title; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString Summary; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray RequiredPackageIds; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray LedgerIds; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray LedgerSurfaceTags; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray ProkeimenonGuardTags; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray ExplicitExclusions; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FHyperTwistTrainingSourceAttribution SourceAttribution; + + bool IsStructurallyValid() const + { + return !ContractId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid(); + } +}; + +USTRUCT(BlueprintType) +struct FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString BoundaryId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString Title; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString Summary; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray RequiredPackageIds; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray AlleluiaIds; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray AlleluiaSurfaceTags; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray AlleluiaGuardTags; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray ExplicitExclusions; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FHyperTwistTrainingSourceAttribution SourceAttribution; + + bool IsStructurallyValid() const + { + return !BoundaryId.IsEmpty() && !Title.IsEmpty() && SourceAttribution.IsStructurallyValid(); + } +}; + USTRUCT(BlueprintType) struct FHyperTwistTrainingValidationBenchmarkReferenceBundle { @@ -18168,6 +18244,12 @@ struct FHyperTwistTrainingValidationBenchmarkReferenceBundle UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") FString PrimaryValidationOngoingStateSynapteBoundaryId; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString PrimaryValidationProkeimenonStateLedgerContractId; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + FString PrimaryValidationOngoingStateAlleluiaBoundaryId; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") TArray PackageReferences; @@ -19497,6 +19579,12 @@ struct FHyperTwistTrainingValidationBenchmarkReferenceBundle UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") TArray ValidationOngoingStateSynapteBoundaries; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray ValidationProkeimenonStateLedgerContracts; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist") + TArray ValidationOngoingStateAlleluiaBoundaries; + bool IsStructurallyValid() const { return !PrimaryReplayIntegrityContractId.IsEmpty() @@ -23039,6 +23127,20 @@ public: FHyperTwistTrainingValidationOngoingStateSynapteBoundary& OutBoundary ); + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Validation") + static bool TryGetValidationProkeimenonStateLedgerContractById( + const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle, + const FString& ContractId, + FHyperTwistTrainingValidationProkeimenonStateLedgerContract& OutContract + ); + + UFUNCTION(BlueprintCallable, Category = "HyperTwist|Training|Validation") + static bool TryGetValidationOngoingStateAlleluiaBoundaryById( + const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle, + const FString& BoundaryId, + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary& OutBoundary + ); + UFUNCTION(BlueprintPure, Category = "HyperTwist|Training|Validation") static FString BuildPackageChecklistTsv(const FHyperTwistTrainingValidationBenchmarkReferenceBundle& Bundle); }; diff --git a/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistValidationPhaseJHMProkeimenonAlleluiaContractTest.cpp b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistValidationPhaseJHMProkeimenonAlleluiaContractTest.cpp new file mode 100644 index 0000000..902e0ce --- /dev/null +++ b/UnrealHyperTwist/Source/UnrealHyperTwist/Tests/HyperTwistValidationPhaseJHMProkeimenonAlleluiaContractTest.cpp @@ -0,0 +1,91 @@ +#include "HyperTwistTraining/HyperTwistTrainingRuntimeLibrary.h" + +#include "Misc/AutomationTest.h" + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FHyperTwistValidationPhaseJHMProkeimenonStateLedgerContractTest, + "HyperTwist.Validation.PhaseJHM.ProkeimenonStateLedgerContract", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +bool FHyperTwistValidationPhaseJHMProkeimenonStateLedgerContractTest::RunTest(const FString& Parameters) +{ + FHyperTwistTrainingValidationProkeimenonStateLedgerContract Contract; + const bool bResolved = UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationProkeimenonStateLedgerContract( + TEXT("validation-prokeimenon-state-ledger-contract"), + Contract); + + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must resolve from the runtime library."), + bResolved); + if (!bResolved) + { + return false; + } + + TestEqual( + TEXT("The validation prokeimenon-state ledger contract id must stay stable."), + Contract.ContractId, + FString(TEXT("validation-prokeimenon-state-ledger-contract"))); + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must be structurally valid."), + Contract.IsStructurallyValid()); + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must carry first-party source attribution."), + Contract.SourceAttribution.IsStructurallyValid()); + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must carry at least one ledger id."), + Contract.LedgerIds.Num() > 0); + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must carry at least one guard tag."), + Contract.ProkeimenonGuardTags.Num() > 0); + TestTrue( + TEXT("The validation prokeimenon-state ledger contract must carry at least one explicit exclusion."), + Contract.ExplicitExclusions.Num() > 0); + + return true; +} + +IMPLEMENT_SIMPLE_AUTOMATION_TEST( + FHyperTwistValidationPhaseJHMOngoingStateAlleluiaBoundaryTest, + "HyperTwist.Validation.PhaseJHM.OngoingStateAlleluiaBoundary", + EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter +) + +bool FHyperTwistValidationPhaseJHMOngoingStateAlleluiaBoundaryTest::RunTest(const FString& Parameters) +{ + FHyperTwistTrainingValidationOngoingStateAlleluiaBoundary Boundary; + const bool bResolved = UHyperTwistTrainingRuntimeLibrary::TryGetBundledValidationOngoingStateAlleluiaBoundary( + TEXT("validation-ongoing-state-alleluia-boundary"), + Boundary); + + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must resolve from the runtime library."), + bResolved); + if (!bResolved) + { + return false; + } + + TestEqual( + TEXT("The validation ongoing-state alleluia boundary id must stay stable."), + Boundary.BoundaryId, + FString(TEXT("validation-ongoing-state-alleluia-boundary"))); + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must be structurally valid."), + Boundary.IsStructurallyValid()); + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must carry first-party source attribution."), + Boundary.SourceAttribution.IsStructurallyValid()); + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must carry at least one alleluia id."), + Boundary.AlleluiaIds.Num() > 0); + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must carry at least one guard tag."), + Boundary.AlleluiaGuardTags.Num() > 0); + TestTrue( + TEXT("The validation ongoing-state alleluia boundary must carry at least one explicit exclusion."), + Boundary.ExplicitExclusions.Num() > 0); + + return true; +} diff --git a/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md b/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md index b170da4..1fb3443 100644 --- a/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md +++ b/docs/ops/HYPERTWIST_IMPLEMENTATION_PHASE_1_KICKOFF.md @@ -1411,6 +1411,11 @@ The next bounded move is now: 526. keep the ectenia-and-synapte guard visible: - keep ectenia-state ledgers and ongoing-state synapte scoped to bounded runtime evidence ectenia continuity - do not widen them into ectenia-state platforms, ongoing synapte systems, generic dashboards, or release authority +527. the bounded first-party `Phase J-HM` + validation prokeimenon-state ledgers and bounded ongoing-state alleluia is now landed in current code +528. keep the prokeimenon-and-alleluia guard visible: + - keep prokeimenon-state ledgers and ongoing-state alleluia scoped to bounded runtime evidence prokeimenon continuity + - do not widen them into prokeimenon-state platforms, ongoing alleluia systems, generic dashboards, or release authority 71. keep the `MagicTile` guard visible: - keep broad non-Euclidean interaction or WinForms/OpenTK host-shell ownership closed by default unless a narrower first-party gap is proven above the landed macro-remapping seam diff --git a/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md b/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md index d1b3788..f45d162 100644 --- a/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md +++ b/docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md @@ -32,8 +32,8 @@ Current consolidated milestone snapshot: `Phase 6R-AZ`, with the bounded first-party memory lane closed through `Phase 6R-M6` - the bounded first-party skillization ladder is now landed through `Phase S7-C` - the bounded first-party immersive scaffold is now landed through `Phase I-E` -- the bounded first-party validation and benchmarking ladder is now landed through `Phase J-HL` -- the current next deliberate runtime milestone is `Phase J-HM`; `L` and `M–Z` remain future +- the bounded first-party validation and benchmarking ladder is now landed through `Phase J-HM` +- the current next deliberate runtime milestone is `Phase J-HN`; `M` and `N–Z` remain future expansion lanes rather than already-landed debt - Unreal C++ slices are not considered fully validated from symbol/doc/whitespace checks alone; the canonical Windows Unreal build doctrine now lives in