Refactor recall and workflow skill validators
This commit is contained in:
parent
440124d1e2
commit
38b784b3c0
4 changed files with 343 additions and 270 deletions
|
|
@ -2404,3 +2404,224 @@ bool FHyperTwistSkillContinuityResumeState::IsStructurallyValid() const
|
|||
&& bNoSkillClaimsActiveUserNoteCaptureWithoutOwnerActivation
|
||||
== bComputedCaptureNoteGuard;
|
||||
}
|
||||
|
||||
bool FHyperTwistSkillRecallCompactViewSkill::IsStructurallyValid() const
|
||||
{
|
||||
if (SkillId.IsEmpty()
|
||||
|| DisplayLabel.IsEmpty()
|
||||
|| CommandSurfaceId.IsEmpty()
|
||||
|| ServiceBindingId.IsEmpty()
|
||||
|| OwnerLaneId.IsEmpty()
|
||||
|| OwnerFeatureId.IsEmpty()
|
||||
|| Status == EHyperTwistSkillStatus::None
|
||||
|| PermissionScopeIds.Num() == 0
|
||||
|| InputStateKinds.Num() == 0
|
||||
|| OutputArtifactKinds.Num() == 0
|
||||
|| PreviewHeadlines.Num() == 0
|
||||
|| AvailableItemCount < 0
|
||||
|| LinkedSourceCount <= 0
|
||||
|| !bReadsAuthoritativeStores
|
||||
|| !bPreservesOptionalAssistiveOffState
|
||||
|| !bDerivedAssistiveOnly
|
||||
|| !bHasValidationHarnessCoverage
|
||||
|| !bLinkedToAuthoritativeSources)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!HyperTwistSkillTypesInternal::AreAllStringsPopulated(PermissionScopeIds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(InputStateKinds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(OutputArtifactKinds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(PreviewHeadlines))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Status == EHyperTwistSkillStatus::ImplementedNow
|
||||
&& bLiveSkill
|
||||
&& bAvailableNow
|
||||
&& !bRequiresOwnerActivation;
|
||||
}
|
||||
|
||||
bool FHyperTwistSkillRecallCompactViewState::IsStructurallyValid() const
|
||||
{
|
||||
if (RegistryId.IsEmpty()
|
||||
|| ManifestVersion.IsEmpty()
|
||||
|| ReferenceUtc.IsEmpty()
|
||||
|| CommandSurfaceRootId.IsEmpty()
|
||||
|| TemplateVersion.IsEmpty()
|
||||
|| Skills.Num() == 0
|
||||
|| SkillCount != Skills.Num()
|
||||
|| !bEveryLiveSkillReadsAuthoritativeStores
|
||||
|| !bEverySkillPreservesOptionalAssistiveOffState
|
||||
|| !bEveryLiveSkillHasValidationHarnessCoverage
|
||||
|| !bCompactViewsRemainOptionalAndLinkedToAuthoritativeSources)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
TArray<FString> SeenSkillIds;
|
||||
int32 ComputedLiveSkillCount = 0;
|
||||
int32 ComputedAvailableNowCount = 0;
|
||||
int32 ComputedRecallMemorySkillCount = 0;
|
||||
int32 ComputedGenerateCompactViewSkillCount = 0;
|
||||
bool bComputedEveryLiveSkillReadsAuthoritativeStores = true;
|
||||
bool bComputedEverySkillPreservesOptionalAssistiveOffState = true;
|
||||
bool bComputedEveryLiveSkillHasValidationHarnessCoverage = true;
|
||||
bool bComputedCompactViewGuard = false;
|
||||
|
||||
for (const FHyperTwistSkillRecallCompactViewSkill& Skill : Skills)
|
||||
{
|
||||
if (!Skill.IsStructurallyValid() || SeenSkillIds.Contains(Skill.SkillId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SeenSkillIds.Add(Skill.SkillId);
|
||||
ComputedLiveSkillCount += Skill.bLiveSkill ? 1 : 0;
|
||||
ComputedAvailableNowCount += Skill.bAvailableNow ? 1 : 0;
|
||||
ComputedRecallMemorySkillCount += Skill.SkillId == TEXT("skill/recall-memory") ? 1 : 0;
|
||||
ComputedGenerateCompactViewSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/generate-compact-view") ? 1 : 0;
|
||||
bComputedEverySkillPreservesOptionalAssistiveOffState &=
|
||||
Skill.bPreservesOptionalAssistiveOffState;
|
||||
|
||||
if (Skill.bLiveSkill)
|
||||
{
|
||||
bComputedEveryLiveSkillReadsAuthoritativeStores &= Skill.bReadsAuthoritativeStores;
|
||||
bComputedEveryLiveSkillHasValidationHarnessCoverage &=
|
||||
Skill.bHasValidationHarnessCoverage;
|
||||
}
|
||||
|
||||
if (Skill.SkillId == TEXT("skill/generate-compact-view"))
|
||||
{
|
||||
bComputedCompactViewGuard =
|
||||
Skill.bOptionalCompactView && Skill.bLinkedToAuthoritativeSources;
|
||||
}
|
||||
}
|
||||
|
||||
return LiveSkillCount == ComputedLiveSkillCount
|
||||
&& AvailableNowCount == ComputedAvailableNowCount
|
||||
&& RecallMemorySkillCount == ComputedRecallMemorySkillCount
|
||||
&& GenerateCompactViewSkillCount == ComputedGenerateCompactViewSkillCount
|
||||
&& bEveryLiveSkillReadsAuthoritativeStores
|
||||
== bComputedEveryLiveSkillReadsAuthoritativeStores
|
||||
&& bEverySkillPreservesOptionalAssistiveOffState
|
||||
== bComputedEverySkillPreservesOptionalAssistiveOffState
|
||||
&& bEveryLiveSkillHasValidationHarnessCoverage
|
||||
== bComputedEveryLiveSkillHasValidationHarnessCoverage
|
||||
&& bCompactViewsRemainOptionalAndLinkedToAuthoritativeSources
|
||||
== bComputedCompactViewGuard;
|
||||
}
|
||||
|
||||
bool FHyperTwistSkillWorkflowMemoryCaptureSkill::IsStructurallyValid() const
|
||||
{
|
||||
if (SkillId.IsEmpty()
|
||||
|| DisplayLabel.IsEmpty()
|
||||
|| CommandSurfaceId.IsEmpty()
|
||||
|| ServiceBindingId.IsEmpty()
|
||||
|| OwnerLaneId.IsEmpty()
|
||||
|| OwnerFeatureId.IsEmpty()
|
||||
|| Status == EHyperTwistSkillStatus::None
|
||||
|| PermissionScopeIds.Num() == 0
|
||||
|| InputStateKinds.Num() == 0
|
||||
|| OutputArtifactKinds.Num() == 0
|
||||
|| PreviewHeadlines.Num() == 0
|
||||
|| AvailableItemCount <= 0
|
||||
|| LinkedWorkflowEntityCount <= 0
|
||||
|| BlockingItemCount < 0
|
||||
|| !bReadsAuthoritativeStores
|
||||
|| !bPreservesOptionalAssistiveOffState
|
||||
|| !bDerivedAssistiveOnly
|
||||
|| !bHasValidationHarnessCoverage
|
||||
|| !bAvoidsUserAuthoredNoteCapture
|
||||
|| !bAvoidsOpaqueSummaryCollapse)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!HyperTwistSkillTypesInternal::AreAllStringsPopulated(PermissionScopeIds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(InputStateKinds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(OutputArtifactKinds)
|
||||
|| !HyperTwistSkillTypesInternal::AreAllStringsPopulated(PreviewHeadlines))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return Status == EHyperTwistSkillStatus::ImplementedNow
|
||||
&& bLiveSkill
|
||||
&& bAvailableNow
|
||||
&& !bRequiresOwnerActivation;
|
||||
}
|
||||
|
||||
bool FHyperTwistSkillWorkflowMemoryCaptureState::IsStructurallyValid() const
|
||||
{
|
||||
if (RegistryId.IsEmpty()
|
||||
|| ManifestVersion.IsEmpty()
|
||||
|| ReferenceUtc.IsEmpty()
|
||||
|| CommandSurfaceRootId.IsEmpty()
|
||||
|| TemplateVersion.IsEmpty()
|
||||
|| Skills.Num() == 0
|
||||
|| SkillCount != Skills.Num()
|
||||
|| !bEveryLiveSkillReadsAuthoritativeStores
|
||||
|| !bEverySkillPreservesOptionalAssistiveOffState
|
||||
|| !bEveryLiveSkillHasValidationHarnessCoverage
|
||||
|| !bWorkflowMemoryRemainsSeparateFromUserAuthoredNotes
|
||||
|| !bWorkflowMemoryDoesNotCollapseIntoOpaqueSummaries)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
TArray<FString> SeenSkillIds;
|
||||
int32 ComputedLiveSkillCount = 0;
|
||||
int32 ComputedAvailableNowCount = 0;
|
||||
int32 ComputedCaptureSessionTemplateSkillCount = 0;
|
||||
int32 ComputedCaptureFollowUpRoutineSkillCount = 0;
|
||||
bool bComputedEveryLiveSkillReadsAuthoritativeStores = true;
|
||||
bool bComputedEverySkillPreservesOptionalAssistiveOffState = true;
|
||||
bool bComputedEveryLiveSkillHasValidationHarnessCoverage = true;
|
||||
bool bComputedUserNoteSeparation = true;
|
||||
bool bComputedOpaqueSummaryGuard = true;
|
||||
|
||||
for (const FHyperTwistSkillWorkflowMemoryCaptureSkill& Skill : Skills)
|
||||
{
|
||||
if (!Skill.IsStructurallyValid() || SeenSkillIds.Contains(Skill.SkillId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SeenSkillIds.Add(Skill.SkillId);
|
||||
ComputedLiveSkillCount += Skill.bLiveSkill ? 1 : 0;
|
||||
ComputedAvailableNowCount += Skill.bAvailableNow ? 1 : 0;
|
||||
ComputedCaptureSessionTemplateSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/capture-session-template") ? 1 : 0;
|
||||
ComputedCaptureFollowUpRoutineSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/capture-follow-up-routine") ? 1 : 0;
|
||||
bComputedEverySkillPreservesOptionalAssistiveOffState &=
|
||||
Skill.bPreservesOptionalAssistiveOffState;
|
||||
bComputedUserNoteSeparation &= Skill.bAvoidsUserAuthoredNoteCapture;
|
||||
bComputedOpaqueSummaryGuard &= Skill.bAvoidsOpaqueSummaryCollapse;
|
||||
|
||||
if (Skill.bLiveSkill)
|
||||
{
|
||||
bComputedEveryLiveSkillReadsAuthoritativeStores &= Skill.bReadsAuthoritativeStores;
|
||||
bComputedEveryLiveSkillHasValidationHarnessCoverage &=
|
||||
Skill.bHasValidationHarnessCoverage;
|
||||
}
|
||||
}
|
||||
|
||||
return LiveSkillCount == ComputedLiveSkillCount
|
||||
&& AvailableNowCount == ComputedAvailableNowCount
|
||||
&& CaptureSessionTemplateSkillCount == ComputedCaptureSessionTemplateSkillCount
|
||||
&& CaptureFollowUpRoutineSkillCount == ComputedCaptureFollowUpRoutineSkillCount
|
||||
&& bEveryLiveSkillReadsAuthoritativeStores
|
||||
== bComputedEveryLiveSkillReadsAuthoritativeStores
|
||||
&& bEverySkillPreservesOptionalAssistiveOffState
|
||||
== bComputedEverySkillPreservesOptionalAssistiveOffState
|
||||
&& bEveryLiveSkillHasValidationHarnessCoverage
|
||||
== bComputedEveryLiveSkillHasValidationHarnessCoverage
|
||||
&& bWorkflowMemoryRemainsSeparateFromUserAuthoredNotes
|
||||
== bComputedUserNoteSeparation
|
||||
&& bWorkflowMemoryDoesNotCollapseIntoOpaqueSummaries
|
||||
== bComputedOpaqueSummaryGuard;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1910,69 +1910,7 @@ struct FHyperTwistSkillRecallCompactViewSkill
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Summary;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
if (SkillId.IsEmpty()
|
||||
|| DisplayLabel.IsEmpty()
|
||||
|| CommandSurfaceId.IsEmpty()
|
||||
|| ServiceBindingId.IsEmpty()
|
||||
|| OwnerLaneId.IsEmpty()
|
||||
|| OwnerFeatureId.IsEmpty()
|
||||
|| Status == EHyperTwistSkillStatus::None
|
||||
|| PermissionScopeIds.Num() == 0
|
||||
|| InputStateKinds.Num() == 0
|
||||
|| OutputArtifactKinds.Num() == 0
|
||||
|| PreviewHeadlines.Num() == 0
|
||||
|| AvailableItemCount < 0
|
||||
|| LinkedSourceCount <= 0
|
||||
|| !bReadsAuthoritativeStores
|
||||
|| !bPreservesOptionalAssistiveOffState
|
||||
|| !bDerivedAssistiveOnly
|
||||
|| !bHasValidationHarnessCoverage
|
||||
|| !bLinkedToAuthoritativeSources)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const FString& Value : PermissionScopeIds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : InputStateKinds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : OutputArtifactKinds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : PreviewHeadlines)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (Status == EHyperTwistSkillStatus::ImplementedNow)
|
||||
{
|
||||
return bLiveSkill && bAvailableNow && !bRequiresOwnerActivation;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
bool IsStructurallyValid() const;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
|
|
@ -2028,77 +1966,7 @@ struct FHyperTwistSkillRecallCompactViewState
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Summary;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
if (RegistryId.IsEmpty()
|
||||
|| ManifestVersion.IsEmpty()
|
||||
|| ReferenceUtc.IsEmpty()
|
||||
|| CommandSurfaceRootId.IsEmpty()
|
||||
|| TemplateVersion.IsEmpty()
|
||||
|| Skills.Num() == 0
|
||||
|| SkillCount != Skills.Num()
|
||||
|| !bEveryLiveSkillReadsAuthoritativeStores
|
||||
|| !bEverySkillPreservesOptionalAssistiveOffState
|
||||
|| !bEveryLiveSkillHasValidationHarnessCoverage
|
||||
|| !bCompactViewsRemainOptionalAndLinkedToAuthoritativeSources)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
TArray<FString> SeenSkillIds;
|
||||
int32 ComputedLiveSkillCount = 0;
|
||||
int32 ComputedAvailableNowCount = 0;
|
||||
int32 ComputedRecallMemorySkillCount = 0;
|
||||
int32 ComputedGenerateCompactViewSkillCount = 0;
|
||||
bool bComputedEveryLiveSkillReadsAuthoritativeStores = true;
|
||||
bool bComputedEverySkillPreservesOptionalAssistiveOffState = true;
|
||||
bool bComputedEveryLiveSkillHasValidationHarnessCoverage = true;
|
||||
bool bComputedCompactViewGuard = false;
|
||||
|
||||
for (const FHyperTwistSkillRecallCompactViewSkill& Skill : Skills)
|
||||
{
|
||||
if (!Skill.IsStructurallyValid() || SeenSkillIds.Contains(Skill.SkillId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SeenSkillIds.Add(Skill.SkillId);
|
||||
ComputedLiveSkillCount += Skill.bLiveSkill ? 1 : 0;
|
||||
ComputedAvailableNowCount += Skill.bAvailableNow ? 1 : 0;
|
||||
ComputedRecallMemorySkillCount +=
|
||||
Skill.SkillId == TEXT("skill/recall-memory") ? 1 : 0;
|
||||
ComputedGenerateCompactViewSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/generate-compact-view") ? 1 : 0;
|
||||
bComputedEverySkillPreservesOptionalAssistiveOffState &=
|
||||
Skill.bPreservesOptionalAssistiveOffState;
|
||||
|
||||
if (Skill.bLiveSkill)
|
||||
{
|
||||
bComputedEveryLiveSkillReadsAuthoritativeStores &= Skill.bReadsAuthoritativeStores;
|
||||
bComputedEveryLiveSkillHasValidationHarnessCoverage &=
|
||||
Skill.bHasValidationHarnessCoverage;
|
||||
}
|
||||
|
||||
if (Skill.SkillId == TEXT("skill/generate-compact-view"))
|
||||
{
|
||||
bComputedCompactViewGuard =
|
||||
Skill.bOptionalCompactView && Skill.bLinkedToAuthoritativeSources;
|
||||
}
|
||||
}
|
||||
|
||||
return LiveSkillCount == ComputedLiveSkillCount
|
||||
&& AvailableNowCount == ComputedAvailableNowCount
|
||||
&& RecallMemorySkillCount == ComputedRecallMemorySkillCount
|
||||
&& GenerateCompactViewSkillCount == ComputedGenerateCompactViewSkillCount
|
||||
&& bEveryLiveSkillReadsAuthoritativeStores
|
||||
== bComputedEveryLiveSkillReadsAuthoritativeStores
|
||||
&& bEverySkillPreservesOptionalAssistiveOffState
|
||||
== bComputedEverySkillPreservesOptionalAssistiveOffState
|
||||
&& bEveryLiveSkillHasValidationHarnessCoverage
|
||||
== bComputedEveryLiveSkillHasValidationHarnessCoverage
|
||||
&& bCompactViewsRemainOptionalAndLinkedToAuthoritativeSources
|
||||
== bComputedCompactViewGuard;
|
||||
}
|
||||
bool IsStructurallyValid() const;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
|
|
@ -2178,69 +2046,7 @@ struct FHyperTwistSkillWorkflowMemoryCaptureSkill
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Summary;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
if (SkillId.IsEmpty()
|
||||
|| DisplayLabel.IsEmpty()
|
||||
|| CommandSurfaceId.IsEmpty()
|
||||
|| ServiceBindingId.IsEmpty()
|
||||
|| OwnerLaneId.IsEmpty()
|
||||
|| OwnerFeatureId.IsEmpty()
|
||||
|| Status == EHyperTwistSkillStatus::None
|
||||
|| PermissionScopeIds.Num() == 0
|
||||
|| InputStateKinds.Num() == 0
|
||||
|| OutputArtifactKinds.Num() == 0
|
||||
|| PreviewHeadlines.Num() == 0
|
||||
|| AvailableItemCount <= 0
|
||||
|| LinkedWorkflowEntityCount <= 0
|
||||
|| BlockingItemCount < 0
|
||||
|| !bReadsAuthoritativeStores
|
||||
|| !bPreservesOptionalAssistiveOffState
|
||||
|| !bDerivedAssistiveOnly
|
||||
|| !bHasValidationHarnessCoverage
|
||||
|| !bAvoidsUserAuthoredNoteCapture
|
||||
|| !bAvoidsOpaqueSummaryCollapse)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const FString& Value : PermissionScopeIds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : InputStateKinds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : OutputArtifactKinds)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for (const FString& Value : PreviewHeadlines)
|
||||
{
|
||||
if (Value.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return Status == EHyperTwistSkillStatus::ImplementedNow
|
||||
&& bLiveSkill
|
||||
&& bAvailableNow
|
||||
&& !bRequiresOwnerActivation;
|
||||
}
|
||||
bool IsStructurallyValid() const;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
|
|
@ -2299,79 +2105,7 @@ struct FHyperTwistSkillWorkflowMemoryCaptureState
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "HyperTwist")
|
||||
FString Summary;
|
||||
|
||||
bool IsStructurallyValid() const
|
||||
{
|
||||
if (RegistryId.IsEmpty()
|
||||
|| ManifestVersion.IsEmpty()
|
||||
|| ReferenceUtc.IsEmpty()
|
||||
|| CommandSurfaceRootId.IsEmpty()
|
||||
|| TemplateVersion.IsEmpty()
|
||||
|| Skills.Num() == 0
|
||||
|| SkillCount != Skills.Num()
|
||||
|| !bEveryLiveSkillReadsAuthoritativeStores
|
||||
|| !bEverySkillPreservesOptionalAssistiveOffState
|
||||
|| !bEveryLiveSkillHasValidationHarnessCoverage
|
||||
|| !bWorkflowMemoryRemainsSeparateFromUserAuthoredNotes
|
||||
|| !bWorkflowMemoryDoesNotCollapseIntoOpaqueSummaries)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
TArray<FString> SeenSkillIds;
|
||||
int32 ComputedLiveSkillCount = 0;
|
||||
int32 ComputedAvailableNowCount = 0;
|
||||
int32 ComputedCaptureSessionTemplateSkillCount = 0;
|
||||
int32 ComputedCaptureFollowUpRoutineSkillCount = 0;
|
||||
bool bComputedEveryLiveSkillReadsAuthoritativeStores = true;
|
||||
bool bComputedEverySkillPreservesOptionalAssistiveOffState = true;
|
||||
bool bComputedEveryLiveSkillHasValidationHarnessCoverage = true;
|
||||
bool bComputedUserNoteSeparation = true;
|
||||
bool bComputedOpaqueSummaryGuard = true;
|
||||
|
||||
for (const FHyperTwistSkillWorkflowMemoryCaptureSkill& Skill : Skills)
|
||||
{
|
||||
if (!Skill.IsStructurallyValid() || SeenSkillIds.Contains(Skill.SkillId))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SeenSkillIds.Add(Skill.SkillId);
|
||||
ComputedLiveSkillCount += Skill.bLiveSkill ? 1 : 0;
|
||||
ComputedAvailableNowCount += Skill.bAvailableNow ? 1 : 0;
|
||||
ComputedCaptureSessionTemplateSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/capture-session-template") ? 1 : 0;
|
||||
ComputedCaptureFollowUpRoutineSkillCount +=
|
||||
Skill.SkillId == TEXT("skill/capture-follow-up-routine") ? 1 : 0;
|
||||
bComputedEverySkillPreservesOptionalAssistiveOffState &=
|
||||
Skill.bPreservesOptionalAssistiveOffState;
|
||||
bComputedUserNoteSeparation &= Skill.bAvoidsUserAuthoredNoteCapture;
|
||||
bComputedOpaqueSummaryGuard &= Skill.bAvoidsOpaqueSummaryCollapse;
|
||||
|
||||
if (Skill.bLiveSkill)
|
||||
{
|
||||
bComputedEveryLiveSkillReadsAuthoritativeStores &= Skill.bReadsAuthoritativeStores;
|
||||
bComputedEveryLiveSkillHasValidationHarnessCoverage &=
|
||||
Skill.bHasValidationHarnessCoverage;
|
||||
}
|
||||
}
|
||||
|
||||
return LiveSkillCount == ComputedLiveSkillCount
|
||||
&& AvailableNowCount == ComputedAvailableNowCount
|
||||
&& CaptureSessionTemplateSkillCount
|
||||
== ComputedCaptureSessionTemplateSkillCount
|
||||
&& CaptureFollowUpRoutineSkillCount
|
||||
== ComputedCaptureFollowUpRoutineSkillCount
|
||||
&& bEveryLiveSkillReadsAuthoritativeStores
|
||||
== bComputedEveryLiveSkillReadsAuthoritativeStores
|
||||
&& bEverySkillPreservesOptionalAssistiveOffState
|
||||
== bComputedEverySkillPreservesOptionalAssistiveOffState
|
||||
&& bEveryLiveSkillHasValidationHarnessCoverage
|
||||
== bComputedEveryLiveSkillHasValidationHarnessCoverage
|
||||
&& bWorkflowMemoryRemainsSeparateFromUserAuthoredNotes
|
||||
== bComputedUserNoteSeparation
|
||||
&& bWorkflowMemoryDoesNotCollapseIntoOpaqueSummaries
|
||||
== bComputedOpaqueSummaryGuard;
|
||||
}
|
||||
bool IsStructurallyValid() const;
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
|
|
|
|||
|
|
@ -749,6 +749,81 @@ Latest Unreal validator-ownership follow-up later on `2026-06-24`:
|
|||
later recall/workflow-memory skill validators and any remaining
|
||||
recognition-side long validators
|
||||
|
||||
Latest same-lane follow-up later still on `2026-06-24`:
|
||||
|
||||
- the next bounded Unreal refactor packet then drained the later
|
||||
recall/workflow-memory validator family out of the public skill header as
|
||||
well:
|
||||
- `FHyperTwistSkillRecallCompactViewSkill::IsStructurallyValid()`
|
||||
- `FHyperTwistSkillRecallCompactViewState::IsStructurallyValid()`
|
||||
- `FHyperTwistSkillWorkflowMemoryCaptureSkill::IsStructurallyValid()`
|
||||
- `FHyperTwistSkillWorkflowMemoryCaptureState::IsStructurallyValid()`
|
||||
- those validators now live in:
|
||||
- `Private/HyperTwistSkills/HyperTwistSkillTypes.cpp`
|
||||
- the owned source-only structural gate improved again under that packet:
|
||||
- `scripts/run-hypertwist-sentrux-source-only.sh`
|
||||
- `Quality: 6181`
|
||||
- all `7` checked rules passing
|
||||
- a fresh public-header inline scan then confirmed the pressure point moved
|
||||
again; the current largest remaining inline validators in
|
||||
`Public/HyperTwistSkills/HyperTwistSkillTypes.h` are now:
|
||||
- `FHyperTwistSkillInvocationRecord` at `70` lines
|
||||
- `FHyperTwistSkillValidationContractCase` at `39` lines
|
||||
- `FHyperTwistSkillCommandProvenanceState` at `37` lines
|
||||
- the owned graph/impact lane was also refreshed again after that packet:
|
||||
- `scripts/run-hypertwist-gitnexus-analyze.sh`
|
||||
- the retained local CLI again failed cleanly on this Linux host
|
||||
- the bounded wrapper then completed successfully through
|
||||
`npx -y gitnexus@latest`
|
||||
- refreshed bounded-mirror graph stats are now:
|
||||
- `16,175` nodes
|
||||
- `37,855` edges
|
||||
- `664` clusters
|
||||
- `300` flows
|
||||
- `scripts/run-hypertwist-gitnexus-status.sh` then reported:
|
||||
- `Indexed commit: 866433c`
|
||||
- `Current commit: 866433c`
|
||||
- `Status: up-to-date`
|
||||
- the broader owned browser/public/manual lane also stayed green again under
|
||||
the current umbrella validation:
|
||||
- `scripts/run-hypertwist-web-surface-validation.sh`
|
||||
- focused website route/auth/release validation:
|
||||
- `12` test files passed
|
||||
- `62` tests passed
|
||||
- website/server tests:
|
||||
- `10` test files passed
|
||||
- `36` tests passed
|
||||
- website plus `Content/Browser` production audits:
|
||||
- `found 0 vulnerabilities`
|
||||
- website/server again retained only the already-documented upstream
|
||||
`supertokens-node -> nodemailer` residual
|
||||
- the touched Unreal skill files were then hash-synced again into the
|
||||
maintained Windows validation root:
|
||||
- `C:\HyperTwist_worktrees\phase10validate`
|
||||
- an initial same-turn Windows build also succeeded, but because that first
|
||||
build was launched too close to the write-generating sync step, it was
|
||||
intentionally superseded instead of being treated as the final authority
|
||||
- the authoritative proof for this packet is the later sequential rerun:
|
||||
1. re-sync touched files
|
||||
2. rerun `Build.bat` on the maintained validation root
|
||||
- that doctrine-clean Windows Unreal rerun then succeeded with:
|
||||
- `Result: Succeeded`
|
||||
- parallel executor time `322.78 seconds`
|
||||
- total execution time `334.43 seconds`
|
||||
- the same real build lane again compiled the directly affected skill packet
|
||||
translation units in that clean rerun, including:
|
||||
- `HyperTwistSkillPhaseS3BRecallCompactViewContractTest.cpp`
|
||||
- `HyperTwistSkillPhaseS3CWorkflowMemoryCaptureContractTest.cpp`
|
||||
- `HyperTwistSkillTypes.cpp`
|
||||
- current highest-signal structural reading after this later packet:
|
||||
- the public/manual and browser-runtime lanes remain green and are not the
|
||||
current debt center
|
||||
- the recall/workflow-memory validator family is no longer a public-header
|
||||
pressure point
|
||||
- the next truthful “vanilla refactor” target is now primarily
|
||||
`FHyperTwistSkillInvocationRecord`, with only smaller header-inline seams
|
||||
behind it
|
||||
|
||||
## Out of scope
|
||||
|
||||
This note does not:
|
||||
|
|
|
|||
|
|
@ -176,6 +176,49 @@ Latest same-day follow-up later on `2026-06-24`:
|
|||
- `scripts/run-hypertwist-gitnexus-status.sh` then again reported the bounded
|
||||
mirror `Status: up-to-date`
|
||||
|
||||
Latest later same-lane follow-up still on `2026-06-24`:
|
||||
|
||||
- the next bounded Unreal refactor packet moved the later
|
||||
recall/workflow-memory validator family out of the public skill header and
|
||||
into `Private/HyperTwistSkills/HyperTwistSkillTypes.cpp`
|
||||
- `scripts/run-hypertwist-sentrux-source-only.sh` improved again to:
|
||||
- `Quality: 6181`
|
||||
- all `7` rules passing
|
||||
- the public skill header inline scan then shifted again; the current largest
|
||||
remaining inline validator there is now:
|
||||
- `FHyperTwistSkillInvocationRecord` at `70` lines
|
||||
- `scripts/run-hypertwist-gitnexus-analyze.sh` again fell back cleanly to
|
||||
`npx -y gitnexus@latest` on this host and refreshed the bounded source-only
|
||||
mirror at:
|
||||
- `16,175` nodes
|
||||
- `37,855` edges
|
||||
- `664` clusters
|
||||
- `300` flows
|
||||
- `scripts/run-hypertwist-gitnexus-status.sh` then again reported:
|
||||
- `Indexed commit: 866433c`
|
||||
- `Current commit: 866433c`
|
||||
- `Status: up-to-date`
|
||||
- `scripts/run-hypertwist-web-surface-validation.sh` also stayed green again:
|
||||
- focused website route/auth/release suite: `12` files, `62` tests passed
|
||||
- website/server suite: `10` files, `36` tests passed
|
||||
- website and `Content/Browser` production audits: `found 0 vulnerabilities`
|
||||
- website/server retained only the already-documented upstream
|
||||
`supertokens-node -> nodemailer` residual
|
||||
- the authoritative Windows Unreal proof for this validator packet is the
|
||||
doctrine-clean sequential rerun against maintained validation root
|
||||
`C:\HyperTwist_worktrees\phase10validate`:
|
||||
- re-sync touched files first
|
||||
- rerun `Build.bat` second
|
||||
- `Result: Succeeded`
|
||||
- parallel executor time `322.78 seconds`
|
||||
- total execution time `334.43 seconds`
|
||||
- current truthful “vanilla refactor” reading:
|
||||
- the browser/public/manual lane is green
|
||||
- the recall/workflow-memory validator family is no longer the header
|
||||
pressure point
|
||||
- the next meaningful structural target is now
|
||||
`FHyperTwistSkillInvocationRecord`
|
||||
|
||||
## Canonical development authorities
|
||||
|
||||
Use these before widening implementation:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue