Coverage for node / src / stigmem_node / plugins / hooks.py: 100%

46 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-25 01:49 +0000

1"""Stable PR 4-INF.1 hook definitions.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from enum import StrEnum 

7 

8from .bands import Band 

9 

10 

11class HookSemantic(StrEnum): 

12 VOTING = "voting" 

13 FILTER_CHAIN = "filter_chain" 

14 SCORE_DELTA = "score_delta" 

15 FIRE_AND_FORGET = "fire_and_forget" 

16 

17 

18class HookOrdering(StrEnum): 

19 CORE_FIRST = "core_first" 

20 PLUGINS_FIRST = "plugins_first" 

21 CORE_ONLY_DEFAULT = "core_only_default" 

22 PLUGIN_ONLY = "plugin_only" 

23 

24 

25class HookName(StrEnum): 

26 PRE_ASSERT_AUTHORIZE = "pre_assert_authorize" 

27 PRE_ASSERT_VALIDATE = "pre_assert_validate" 

28 PRE_ASSERT_TRANSFORM = "pre_assert_transform" 

29 POST_ASSERT_PERSIST = "post_assert_persist" 

30 POST_ASSERT_PROPAGATE = "post_assert_propagate" 

31 POST_ASSERT_AUDIT = "post_assert_audit" 

32 PRE_RECALL_AUTHORIZE = "pre_recall_authorize" 

33 PRE_RECALL_REWRITE = "pre_recall_rewrite" 

34 RECALL_FILTER = "recall_filter" 

35 RECALL_RANK = "recall_rank" 

36 POST_RECALL_AUDIT = "post_recall_audit" 

37 FEDERATION_PEER_AUTHENTICATE = "federation_peer_authenticate" 

38 FEDERATION_INBOUND_VALIDATE = "federation_inbound_validate" 

39 FEDERATION_INBOUND_FILTER = "federation_inbound_filter" 

40 FEDERATION_OUTBOUND_FILTER = "federation_outbound_filter" 

41 FEDERATION_OUTBOUND_SIGN = "federation_outbound_sign" 

42 IDENTITY_RESOLVE = "identity_resolve" 

43 TENANT_RESOLVE = "tenant_resolve" 

44 CAPABILITY_CHECK = "capability_check" 

45 MIGRATION_REGISTER = "migration_register" 

46 AUDIT_EMIT = "audit_emit" 

47 CONFIG_VALIDATE = "config_validate" 

48 

49 

50@dataclass(frozen=True, slots=True) 

51class HookSpec: 

52 name: HookName 

53 band: Band 

54 semantic: HookSemantic 

55 ordering: HookOrdering 

56 strict_audit: bool = False 

57 

58 

59HOOK_SPECS: dict[str, HookSpec] = { 

60 HookName.PRE_ASSERT_AUTHORIZE.value: HookSpec( 

61 HookName.PRE_ASSERT_AUTHORIZE, 

62 Band.AUTHZ, 

63 HookSemantic.VOTING, 

64 HookOrdering.CORE_FIRST, 

65 ), 

66 HookName.PRE_ASSERT_VALIDATE.value: HookSpec( 

67 HookName.PRE_ASSERT_VALIDATE, 

68 Band.VALIDATE, 

69 HookSemantic.VOTING, 

70 HookOrdering.CORE_FIRST, 

71 ), 

72 HookName.PRE_ASSERT_TRANSFORM.value: HookSpec( 

73 HookName.PRE_ASSERT_TRANSFORM, 

74 Band.TRANSFORM, 

75 HookSemantic.FILTER_CHAIN, 

76 HookOrdering.PLUGINS_FIRST, 

77 ), 

78 HookName.POST_ASSERT_PERSIST.value: HookSpec( 

79 HookName.POST_ASSERT_PERSIST, 

80 Band.PERSIST, 

81 HookSemantic.FIRE_AND_FORGET, 

82 HookOrdering.PLUGIN_ONLY, 

83 ), 

84 HookName.POST_ASSERT_PROPAGATE.value: HookSpec( 

85 HookName.POST_ASSERT_PROPAGATE, 

86 Band.PERSIST, 

87 HookSemantic.FIRE_AND_FORGET, 

88 HookOrdering.PLUGIN_ONLY, 

89 ), 

90 HookName.POST_ASSERT_AUDIT.value: HookSpec( 

91 HookName.POST_ASSERT_AUDIT, 

92 Band.AUDIT, 

93 HookSemantic.FIRE_AND_FORGET, 

94 HookOrdering.CORE_ONLY_DEFAULT, 

95 strict_audit=True, 

96 ), 

97 HookName.PRE_RECALL_AUTHORIZE.value: HookSpec( 

98 HookName.PRE_RECALL_AUTHORIZE, 

99 Band.AUTHZ, 

100 HookSemantic.VOTING, 

101 HookOrdering.CORE_FIRST, 

102 ), 

103 HookName.PRE_RECALL_REWRITE.value: HookSpec( 

104 HookName.PRE_RECALL_REWRITE, 

105 Band.TRANSFORM, 

106 HookSemantic.FILTER_CHAIN, 

107 HookOrdering.PLUGINS_FIRST, 

108 ), 

109 HookName.RECALL_FILTER.value: HookSpec( 

110 HookName.RECALL_FILTER, 

111 Band.FILTER, 

112 HookSemantic.FILTER_CHAIN, 

113 HookOrdering.PLUGINS_FIRST, 

114 ), 

115 HookName.RECALL_RANK.value: HookSpec( 

116 HookName.RECALL_RANK, 

117 Band.RANK, 

118 HookSemantic.SCORE_DELTA, 

119 HookOrdering.PLUGINS_FIRST, 

120 ), 

121 HookName.POST_RECALL_AUDIT.value: HookSpec( 

122 HookName.POST_RECALL_AUDIT, 

123 Band.AUDIT, 

124 HookSemantic.FIRE_AND_FORGET, 

125 HookOrdering.CORE_ONLY_DEFAULT, 

126 strict_audit=True, 

127 ), 

128 HookName.FEDERATION_PEER_AUTHENTICATE.value: HookSpec( 

129 HookName.FEDERATION_PEER_AUTHENTICATE, 

130 Band.AUTHN, 

131 HookSemantic.VOTING, 

132 HookOrdering.CORE_FIRST, 

133 ), 

134 HookName.FEDERATION_INBOUND_VALIDATE.value: HookSpec( 

135 HookName.FEDERATION_INBOUND_VALIDATE, 

136 Band.VALIDATE, 

137 HookSemantic.VOTING, 

138 HookOrdering.CORE_FIRST, 

139 ), 

140 HookName.FEDERATION_INBOUND_FILTER.value: HookSpec( 

141 HookName.FEDERATION_INBOUND_FILTER, 

142 Band.FILTER, 

143 HookSemantic.FILTER_CHAIN, 

144 HookOrdering.PLUGINS_FIRST, 

145 ), 

146 HookName.FEDERATION_OUTBOUND_FILTER.value: HookSpec( 

147 HookName.FEDERATION_OUTBOUND_FILTER, 

148 Band.FILTER, 

149 HookSemantic.FILTER_CHAIN, 

150 HookOrdering.PLUGINS_FIRST, 

151 ), 

152 HookName.FEDERATION_OUTBOUND_SIGN.value: HookSpec( 

153 HookName.FEDERATION_OUTBOUND_SIGN, 

154 Band.TRANSFORM, 

155 HookSemantic.FILTER_CHAIN, 

156 HookOrdering.PLUGINS_FIRST, 

157 ), 

158 HookName.IDENTITY_RESOLVE.value: HookSpec( 

159 HookName.IDENTITY_RESOLVE, 

160 Band.AUTHN, 

161 HookSemantic.FILTER_CHAIN, 

162 HookOrdering.CORE_FIRST, 

163 ), 

164 HookName.TENANT_RESOLVE.value: HookSpec( 

165 HookName.TENANT_RESOLVE, 

166 Band.AUTHN, 

167 HookSemantic.FILTER_CHAIN, 

168 HookOrdering.CORE_FIRST, 

169 ), 

170 HookName.CAPABILITY_CHECK.value: HookSpec( 

171 HookName.CAPABILITY_CHECK, 

172 Band.AUTHZ, 

173 HookSemantic.VOTING, 

174 HookOrdering.CORE_FIRST, 

175 ), 

176 HookName.MIGRATION_REGISTER.value: HookSpec( 

177 HookName.MIGRATION_REGISTER, 

178 Band.TRANSFORM, 

179 HookSemantic.FILTER_CHAIN, 

180 HookOrdering.CORE_ONLY_DEFAULT, 

181 ), 

182 HookName.AUDIT_EMIT.value: HookSpec( 

183 HookName.AUDIT_EMIT, 

184 Band.AUDIT, 

185 HookSemantic.FIRE_AND_FORGET, 

186 HookOrdering.CORE_ONLY_DEFAULT, 

187 strict_audit=True, 

188 ), 

189 HookName.CONFIG_VALIDATE.value: HookSpec( 

190 HookName.CONFIG_VALIDATE, 

191 Band.VALIDATE, 

192 HookSemantic.VOTING, 

193 HookOrdering.CORE_FIRST, 

194 ), 

195} 

196 

197KNOWN_HOOKS = frozenset(HOOK_SPECS)