Add exact-equality Hermes ledger self-audit -- FABRIC-3.6.md task 2.6
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
d11eb2e5db
commit
313ffc89e6
@@ -48,6 +48,7 @@
|
||||
#include "starkernel/vm/kernel_hermes.h"
|
||||
#include "starkernel/vm/stadium.h"
|
||||
#include "starkernel/q48_16.h"
|
||||
#include "console.h"
|
||||
|
||||
static SkHermesMessage sk_hermes_msgs[SK_HERMES_MSG_MAX];
|
||||
|
||||
@@ -66,6 +67,27 @@ void sk_hermes_ledger(uint64_t *held, uint64_t *pulled, uint64_t *returned, uint
|
||||
if (consumed) *consumed = sk_hermes_consumed;
|
||||
}
|
||||
|
||||
int sk_hermes_audit_values(uint64_t held, uint64_t pulled, uint64_t returned, uint64_t consumed) {
|
||||
/* Epsilon zero (SXXXVII.3): exact integer equality, no tolerance. */
|
||||
return held == pulled - returned - consumed;
|
||||
}
|
||||
|
||||
static uint64_t sk_hermes_audit_failures = 0;
|
||||
|
||||
int sk_hermes_audit(void) {
|
||||
int ok = sk_hermes_audit_values(sk_hermes_held, sk_hermes_pulled,
|
||||
sk_hermes_returned, sk_hermes_consumed);
|
||||
if (!ok) {
|
||||
sk_hermes_audit_failures++;
|
||||
console_println("Kernel-Hermes AUDIT FAILURE: held != pulled - returned - consumed");
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
uint64_t sk_hermes_audit_failure_count(void) {
|
||||
return sk_hermes_audit_failures;
|
||||
}
|
||||
|
||||
static int sk_hermes_find_free_slot(void) {
|
||||
int i;
|
||||
for (i = 0; i < SK_HERMES_MSG_MAX; i++) {
|
||||
@@ -135,6 +157,7 @@ int sk_hermes_alloc(VMUuid vm_id, SkHermesMessage **out_msg) {
|
||||
* once every refusal path above has already returned. */
|
||||
sk_hermes_held += pulled;
|
||||
sk_hermes_pulled += pulled;
|
||||
sk_hermes_audit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -176,6 +199,7 @@ int sk_hermes_release(SkHermesMessage *msg) {
|
||||
if (rc == 0) {
|
||||
sk_hermes_held -= remaining;
|
||||
sk_hermes_returned += remaining;
|
||||
sk_hermes_audit();
|
||||
}
|
||||
|
||||
memset(msg, 0, sizeof(*msg));
|
||||
@@ -198,6 +222,7 @@ int sk_hermes_decay(SkHermesMessage *msg) {
|
||||
* pays for it). SXXXVII.3: decay's delta is exact and in hand here. */
|
||||
sk_hermes_consumed += before - after;
|
||||
sk_hermes_held -= before - after;
|
||||
sk_hermes_audit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user