mirror of
https://github.com/SHOGGOTH-SECTOR/sica-fondt.git
synced 2026-08-01 16:40:24 +00:00
Fix compile errors so Gen.03 core builds and tests pass
Built locally with GNAT 13.3 (gprbuild, -gnat2022). All four test suites (soul/trust/cycle/config) pass and the MCP server responds correctly to initialize / tools/list / tools/call over stdio. Fixes: - soul-state.ads: move session storage types (Session_Key/Slot/Table) out of the protected definition's private part (only data components are legal there) into the package visible part. - soul-state.ads: drop pre/postconditions that call the object's own protected function Is_Initialized (illegal internal call in a contract); the guards already live in the bodies. - mafiabot_types.ads: pin Axis_Value'Small to 0.01 so 1.0 doesn't land one past the signed-8-bit base range (GNAT default 2**-7 small). - config_loader.ads: name the Entries array type (anonymous arrays may not be record components). - ada_medium.adb: qualify Mafiabot_Types.Ada_Medium (the package name shadows the Organ_Id literal); fix a malformed Bounded_Text aggregate. - soul-state.adb: fix Bounded_Text aggregate and the single-Character Footer. - soul-celtic_cross.adb / soul_tests.adb: 'use type' for Slot_State equality. - hermes_protocol.adb: qualify a single-char String aggregate to disambiguate the Append overloads. - Remove soul.adb (empty body for a spec that does not allow one). - Add .gitignore for build artifacts and the Alire-generated config project.
This commit is contained in:
parent
b381b780c2
commit
71c82526d4
11
mafiabot_core/.gitignore
vendored
Normal file
11
mafiabot_core/.gitignore
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Build artifacts
|
||||||
|
/bin/
|
||||||
|
/obj/
|
||||||
|
|
||||||
|
# Alire-generated config (regenerated by `alr build` / CI)
|
||||||
|
/config/*_config.gpr
|
||||||
|
/config/*_config.ads
|
||||||
|
/config/*_config.h
|
||||||
|
|
||||||
|
# Alire workspace
|
||||||
|
/alire/
|
||||||
@ -24,8 +24,10 @@ is
|
|||||||
type Entry_Index is range 1 .. Max_Keys;
|
type Entry_Index is range 1 .. Max_Keys;
|
||||||
subtype Entry_Count is Natural range 0 .. Max_Keys;
|
subtype Entry_Count is Natural range 0 .. Max_Keys;
|
||||||
|
|
||||||
|
type Entry_Array is array (Entry_Index) of Config_Entry;
|
||||||
|
|
||||||
type Config_Store is record
|
type Config_Store is record
|
||||||
Entries : array (Entry_Index) of Config_Entry :=
|
Entries : Entry_Array :=
|
||||||
(others => (Key => (others => ' '), Key_Len => 0,
|
(others => (Key => (others => ' '), Key_Len => 0,
|
||||||
Val => (others => ' '), Val_Len => 0));
|
Val => (others => ' '), Val_Len => 0));
|
||||||
Count : Entry_Count := 0;
|
Count : Entry_Count := 0;
|
||||||
|
|||||||
@ -168,7 +168,7 @@ is
|
|||||||
Msg : Organ_Message;
|
Msg : Organ_Message;
|
||||||
Ref : Soul.State.Session_Ref := Soul.State.No_Session;
|
Ref : Soul.State.Session_Ref := Soul.State.No_Session;
|
||||||
begin
|
begin
|
||||||
Output := (others => ' ', Length => 0);
|
Output := (Data => (others => ' '), Length => 0);
|
||||||
Inference_Orchestrator.Reset;
|
Inference_Orchestrator.Reset;
|
||||||
|
|
||||||
-- Resolve the session for this (uid, channel, server). The cross and
|
-- Resolve the session for this (uid, channel, server). The cross and
|
||||||
@ -304,7 +304,10 @@ is
|
|||||||
-- Step 20: sendAda
|
-- Step 20: sendAda
|
||||||
Inference_Orchestrator.Advance (Phase_Send_Ada, S);
|
Inference_Orchestrator.Advance (Phase_Send_Ada, S);
|
||||||
if S /= OK then Status := S; return; end if;
|
if S /= OK then Status := S; return; end if;
|
||||||
Msg := Make_Internal_Msg (Ada_Medium, Ada_Medium, Accum);
|
-- Qualify the Organ_Id literal: the simple name Ada_Medium binds to
|
||||||
|
-- this package, shadowing the enum value of the same name.
|
||||||
|
Msg := Make_Internal_Msg
|
||||||
|
(Mafiabot_Types.Ada_Medium, Mafiabot_Types.Ada_Medium, Accum);
|
||||||
|
|
||||||
-- Step 21: Ada routes (trust boundary outbound screen)
|
-- Step 21: Ada routes (trust boundary outbound screen)
|
||||||
Inference_Orchestrator.Advance (Phase_Route, S);
|
Inference_Orchestrator.Advance (Phase_Route, S);
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package body Soul.Celtic_Cross
|
|||||||
with SPARK_Mode => On
|
with SPARK_Mode => On
|
||||||
is
|
is
|
||||||
|
|
||||||
|
use type Soul.Tarot.Slot_State;
|
||||||
|
|
||||||
procedure Draw_Spread
|
procedure Draw_Spread
|
||||||
(D : in out Soul.Tarot.Deck;
|
(D : in out Soul.Tarot.Deck;
|
||||||
Spread : out CC_Spread;
|
Spread : out CC_Spread;
|
||||||
|
|||||||
@ -157,7 +157,7 @@ is
|
|||||||
Sun_L : constant String := "## Sun: ";
|
Sun_L : constant String := "## Sun: ";
|
||||||
Moon_L : constant String := ASCII.LF & "## Moon: ";
|
Moon_L : constant String := ASCII.LF & "## Moon: ";
|
||||||
Asc_L : constant String := ASCII.LF & "## Ascendant: ";
|
Asc_L : constant String := ASCII.LF & "## Ascendant: ";
|
||||||
Footer : constant String := ASCII.LF;
|
Footer : constant String := (1 => ASCII.LF);
|
||||||
|
|
||||||
Total : constant Natural :=
|
Total : constant Natural :=
|
||||||
Header'Length
|
Header'Length
|
||||||
@ -166,7 +166,7 @@ is
|
|||||||
+ Asc_L'Length + Asc_T.Length
|
+ Asc_L'Length + Asc_T.Length
|
||||||
+ Footer'Length;
|
+ Footer'Length;
|
||||||
begin
|
begin
|
||||||
Buffer := (others => ' ', Length => 0);
|
Buffer := (Data => (others => ' '), Length => 0);
|
||||||
if Total > Max_Text_Length then
|
if Total > Max_Text_Length then
|
||||||
Status := Error_Overflow;
|
Status := Error_Overflow;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -43,24 +43,50 @@ is
|
|||||||
Channel : String;
|
Channel : String;
|
||||||
Server : String) return Bounded_Text;
|
Server : String) return Bounded_Text;
|
||||||
|
|
||||||
|
-- Per-session storage types. These live in the visible part because the
|
||||||
|
-- Soul_State protected object (declared below) holds a Session_Table as a
|
||||||
|
-- private component, and a protected definition may only contain data
|
||||||
|
-- components — not type or constant declarations.
|
||||||
|
Max_Key : constant := 192;
|
||||||
|
subtype Key_Length is Natural range 0 .. Max_Key;
|
||||||
|
type Session_Key is record
|
||||||
|
Data : String (1 .. Max_Key) := (others => ' ');
|
||||||
|
Length : Key_Length := 0;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type Layer_Flags is array (Soul.Celtic_Cross.CC_Layer) of Boolean;
|
||||||
|
|
||||||
|
type Session_Slot is record
|
||||||
|
In_Use : Boolean := False;
|
||||||
|
Key : Session_Key;
|
||||||
|
Deck : Soul.Tarot.Deck := Soul.Tarot.Full_Deck;
|
||||||
|
Spread : Soul.Celtic_Cross.CC_Spread :=
|
||||||
|
Soul.Celtic_Cross.Empty_Spread;
|
||||||
|
Layer_Done : Layer_Flags := (others => False);
|
||||||
|
Output_Counter : Natural := 0;
|
||||||
|
end record;
|
||||||
|
|
||||||
|
type Session_Table is array (Valid_Session) of Session_Slot;
|
||||||
|
|
||||||
protected Soul_State is
|
protected Soul_State is
|
||||||
pragma Priority (System.Priority'Last - 2);
|
pragma Priority (System.Priority'Last - 2);
|
||||||
|
|
||||||
-- Set the three immutable personality anchors. Fails if called twice.
|
-- Set the three immutable personality anchors. Fails if called twice.
|
||||||
|
-- (A protected operation may not reference its own protected functions
|
||||||
|
-- in pre/postconditions, so the Is_Initialized guard lives in the body.)
|
||||||
procedure Initialize_Big_Three
|
procedure Initialize_Big_Three
|
||||||
(B3 : in Soul.Tarot.Big_Three;
|
(B3 : in Soul.Tarot.Big_Three;
|
||||||
Status : out Operation_Status)
|
Status : out Operation_Status);
|
||||||
with Post => (if Status = OK then Is_Initialized);
|
|
||||||
|
|
||||||
-- Resolve a session by key, allocating a fresh slot (with its own
|
-- Resolve a session by key, allocating a fresh slot (with its own
|
||||||
-- Big-3-pruned deck) on first sight. Returns No_Session +
|
-- Big-3-pruned deck) on first sight. Returns No_Session +
|
||||||
-- Error_Overflow if the table is full.
|
-- Error_Overflow if the table is full. Callers must Initialize_Big_Three
|
||||||
|
-- first; Open_Session uses the global Big-3 to prune each new deck.
|
||||||
procedure Open_Session
|
procedure Open_Session
|
||||||
(Key : in Bounded_Text;
|
(Key : in Bounded_Text;
|
||||||
Ref : out Session_Ref;
|
Ref : out Session_Ref;
|
||||||
Status : out Operation_Status)
|
Status : out Operation_Status)
|
||||||
with Pre => Is_Initialized,
|
with Post => (if Status = OK then Ref in Valid_Session);
|
||||||
Post => (if Status = OK then Ref in Valid_Session);
|
|
||||||
|
|
||||||
-- Accrete one cognitive layer of THIS session's cross from its pool.
|
-- Accrete one cognitive layer of THIS session's cross from its pool.
|
||||||
-- Idempotent per layer: re-forming an already-formed layer is a no-op
|
-- Idempotent per layer: re-forming an already-formed layer is a no-op
|
||||||
@ -79,10 +105,10 @@ is
|
|||||||
procedure Note_Output (Ref : in Valid_Session);
|
procedure Note_Output (Ref : in Valid_Session);
|
||||||
|
|
||||||
-- Serialise the global identity into Bounded_Text for SOUL.md.
|
-- Serialise the global identity into Bounded_Text for SOUL.md.
|
||||||
|
-- Caller must Initialize_Big_Three first (guard lives in the body).
|
||||||
procedure Generate_Soul_MD
|
procedure Generate_Soul_MD
|
||||||
(Buffer : out Bounded_Text;
|
(Buffer : out Bounded_Text;
|
||||||
Status : out Operation_Status)
|
Status : out Operation_Status);
|
||||||
with Pre => Is_Initialized;
|
|
||||||
|
|
||||||
function Is_Initialized return Boolean;
|
function Is_Initialized return Boolean;
|
||||||
function Get_Big_Three return Soul.Tarot.Big_Three;
|
function Get_Big_Three return Soul.Tarot.Big_Three;
|
||||||
@ -96,30 +122,7 @@ is
|
|||||||
private
|
private
|
||||||
Big_3 : Soul.Tarot.Big_Three;
|
Big_3 : Soul.Tarot.Big_Three;
|
||||||
Initialized : Boolean := False;
|
Initialized : Boolean := False;
|
||||||
|
Sessions : Session_Table;
|
||||||
Max_Key : constant := 192;
|
|
||||||
subtype Key_Length is Natural range 0 .. Max_Key;
|
|
||||||
type Session_Key is record
|
|
||||||
Data : String (1 .. Max_Key) := (others => ' ');
|
|
||||||
Length : Key_Length := 0;
|
|
||||||
end record;
|
|
||||||
|
|
||||||
type Layer_Flags is
|
|
||||||
array (Soul.Celtic_Cross.CC_Layer) of Boolean;
|
|
||||||
|
|
||||||
type Session_Slot is record
|
|
||||||
In_Use : Boolean := False;
|
|
||||||
Key : Session_Key;
|
|
||||||
Deck : Soul.Tarot.Deck := Soul.Tarot.Full_Deck;
|
|
||||||
Spread : Soul.Celtic_Cross.CC_Spread :=
|
|
||||||
Soul.Celtic_Cross.Empty_Spread;
|
|
||||||
Layer_Done : Layer_Flags := (others => False);
|
|
||||||
Output_Counter : Natural := 0;
|
|
||||||
end record;
|
|
||||||
|
|
||||||
type Session_Table is array (Valid_Session) of Session_Slot;
|
|
||||||
|
|
||||||
Sessions : Session_Table;
|
|
||||||
end Soul_State;
|
end Soul_State;
|
||||||
|
|
||||||
end Soul.State;
|
end Soul.State;
|
||||||
|
|||||||
@ -1,4 +0,0 @@
|
|||||||
package body Soul
|
|
||||||
with SPARK_Mode => On
|
|
||||||
is
|
|
||||||
end Soul;
|
|
||||||
@ -39,7 +39,7 @@ is
|
|||||||
when ASCII.LF => Append (Buf, "\n");
|
when ASCII.LF => Append (Buf, "\n");
|
||||||
when ASCII.CR => Append (Buf, "\r");
|
when ASCII.CR => Append (Buf, "\r");
|
||||||
when ASCII.HT => Append (Buf, "\t");
|
when ASCII.HT => Append (Buf, "\t");
|
||||||
when others => Append (Buf, (1 => S (I)));
|
when others => Append (Buf, String'(1 => S (I)));
|
||||||
end case;
|
end case;
|
||||||
end loop;
|
end loop;
|
||||||
end Append_Escaped;
|
end Append_Escaped;
|
||||||
|
|||||||
@ -38,6 +38,11 @@ is
|
|||||||
type Ratio_Value is delta 0.001 range 0.0 .. 1.0;
|
type Ratio_Value is delta 0.001 range 0.0 .. 1.0;
|
||||||
type Cost_Value is delta 0.001 range 0.0 .. 1000.0;
|
type Cost_Value is delta 0.001 range 0.0 .. 1000.0;
|
||||||
type Axis_Value is delta 0.01 range -1.0 .. 1.0;
|
type Axis_Value is delta 0.01 range -1.0 .. 1.0;
|
||||||
|
-- Pin 'Small to 0.01 so the bounds are +/-100 units (fits a byte) rather
|
||||||
|
-- than GNAT's default 2**-7 small, which would place 1.0 at exactly 128 --
|
||||||
|
-- one past a signed-8-bit base range and rejected as "high bound outside
|
||||||
|
-- type range".
|
||||||
|
for Axis_Value'Small use 0.01;
|
||||||
|
|
||||||
-- Provenance tags — trust boundary uses these to block reclassification
|
-- Provenance tags — trust boundary uses these to block reclassification
|
||||||
type Provenance_Tag is (
|
type Provenance_Tag is (
|
||||||
|
|||||||
@ -4,6 +4,8 @@ with Soul.Tarot;
|
|||||||
with Soul.Celtic_Cross;
|
with Soul.Celtic_Cross;
|
||||||
with Mafiabot_Types; use Mafiabot_Types;
|
with Mafiabot_Types; use Mafiabot_Types;
|
||||||
|
|
||||||
|
use type Soul.Tarot.Slot_State;
|
||||||
|
|
||||||
procedure Soul_Tests is
|
procedure Soul_Tests is
|
||||||
Fails : Natural := 0;
|
Fails : Natural := 0;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user